Chuyển đến nội dung
Diễn đàn CADViet
Danh Cong

Nhờ Nâng Cấp Lisp Dải Leader Tại Giao Điểm Của Các Đoạn Thẳng.

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

Chào các anh chị ạ.

Em mới tập viết lisp, chỉ viết được cách dải Leader theo 1 đường thẳng, các leader dải theo 1 khoảng cách định sẵn thôi.

 Giờ em muốn nâng cấp nó - Hoặc cũng có thể phải viết 1 lisp mới hoàn toàn mà em thì chưa hiểu rõ lắm. 

 

Mục tiêu của em như sau.

-    Có 1 số đường thẳng như hình vẽ. Đường thẳng A-B giao cắt với các đường thẳng đó. 

-    EM muốn vẽ n đường Leader, với điểm cuối là A, còn điểm đầu là giao điểm của đường thẳng A-B với các đường thẳng còn lại

 

Mong các anh chị giúp đỡ. 124641_leader.png

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

Lisp  này của em thì chỉ cố định được điểm cuối của Learder. Còn điểm đầu thì phải Pick thủ công, nếu phải vẽ nhiều Leader thì pick điểm mất nhiều thời gian quá.  Do vậy nếu xác định được giao điểm của đường thẳng A-B với các đường thẳng kia thì tốt quá http://www.cadviet.com/upfiles/6/124641_lee.txt

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ái này nên làm MLeader luôn để các Leader nó kết thành 1 đối tượng.

Lisp sửa lại của bạn:

 

(defun c:lee  (/ a b c cmd enl i ssl tmp)
 (setq cmd (getvar 'CMDECHO))
 (setvar 'CMDECHO 0)
 (command "undo" "be")
 (if (and (setq a (getpoint "\nChon diem Cuoi Leader"))
          (setq b (getpoint a "\nChon diem Dau ve Leader")))
  (progn
;;; (command "Leader" b a "" "" "n")
         (command "LINE" b a "")
         (setq tmp (entlast))
         (setq ssl (ssget "_F" (list a b) '((0 . "*LINE"))))
         (setq i -1)
         (while (setq enl (ssname ssl (setq i (1+ i))))
          (and (Setq c (car (acet-geom-intersectwith enl tmp 0))) (command "leader" c a "" "" "n")))
         (entdel tmp)))
 (command "undo" "end")
 (setvar 'CMDECHO cmd)
 (princ))
  • Vote tăng 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

Em cám ơn ạ :)

Em tìm tòi học lisp mấy tuần,  chưa biết cách để xử lý cơ sở dữ liệu của đối tượng được chọn.

 

ANh có thể giải thích chút ít về cú pháp : (ssget "_F" (list a b) '((0 . "*LINE"))         và      (and (Setq c (car (acet-geom-intersectwith enl tmp 0)))

 

 

 

Cái này nên làm MLeader luôn để các Leader nó kết thành 1 đối tượng.

Lisp sửa lại của bạn:

(defun c:lee  (/ a b c cmd enl i ssl tmp)
 (setq cmd (getvar 'CMDECHO))
 (setvar 'CMDECHO 0)
 (command "undo" "be")
 (if (and (setq a (getpoint "\nChon diem Cuoi Leader"))
          (setq b (getpoint a "\nChon diem Dau ve Leader")))
  (progn
;;; (command "Leader" b a "" "" "n")
         (command "LINE" b a "")
         (setq tmp (entlast))
         (setq ssl (ssget "_F" (list a b) '((0 . "*LINE"))))
         (setq i -1)
         (while (setq enl (ssname ssl (setq i (1+ i))))
          (and (Setq c (car (acet-geom-intersectwith enl tmp 0))) (command "leader" c a "" "" "n")))
         (entdel tmp)))
 (command "undo" "end")
 (setvar 'CMDECHO cmd)
 (princ))

 

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

 Bạn tìm hiểu hàm:

- ssget về chọn và lọc đối tượng.

- acet-geom-intersectwith là hàm (của Exprres) tìm giao điểm của enl và tmp

Trên 4r có nhiều bài nói về các hàm đó rồ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
Vào lúc 29/6/2016 tại 10:14, quocmanh04tt đã nói:

 Bạn tìm hiểu hàm:

- ssget về chọn và lọc đối tượng.

- acet-geom-intersectwith là hàm (của Exprres) tìm giao điểm của enl và tmp

Trên 4r có nhiều bài nói về các hàm đó rồi.

4r là gì vậy anh?

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

×