Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
anhvan2512

Yêu cầu

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

anhvan2512    1

Em cần 1 lisp tính tổng các chiều dài đoạn thẳng đã chọn và xuất ra exel. hoặc text

em cũng tìm nhiều lisp rồi nhưng ko phù hợp nay nhờ các anh chị giúp

cụ thể như sau ví dụ có 2 đoạn  thẳng AB và CD em cần tính tổng chiều dài của đoạn A-a1 và d1-D thay vì tính như các lisp khác là cả đoạn AB và CD

em cám ơn nhiều

 

  • Vote giảm 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
anhvan2512    1

em lam bên PCCC nên lúc bốc khổi lượng các ống chữa cháy rất phức tạp, đặc biệt là hệ thống ống xương cá, ngồi dim từng cái .. ôi thôi rồi lượm ơi!!

vậy nên đành lên đây tìm cao thủ trợ giúp

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
trumlenmang    29

Em cần 1 lisp tính tổng các chiều dài đoạn thẳng đã chọn và xuất ra exel. hoặc text

em cũng tìm nhiều lisp rồi nhưng ko phù hợp nay nhờ các anh chị giúp

cụ thể như sau ví dụ có 2 đoạn  thẳng AB và CD em cần tính tổng chiều dài của đoạn A-a1 và d1-D thay vì tính như các lisp khác là cả đoạn AB và CD

em cám ơn nhiều

Theo mình hiểu công việc của bạn bị khó khăn khi bốc khổi lượng ở những đoạn thẳng dài mà đường kính ống khác nhau, do đó cần cắt ra mỗi đoạn chỉ có một đường kính thôi để dễ chọn tính tổng, bạn thử tìm lisp breakobjects trên diễn đàn dùng thử đi, nó sẽ cắt những đoạn thẳng giao nhau tại vị trí giao đó, sau đó bạn có thể dùng lisp tính tổng các đoạn thẳng để bốc khối lượng.

  • 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
anhvan2512    1

Theo mình hiểu công việc của bạn bị khó khăn khi bốc khổi lượng ở những đoạn thẳng dài mà đường kính ống khác nhau, do đó cần cắt ra mỗi đoạn chỉ có một đường kính thôi để dễ chọn tính tổng, bạn thử tìm lisp breakobjects trên diễn đàn dùng thử đi, nó sẽ cắt những đoạn thẳng giao nhau tại vị trí giao đó, sau đó bạn có thể dùng lisp tính tổng các đoạn thẳng để bốc khối lượng.

không có file rất khó để hình dung yêu cầu của bạn. bạn hãy gửi file nên

em vừa gửi file bản vẽ đính kèm, mấy anh chị xem thử và hướng dẫn e chút

ví dụ em muốn tính tổng chiều dài các đoạn DN 40.

@trumlenmang em đã thử nhưng ko được hoặc do chưa hiểu rõ lệnh, anh có thể hướng dẫn dùng lisp này được kohttp://www.cadviet.com/upfiles/4/141113_drawing1_1.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
phamthanhbinh    3.123

em vừa gửi file bản vẽ đính kèm, mấy anh chị xem thử và hướng dẫn e chút

ví dụ em muốn tính tổng chiều dài các đoạn DN 40.

@trumlenmang em đã thử nhưng ko được hoặc do chưa hiểu rõ lệnh, anh có thể hướng dẫn dùng lisp này được kohttp://www.cadviet.com/upfiles/4/141113_drawing1_1.dwg

Hề hề hề,

Yêu cầu của bạn không quá khó nhưng bạn đã tự làm khó cho mình mà thôi. Nếu bạn quản lý bản vẽ với cách quản lý phù hợp thì việc lấy tổng các đoạn thẳng yêu cầu sẽ không quá khó đâu.

Tỷ như các đoạn ống có cùng ký hiệu bạn nhét chúng vào chung một layer hay có màu riêng biệt ....... Khi đó có thể dễ dàng tách riêng các đoạn ống này để tính toán bạn ạ.

Việc bạn sử dụng một line để thể hiện chung cho các đoạn ống như vậy sẽ làm khó khăn hơn cho việc tính toán. Không phải không có cách làm nhưng nó sẽ tốn công sức hơn khá nhiều.

Nếu bạn không thể tổ chức quản lý lại bản vẽ theo hướng thuận lợi hơn thì đành chờ mấy bữa, khi rảnh rỗi mình sẽ viết thử lisp với bản vẽ bạn đã gửi.

  • 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
