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

VIẾT LISP KÉO DÀI, CẮT BỚT NHIỀU ĐỐI TƯỢNG!

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

Mình có yêu cầu về lisp như trong bản vẽ đính kèm! Mong các bạn giúp đỡ!

vd.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

Các đường đó là line hay pline?

Không biết tôi có nhìn lầm không chứ ống "ngánh" là ống gì? hay là "nhá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

Mình có yêu cầu về lisp như trong bản vẽ đính kèm! Mong các bạn giúp đỡ!

Hề hề hề,

Hãy gửi bản vẽ lên chứ nói khơi khơi vậy rất khó làm. Để viết được lisp, cần phải biết cấu trúc cái bản vẽ của bạn, các ông phân phối và ống nhánh được vẽ bằng loại đối tựơng nào, có những thuộc tính gì.

Bạn hãy tìm kiếm và đọc kỹ các quy định của diễn đàn về việc post các yêu cầu về lisp> Sau đó cố gắng thực hiện đúng các yêu cầu này thì việc đáp ứng yêu cầu của bạn mới có thể nhanh chóng và kịp thời được bạn ạ.

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ác đường đó là line hay pline?

Không biết tôi có nhìn lầm không chứ ống "ngánh" là ống gì? hay là "nhánh"?

 

Theo em, ống ngánh "thuật ngữ" dùng để chỉ các tuyến đường ống thi công, lắp đặt ẩu! :) :) :)

Tỉ lệ thất thoát nước sạch qua ống ngánh chiếm 80%:

http://tuoitre.vn/Chinh-tri-Xa-hoi/64434/ti-le-that-thoat-nuoc-sach-qua-ong-nganh-chiem-80.html

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

Ống ngánh là từ chuyên ngành, search Google ra 627 kết quả
https://www.google.com.vn/?gws_rd=ssl#q=%22%E1%BB%91ng+ng%C3%A1nh%22
Trong đó có thuật ngữ pháp lý trong thư viện pháp luật:
http://thuvienphapluat.vn/page/ThuatNguPhapLy.aspx?q=ng%C3%A1nh
19626_ongnganh.jpg

  • 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

Hề hề hề,

Hãy gửi bản vẽ lên chứ nói khơi khơi vậy rất khó làm. Để viết được lisp, cần phải biết cấu trúc cái bản vẽ của bạn, các ông phân phối và ống nhánh được vẽ bằng loại đối tựơng nào, có những thuộc tính gì.

Bạn hãy tìm kiếm và đọc kỹ các quy định của diễn đàn về việc post các yêu cầu về lisp> Sau đó cố gắng thực hiện đúng các yêu cầu này thì việc đáp ứng yêu cầu của bạn mới có thể nhanh chóng và kịp thời được bạn ạ.

 

Đây là file bản vẽ. Xin nhờ các bạn giúp đỡ!

http://www.mediafire.com/download/85jf3t835td87vv/Thao+Dien.dwg

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ậy bạn thử cái lisp dưới đây. Vì các ống phân phối tuy nhiều layer khác nhau nhưng đều có màu cyan nên tôi chọn màu này để làm.

Khi chạy ct thì không nên quét toàn bộ bản vẽ , vì do bản vẽ lớn khó kiểm tra kết quả có đúng ý mình không, chỉ nên quét một khoảng nhỏ (tuỳ theo mắt mình nhìn).

 

