Chuyển đến nội dung
Diễn đàn CADViet
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

Chào mọi người. EM có vấn đề khá tương tự vui lòng giúp đỡ. Vì mặt bằng lớn tuy nhiên đối tượng vẽ mong muốn là kéo dài để cắt nhau chứ không phải là dư hoặc thiếu. TUy nhiên lúc vẽ mắt lỗi này. Và cần chỉnh sửa bằng lệnh Trim hoặc Extention thủ công để 2 đường giao nhau. Anh chị có lisp nào để xử lý nhanh việc này không? Vui lòng giúp e. Cảm ơn.

image.thumb.png.65f9c2bd97d1cbfb5fb9c136888eba52.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

Thay vì phải chọn  phía đầu mút dư ngắn như vậy mình sẽ chọn phương án kéo điểm gần biên chặn hơn về đến biên chặn. Như vậy sẽ có chức năng Trim  và Extend cùng lúc.

Lệnh mới chỉ dùng được cho LINE và LWPOLYLINE.

Chọn các đường cần cắt, sau đó chọn biên cắt.

 

(DEFUN c:test  ( / BIEN EP LS PARAM PT SP fillcoord)
  (DEFUN fillcoord  (pt)
  (VLAX-MAKE-VARIANT
    (VLAX-SAFEARRAY-FILL
      (VLAX-MAKE-SAFEARRAY VLAX-VBDOUBLE '(0 . 1))
      (LIST (CAR pt) (CADR pt))
      )
    )
  )
  (PROMPT "\nChon cac LINE, PLINE bi cat")
  (SETQ ls (MAPCAR 'VLAX-ENAME->VLA-OBJECT (ACET-SS-TO-LIST (SSGET '((0 . "LINE,LWPOLYLINE"))))))
  (SETQ bien (VLAX-ENAME->VLA-OBJECT (CAR (ENTSEL "\nChon bien chan:"))))

  (foreach obj ls
  (SETQ pt (VLAX-SAFEARRAY->LIST (VLAX-VARIANT-VALUE (VLA-INTERSECTWITH obj bien ACEXTENDTHISENTITY))))

  (SETQ sp    (VLAX-CURVE-GETPOINTATDIST obj 0)
        ep    (VLAX-CURVE-GETPOINTATDIST obj (VLA-GET-LENGTH obj))
        param (VLAX-CURVE-GETPARAMATDIST obj (VLA-GET-LENGTH obj))
        )
  (IF (= (VLA-GET-OBJECTNAME obj) "AcDbPolyline")
    (IF (< (DISTANCE pt sp) (DISTANCE pt ep))
      (VLA-PUT-COORDINATE obj 0 (fillcoord pt))
      (VLA-PUT-COORDINATE obj param (fillcoord pt))
      )
    )
  (IF (= (VLA-GET-OBJECTNAME obj) "AcDbLine")
    (IF (< (DISTANCE pt sp) (DISTANCE pt ep))
      (VLA-PUT-STARTPOINT obj (vlax-3d-point pt))
      (VLA-PUT-ENDPOINT obj (vlax-3d-point pt))
      )
    )
    )
  )

 

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 tôi load trên cadviet (gg nhưng không tìm thấy, hình như của ad nguyen hoanh ) và có chỉnh sửa.

Vì dùng lệnh trim của cad nên có thể chọn nhiều loại đối tượng và đường cắt.

Chú ý biến EDGEMODE và điểm pick để có kết quả mong muốn


(defun c:MulTrim ( / ls p)
    (prompt "\nChon cac doi tuong bi cat :")
    (setq ls (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget)))) p (getpoint "\nPick phia cat :"))
    (prompt "\nChon duong cat :")
    (vl-cmdf "Trim" (ssget) "")
    (foreach e ls
        (vl-cmdf (list e p))  )
    (vl-cmdf "")
)

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

×