anhvan2512    1

@phamthanhbinh

Cám ơn bạn nhiệt tình giúp đỡ.

Không phải là ko muôns làm như bạn nói nhưng một phần là do bản vẽ thiết kế là của đơn vị khác, mình chỉ là bốc khốiương vật tư để thi công thô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
pphung183    425

Nhìn bản vẽ này của bạn thì có lẽ chỉ đi theo hướng là chọn đường thẳng, pick 2 điểm trên đường thẳng chọn lấy khoảng cách. Và cứ thế lặp lại cho đến khi hết muốn đo :huh: . thấy có vẽ hơi bị thủ công. Nếu bạn muốn thế thì mai rãnh tôi làm cho 1 lisp theo hướng này :)

  • 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
anhvan2512    1

Có vẻ cũng khá thủ công, nhưng có còn hơn ko. Cung do hơn là ngồi dim từng đoạn rồi nhập vào bảng tính.

thanks bạn đã trợ giúp, chờ thêm lisp của bác phamthanhbinh nữa

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
pphung183    425

Lisp đây ! Líp làm việc như tôi đã nói, có thể chọn đối tượng để Pick 2 điểm là : LINE, ARC, SPLINE, POLYLINE, LWPOLYLINE , có thể chơi được luôn với đường bao kín như CIRCLE, ELLIPSE :) ...Ko dùng cho Mline :P :