(defun c:tnt(/ os mau tt10 tt11 tm tm1 ent it gd n kc)
  (defun dxf(id v) (cdr (assoc id (entget v))))
  (defun ints (o1 o2 mo / l0 l)
    (setq l (vlax-Invoke (vlax-EName->vla-Object o1) "IntersectWith" (vlax-EName->vla-Object o2) mo)
l0 nil)
    (while l
      (setq l0 (append l0 (list (list (car l) (cadr l) (caddr l))))
 l (cdddr l)))
    l0
  )
  (defun mau(/ l1 l0 ent)
    (command "-layer" "on" "*" "")
    (setq l0 '((0 . "LWPOLYLINE") (-4 . "<or")))
    (setq l1 (if (= 4 (cdr (assoc 62 (tblnext "LAYER" t))))
      (append nil (list (cons 8 (cdr (assoc 2 (tblnext "LAYER" t)))))) nil))
    (while (setq ent (tblnext "LAYER"))
      (if (= 4 (cdr (assoc 62 ent))) (setq l1 (append l1 (list (cons 8 (cdr (assoc 2 ent))))))))
    (append l0 (append l1 (list '(-4 . "or>"))))
  )
  ;;;
  (setq os (getvar 'osmode)
mau (mau))
  (setvar 'osmode 0)    
  (foreach x (acet-ss-to-list (ssget '((0 . "LINE") (8 . "DN ONG NGANH PE"))))
    (setq  tt10 (dxf 10 x)  tt11 (dxf 11 x))
    (if (setq tm (ssget "F" (list tt10 tt11) mau))
      (progn
        (setq ent (ssname tm 0))
        (if (setq it (ints x ent acextendnone))
 (setq gd (if (< (distance (car it) tt10) (distance (car it) tt11)) tt10 tt11)
tm (command "trim" ent "" (list x gd) ""))))
      (progn
        (setq n 1 kc 1 tm nil tm1 nil)
(while (not (or (setq tm (ssget "F" (list tt10 (polar tt10 (angle tt11 tt10) kc)) mau))
(setq tm1 (ssget "F" (list tt11 (polar tt11 (angle tt10 tt11) kc)) mau))))
 (setq kc (* (setq n (1+ n)) kc)))
(if tm (command "extend" (ssname tm 0) "" (list x tt10) ""))
(if tm1 (command "extend" (ssname tm1 0) "" (list x tt11) "")))
    )
  )
  (setvar 'osmode os)
  (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

Các bạn cho mình hỏi có lisp nào có thể giúp kéo dài 2 line hoặc pline ra cho giao nhau hoặc là trim tại vị trí giao nhau mà ko quan tâm đến đối tượng thuộc layer gì ko? Lisp trên mình ko dùng dc.

Khi mình sẽ mặt bằng kết cấu dầm - sàn, do có nhiều chỗ giao nhau cần trim, nếu trim từ cái 1 thì lâu quá!

Mình nhớ là có lisp này ở trong 1 topic nào đó nhưng ko tìm lại được vì mình ko save link topic.

Cảm ơn các bạn!

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

Sao không dùng lệnh chamfer với d=0?

 

Ý  của anh chủ thớt

Là đồng loạt chơi luôn

Nhiều em cùng một lúc

Sẽ đỡ nhọc sức hơn

Bác ạ!

  ( Gõ CHA>> chọn D=0 hoặc gõ F >> chọn R = 0  chỉ chơi được từng em một)

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ậy bạn thử cái này, chỉ dùng với line thôi, và khi giao điểm của 2 line ở gần, chứ không thể kéo dài tới vô cực được.

 

 
(defun C:tnn(/ ss n sli vn tm)
  (defun dxf(id v) (cdr (assoc id (entget v))))
  (defun midp(v / d1 d2) (setq d1 (dxf 10 v) d2 (dxf 11 v))
    (polar d1 (angle d1 d2) (* 0.5 (distance d1 d2))))
  
  (defun ints (o1 o2 mo / l0 l)
    (setq l (vlax-Invoke (vlax-EName->vla-Object o1) "IntersectWith" (vlax-EName->vla-Object o2) mo)
l0 nil)
    (while l
      (setq l0 (append l0 (list (list (car l) (cadr l) (caddr l))))
    l (cdddr l)))
    l0
  )
  ;;;
  (setq ss (ssget '((0 . "LINE"))))
  (command "fillet" "r" 0)
  (if (and ss (= (sslength ss) 2))
    (command "fillet"  (list (ssname ss 0) (midp (ssname ss 0)))
    (list (ssname ss 1) (midp (ssname ss 1))))
    (progn
      (setq n -1 sli (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))
      (while (< n (1- (length sli)))
        (setq vn (nth (setq n (1+ n)) sli))
        (foreach v sli
 (setq tm (vlax-curve-getDistAtParam v (vlax-curve-getEndParam v)))
          (if (vl-remove-if-not '(lambda(x) (or (< (distance x (dxf 10 v)) tm)
(< (distance x (dxf 11 v)) tm))) (ints vn v acExtendBoth))
   (command "fillet"  (list v (midp v)) (list vn (midp vn))) ))
        
      )
    )
  )
)
 
  • Vote tăng 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

 

Vậy bạn thử cái này, chỉ dùng với line thôi, và khi giao điểm của 2 line ở gần, chứ không thể kéo dài tới vô cực được.

 
(defun C:tnn(/ ss n sli vn tm)
  (defun dxf(id v) (cdr (assoc id (entget v))))
  (defun midp(v / d1 d2) (setq d1 (dxf 10 v) d2 (dxf 11 v))
    (polar d1 (angle d1 d2) (* 0.5 (distance d1 d2))))
  
  (defun ints (o1 o2 mo / l0 l)
    (setq l (vlax-Invoke (vlax-EName->vla-Object o1) "IntersectWith" (vlax-EName->vla-Object o2) mo)
l0 nil)
    (while l
      (setq l0 (append l0 (list (list (car l) (cadr l) (caddr l))))
    l (cdddr l)))
    l0
  )
  ;;;
  (setq ss (ssget '((0 . "LINE"))))
  (command "fillet" "r" 0)
  (if (and ss (= (sslength ss) 2))
    (command "fillet"  (list (ssname ss 0) (midp (ssname ss 0)))
    (list (ssname ss 1) (midp (ssname ss 1))))
    (progn
      (setq n -1 sli (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))
      (while (< n (1- (length sli)))
        (setq vn (nth (setq n (1+ n)) sli))
        (foreach v sli
 (setq tm (vlax-curve-getDistAtParam v (vlax-curve-getEndParam v)))
          (if (vl-remove-if-not '(lambda(x) (or (< (distance x (dxf 10 v)) tm)
(< (distance x (dxf 11 v)) tm))) (ints vn v acExtendBoth))
   (command "fillet"  (list v (midp v)) (list vn (midp vn))) ))
        
      )
    )
  )
)
 

Sao em dùng li sp bao loi ; error: syntax error vay a. Bac sua giup em duoc khong.

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

Sau khi down về bạn mở file đó bằng lệnh vlide trong cad sẽ thấy có nhiều ký tự lạ, xóa hết ký tự lạ, save file, load lại và chạy.

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  

×