Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
12 replies to this topic

#1 kycuckeo

kycuckeo

    biết vẽ circle

  • Members
  • PipPip
  • 37 Bài viết
Điểm đánh giá: 2 (bình thường)

Đã gửi 03 July 2014 - 02:27 PM

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


  • 0
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+--+
"NEVER BACK DOWN"

#2 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 03 July 2014 - 10:08 PM

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"?
  • 0

#3 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 03 July 2014 - 10:20 PM

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


  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#4 Hoan1111

Hoan1111

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 2587 Bài viết
Điểm đánh giá: 692 (tốt)

Đã gửi 03 July 2014 - 10:37 PM

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/Ch...h-chiem-80.html


  • 0

66 Câu Phật Học Cho Cuộc Sống : http://ngocchinh.com...-cho-cuoc-song/

Gió đưa cây cải về trời / Rau răm ở lại chịu lời đắng cay...

 

 


#5 ndtnv

ndtnv

    biết lệnh minsert

  • Members
  • PipPipPipPipPipPip
  • 437 Bài viết
Điểm đánh giá: 384 (khá)

Đã gửi 04 July 2014 - 07:52 AM

Ống ngánh là từ chuyên ngành, search Google ra 627 kết quả
https://www.google.c...l#q="ống ngánh"
Trong đó có thuật ngữ pháp lý trong thư viện pháp luật:
http://thuvienphaplu...Ly.aspx?q=ngánh
19626_ongnganh.jpg


  • 1

#6 kycuckeo

kycuckeo

    biết vẽ circle

  • Members
  • PipPip
  • 37 Bài viết
Điểm đánh giá: 2 (bình thường)

Đã gửi 04 July 2014 - 09:07 AM

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...v/Thao Dien.dwg


  • 0
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+--+
"NEVER BACK DOWN"

#7 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 04 July 2014 - 12:52 PM

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)  
)
 

  • 1

#8 sumi

sumi

    biết lệnh array

  • Members
  • PipPipPip
  • 185 Bài viết
Điểm đánh giá: 55 (tàm tạm)

Đã gửi 05 July 2014 - 10:09 AM

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!


  • 0
"Xin chào bạn. Đây là tổng đài tin nhắn. Ấn phím 1 để có 1 lời khen. Phím 2 cho một lời chúc tốt đẹp. Phím 3 cho 1 nụ hôn. Phím 4 cho 1 cuộc hẹn. Nếu muốn tất cả hãy bấm số của tôi"

#9 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 05 July 2014 - 11:15 AM

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


  • 0

#10 Hoan1111

Hoan1111

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 2587 Bài viết
Điểm đánh giá: 692 (tốt)

Đã gửi 05 July 2014 - 12:24 PM

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)


  • 0

66 Câu Phật Học Cho Cuộc Sống : http://ngocchinh.com...-cho-cuoc-song/

Gió đưa cây cải về trời / Rau răm ở lại chịu lời đắng cay...

 

 


#11 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 05 July 2014 - 01:43 PM

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))) ))
        
      )
    )
  )
)
 

  • 2

#12 hoacomay70

hoacomay70

    biết vẽ circle

  • Members
  • PipPip
  • 30 Bài viết
Điểm đánh giá: -1 (bình thường)

Đã gửi 14 July 2015 - 10:09 AM

 

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.


  • 0

#13 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 14 July 2015 - 11:29 AM

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.


  • 0