(defun C:TCD (/ en ms os L str) (vl-load-com)
(princ "\nChon 1 curve : LINE, ARC, SPLINE, *POLYLINE can do")
(while (not (setq en (ssget ":S" (list (cons 0 "LINE,ARC,SPLINE,*POLYLINE"))))))
(setq ms (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object))))
(setq os (getvar 'osmode)) (setvar 'osmode 545)
(setq L 0.0 en (ssname en 0)) (while en (lentcon en) 
(setq en (car (entsel "\nChon curve can do tiep or Enter lay ket qua"))) )
(setq str (rtos L 2 2)) (setq pt (getpoint "\nChọn điểm đặt kết quả :"))
(vla-AddText ms str (vlax-3d-point pt) (getvar 'dimtxt)) 
(setvar 'osmode os) (princ))
(defun lentcon (en / p1 p2 kc ent Li)
(while (not (setq p1 (getpoint "\n Chon diem dau tren curve "))))
(setq p1 (vlax-curve-getClosestPointTo en p1)) 
(while (not (setq p2 (getpoint p1 "\n Chon diem thu hai tren curve")))) 
(setq p2 (vlax-curve-getClosestPointTo en p2)) 
(setq kc (- (vlax-curve-getdistatpoint en p2) (vlax-curve-getdistatpoint en p1)))
(vla-copy (vlax-ename->vla-object en)) (setq ent (entlast))
(vl-cmdf "break" ent "non" (if (> kc 0) p2 p1) "non" (vlax-curve-getendpoint ent))
(vl-cmdf "break" ent "non" (if (> kc 0) p1 p2) "non" (vlax-curve-getstartpoint ent))
(setq Li (vlax-curve-getDistAtPoint ent (vlax-curve-getendpoint ent)))
(setq L (+ L Li)) (vla-erase (vlax-ename->vla-object ent)) )

  • 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
phamthanhbinh    3.123

@phamthanhbinh Cám ơn bạn nhiệt tình giúp đỡ. Không phải là ko muôns làm như bạn nói nhưng một phần là do bản vẽ thiết kế là của đơn vị khác, mình chỉ là bốc khốiương vật tư để thi công thôi.

Hề hề hề,

Bạn dùng thử lisp dưới đây coi sao nhé:

 

(defun c:tocc (/ oldos ssl1 txt tg pls ssl pls1 p n i p1 p2 sst len )
(setq oldos (getvar "osmode"))
(setvar "osmode" 0)
(alert "\n Hay chon cac line chua cac doan ong can tinh" )
(setq ssl1 (acet-ss-to-list (ssget  (list (cons 0 "line")))))
(setq txt (cdr (assoc 1 (entget (car (entsel "\n Chon text ky hieu doan ong can tinh"))))))
(setq tg 0)
(foreach e1 ssl1
         (setq pls (list (cdr (assoc 10 (entget e1))) (cdr (assoc 11 (entget e1)))))
         (setq ssl (acet-ss-to-list (ssget "f" pls (list (cons 0 "insert") (cons 2 "spr-u")))))
         (setq pls1 (list))
         (foreach blk ssl
                 (setq p (cdr (assoc 10 (entget blk))))
                 (setq pls1 (append pls1 (list p)))
         )
         (setq n (length pls1))
         (setq i 0)
         (while (< i (1- n))
                (setq p1 (nth i pls1) p2 (nth (1+ i) pls1)
                         sst (ssget "w" (list (car p1) (- (cadr p1) 500)) (list (car p2) (+ (cadr p2) 500)) (list (cons 0 "text") (cons 1 txt))) )
               (if sst
                     (progn
                            (setq len (distance p1 p2))
                            (setq tg (+ len tg))
                     )
               )
               (setq i (1+ i))
         )
)
(alert  (strcat " \nTong chieu dai doan ong " txt " la : " (rtos tg 2 2) " dvbv"))
 
(setvar "osmode" oldos)
)
  • 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
anhvan2512    1

cám ơn pphung183 và phamthanhbinh rất nhiều

@phamthanhbinh  hình như cac đoạn thẳng theo trục Oy không  hoạt động,bạn xem lại giúp.
có thể sửa lisp lại thành tùy chọn điểm đầu và cuối bất kỳ để tính toán ko ạ. em cám ơn nhiều.
 

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
phamthanhbinh    3.123

cám ơn pphung183 và phamthanhbinh rất nhiều

@phamthanhbinh  hình như cac đoạn thẳng theo trục Oy không  hoạt động,bạn xem lại giúp.

có thể sửa lisp lại thành tùy chọn điểm đầu và cuối bất kỳ để tính toán ko ạ. em cám ơn nhiều.

 

Hề hề hề, 

Xin lỗi bạn vì mình chưa check kỹ lisp.

Đúng là khi line thẳng đứng theo trục oy thì không chọn được text ký hiệu đọn ống. 

Mình đã sửa lại trong lisp bên dưới. 

Tuy nhiên ban cần lưu ý vài điểm sau đây khi sử dụng lisp này:

1/- Lisp chỉ tính được các đoạn ống nếu hai đầu của đoạn ống có gắn block SPR-U và ký hiệu đoạn ống phải nằm  trên đoạn ống cần tính. Nếu các đoạn ống không có các ký hiệu này sẽ không tính được.

2/- Các ký hiệu đoạn ống phải được dùng thống nhất trên bản vẽ.và không được cách quá xa (> 500) so với tim ống.

 

(defun c:tocc (/ oldos ssl1 txt tg pls ssl pls1 p n i p1 p2 sst len )
(setq oldos (getvar "osmode"))
(setvar "osmode" 0)
(alert "\n Hay chon cac line chua cac doan ong can tinh" )
(setq ssl1 (acet-ss-to-list (ssget  (list (cons 0 "line")))))
(setq txt (cdr (assoc 1 (entget (car (entsel "\n Chon text ky hieu doan ong can tinh"))))))
(setq tg 0)
(foreach e1 ssl1
         (setq pls (list (cdr (assoc 10 (entget e1))) (cdr (assoc 11 (entget e1)))))
         (setq ssl (acet-ss-to-list (ssget "f" pls (list (cons 0 "insert") (cons 2 "spr-u")))))
         (setq pls1 (list))
         (foreach blk ssl
                 (setq p (cdr (assoc 10 (entget blk))))
                 (setq pls1 (append pls1 (list p)))
         )
         (setq n (length pls1))
         (setq i 0)
         (while (< i (1- n))
                (setq p1 (nth i pls1) p2 (nth (1+ i) pls1))
                (if (not (equal (car p1) (car p2) 1))
                    (setq     sst (ssget "c" (list (car p1) (- (cadr p1) 500)) (list (car p2) (+ (cadr p2) 500)) (list (cons 0 "text") (cons 1 txt))) )
                    (setq     sst (ssget "c" (list (- (car p1) 500)  (cadr p1) ) (list (+ (car p2) 500) (cadr p2) ) (list (cons 0 "text") (cons 1 txt))) )
               )
               (if sst
                     (progn
                            (setq len (distance p1 p2))
                            (setq tg (+ len tg))
                     )
               )
               (setq i (1+ i))
         )
)
(alert  (strcat " \nTong chieu dai doan ong " txt " la : " (rtos tg 2 2) " dvbv"))
 
(setvar "osmode" oldos)
(princ)
)
  • 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

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


×