Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
dohoangviet1606

Xin lisp, sửa lisp chèn block

Các bài được khuyến nghị

Các bác cho em hỏi:Có lisp nào chèn 1 block( theo tên)  vào các Tâm đường tròn đường kính D không ạ?

en tìm thấy trên mạng có lisp chèn block vào các giao điểm "ins", mong mọi người sửa cho em như yêu cầu trên ạ!

Em cảm ơn!

chenblocktaidiemgiao.lsp

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
18 giờ trước, dohoangviet1606 đã nói:

Cho em hỏi em muốn chèn block vào đường tròn đường kính cố định( ví dụ: chỉ D10) thì sửa lisp trên kiểu gì ạ!

 

Cái này thì hơi cụ thể rồi, bạn nên kết hợp với các hàm lọc ví dụ QSELECT hoặc FILTER để chọn ra các đường tròn có đường kính 10 trước nhé.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

 

Vào lúc 28/9/2022 tại 21:23, dohoangviet1606 đã nói:

Các bác cho em hỏi:Có lisp nào chèn 1 block( theo tên)  vào các Tâm đường tròn đường kính D không ạ?

en tìm thấy trên mạng có lisp chèn block vào các giao điểm "ins", mong mọi người sửa cho em như yêu cầu trên ạ!

Em cảm ơn!

chenblocktaidiemgiao.lsp

Bạn nói cụ thể hơn đi, Block đó có lưu sẵn trong file cad rồi hay mình tự chọn click vô. Tâm đường tròn lúc nào cũng Ø10?

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
16 phút trước, namds86 đã nói:

(if(setq A (ssget "_:L" '((0 . "CIRCLE"))))

=> (if(setq A (ssget "_:L" '((0 . "CIRCLE") (40 . 10))))  ; 10 la ban kinh circle

  • Like 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
10 giờ trước, Doan Van Ha đã nói:

=> (if(setq A (ssget "_:L" '((0 . "CIRCLE") (40 . 10))))  ; 10 la ban kinh circle

;INSERT THEO CIRCLE
(defun C:i5 ( / ELST ENT LAYER LST NAME ROT SC)
  (setq elst (acet-ss-to-list (ssget (list (cons 0 "CIRCLE")))))
  (setq ent (ent_pick "INSERT" "Chon Block: "))
  (setq lst (entget ent))
  (setq name (vla-get-effectivename (vlax-ename->vla-object ent)))
  (setq layer (cdr (assoc 8 lst)))
  (setq sc (cdr (assoc 41 lst)))
  (setq rot (cdr (assoc 50 lst)))
  (foreach ent elst
    (insert_att name (cdr (assoc 10 (entget ent))) layer sc rot nil nil)
    )
  (print)
  )

 

Em thêm điều kiện bán kinh =5, (40 . 5) vào thêm sao nó báo lỗi nhỉ, a  giải thích cho em với...

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Của bạn đây nhé!

;;;;;;;;;;;;;;;;;;;;;;;;

(defun c:CHENBLOCK ()
(command ".ucs" "W" "")
(setvar "cmdecho" 0)
(command "undo" "be")
(setq osm (getvar "osmode"))
(setvar "regenmode" 1)
(setvar "osmode" 0)
(setq B (car (entsel "\ Chon block muon chen")))
(setq C (entget B))
(setq bl(cdr(assoc 2 C)))
(initget (+ 1 2 4))
(setq A1 (getreal "\nChon duong kinh duong tron muon chen block: "))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(prompt "\n Quet chon vung can chen block: ")
(if(setq A (ssget "_:L" '((0 . "CIRCLE"))))
 (progn
  (setq n 0)
  (setq B (sslength A))
    (while (< n B)
     (setq C(ssname A n))
     (setq D(entget C))
     (setq E(cdr(assoc 10 D)))
     (setq E1(cdr(assoc 40 D)))
     (if(= (/ A1 2) E1)
     (command ".insert" bl E 1 "" ""))
    (setq n (+ n 1))
    )
 )
)
(setvar "cmdecho" 1)
(setvar "osmode" osm)
(command "undo" "end")
(princ)
)    

 

 

  • Like 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

@namds86Bạn thay dòng lệnh (setq A (ssget "_:L" '((0 . "CIRCLE")))) bằng lệnh (setq A (ssget "_:L" (list (cons 0  "CIRCLE")(cons 40  (* 2. A1))))) để lọc đường tròn . Trường hợp này dùng lệnh copy hay hơn

  • Like 2

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay
Đăng nhập để thực hiện theo  

×