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

[Yêu Cầu] Tính tổng chiều dài theo layer !!!!

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

Chào các pro trong diễn đàn , mình mạo muội nhờ các bác giúp dùm lisp sau :

 

1.Tính tổng chiều dài pline và xuất sang excel theo layer của pline.

    Thống kê block mà pline được vẽ đè lên 

  Tên layer Tổng chiều dài Tên block layer đè lên
1 a x h
      i
      k
2 b y m
      n
      o

2. Lisp chèn chiều dài và khoảng cách vào text có sẵn. (Ví dụ bản vẽ thép sàn có text D8@150, mình bấm chọ thanh thép và 2 điểm khoảng cách thì lisp chèn vào D8,x @ 15, y. 

3. Lisp xuất text đó sang excel

 

Thanks các bác rất nhiều.

 

  • Like 1
  • Vote giảm 3

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 xin gì mà xin lắm thế ! Tự thân vận động mà tím kiếm trên diễn đàn đi !

+ Lisp xuất chiều dài theo layer: Đã có. (Block đè lên- không có lisp, và lisp không khả thi )

+ Lisp xuất text theo excel: Đã có

  • Like 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

1.Mình đã tìm nhưng không thấy nên mình mới hỏi nha bạn, Mình chỉ thấy lisp tính tổng chiều dài (không theo layer, cũng ko xuất ra excel)

2.Cái số 2 thì sao (chèn chiều dài và khoảng cách...)

Mình không rành về viết lisp nên mình xin, còn thay vì lập nhiều topic để xin thì mình xin 1 lúc luôn nếu bạn thấy phiền ko cho thì thôi chứ cần hằn học thế không. 

  • 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

+. Bạn nên tìm kiếm trên diễn đàn nhiều hơn. 

http://www.cadviet.com/forum/topic/5054-tính-tổng-chiều-dài-theo-từng-layer/

http://www.cadviet.com/forum/topic/81011-nhờ-sửa-lisp-tính-chiều-dài-đường-ống-hàng-loạt/

+. Tôi không thể trả lời câu số 2 vì không hiểu ý muốn của bạn. "x,y" là cái gì trong cái D8,x @15,y ?. Bạn trình bày không rõ ràng, thì làm sao mong được người khác giúp được. ( Nên kèm theo hình ảnh hoặc bản vẽ đi kèm để mọi người dễ hình dung )

Theo quan điểm cá nhân: Đừng yêu cầu 1 lúc quá nhiều, nếu bạn để ý những người khác chỉ yêu cầu 1 mục đích nhất định. Yêu cầu nhiều mọi người sẽ cho rằng bạn là người lạm dụng lisp, không thật sự tôn trọng việc học cad. ( Khi bài viết của bạn nhận dấu "-", bạn nên xem lại yêu cầu của bài viết có gì đó hay không).

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

Hi bạn , 

+2 topic trên mình đã tham khảo tuy nhiên

http://www.cadviet.com/forum/topic/5054-tính-tổng-chiều-dài-theo-từng-layer/  : cái này mình không down được lisp

http://www.cadviet.com/forum/topic/81011-nhờ-sửa-lisp-tính-chiều-dài-đường-ống-hàng-loạt/  : cái này vẫn chưa có ai giúp bạn chủ topic 

+ câu số 2: x và y trong cái D8,x@150,y lần lượt là chiều dài thanh thep và khoảng cách "Ví dụ bản vẽ thép sàn có text D8@150, mình bấm vào thanh thép  (x) và 2 điểm đầu và cuối khoảng cách (y) thì lisp chèn vào D8,x @ 150, y"

 

Mình sry nếu có làm sai qui định forum , nhưng mình nghĩ 2 lisp mình xin phục vụ cho việc sử lý số lieu bản vẽ cad hơn là can thiệp vào việc học cad ...

Dù sao cũng thanks bạn đã đọc và reply giúp mì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

- Lisp 1 : Nếu Pline toàn phân đoạn thẳng thì không khó, có đoạn cong thì chạy lâu hơn. Còn vấn đề xuất chiều dài, bạn tự dùng Dataextraction để làm việc đó
- Lisp 2 : Quá dễ rồi, chỉ là thao tác substr thôi
- Lisp 3 : Cũng là Dataextraction, chứ k cần lisp

Tất nhiên là làm được nếu bạn đặt hàng có phí ^^ Còn nếu không, tôi cũng tin chắc ae trong diễn đàn dư sức giúp bạn các vấn đề này, tuy nhiên, đầu tuần nhiều người bận
Tôi cũng có thời gian làm QS nên có thể hiểu những gì bạn muốn cho công việc thống kê

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

Thanks bro ketxu,

Lisp 1 : toàn phân đoạn thẳng thôi, có đoạn cong thì mình cũng sẽ vẽ thanh nhiều đoạn thẳng.

Lisp 2: bác nó rõ hơn được ko, thao tác substr là sao bác.

Mình sẵn sang trả phí nếu 2 lisp này thực sự phức tạp, còn chầu café chém gió làm quen thì nếu bác nào ở sg thì mình sẵn sang, mình cũng mún học them nhiều từ các bác. Mình hiểu đầu tuần ai cũng có việc nên mình không gấp, bác nào rãnh giúp mình thì mình rất cảm ơn.

Thanks các bác

 

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

Thao tác substr là việc cắt nối trong lập trình lisp. Bạn cho x,y là số cụ thể được ko? Ngành tôi khác bạn nên chưa hiểu được.

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

Nói thêm cho rõ hình trên:

12: đường kính thép - phải đưa vào = tay

7200: chiều dài thanh thép - Máy tự tính (phải vẽ chính xác)

250: khỏang cách giữa các thanh thép với nhau - phải đưa vào = tay

7350: chiều dài đoạn phải rãi thép tính = mm - máy tự tí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

Code: 

Test.lsp

(defun c:test ( / objtext dxf text l kc1 kc2 pt)
  (command "cmdecho" 0)
  (if
    (and
      (setq     objtext (ssget '((0 . "text") (1 . "*@*"))))
    (setq    dxf (entget (ssname objtext 0)))
    (setq    text (cdr (assoc 1 (entget (ssname objtext 0)))))
    (setq    L     (entsel "Chon duong thang L: \n"))
      (= (cdr (assoc 0 (entget (car L)))) "LINE")
    (setq    Kc1 (distance (cdr (assoc 10 (entget (car L)))) (cdr (assoc 11 (entget (car L))))))
      (setq     Kc2  (distance (getpoint "Pick P1\n") (getpoint "Pick P2\n")))
    (setq     pt (getpoint "Chon diem chen text: \n"))
    ); end and
    (progn
        (setq i (strlen text))
        (while (not (= (substr text i 1) "@"))
           (setq i (- i 1)))
        (entmake
         (list
          (cons 0 "Text")
          (cons 1 (strcat (substr text 1 (- i 1)) " ," (rtos Kc1 2 0) " @" (substr text (+ i 1)) ", " (rtos Kc2 2 0)))
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbText")
          (assoc 8 dxf)
          (assoc 7 dxf)
          (cons 10 pt)
          (cons 11 pt)
          (assoc 40 dxf)
          (assoc 50 dxf)
          (assoc 71 dxf)
          (assoc 72 dxf)
          ;(cons 73 0)
          ))
      );endprogn
    (princ "Co gi do sai sai !")
    ); end while
      (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

Hi bác, khi chọ object thì nó lại báo là lỗi, mình gửi file mẫu bác xem giúp.

1 số bản vẽ thì nó sẽ ghị là D8@150, cũng sẽ có 1 số bản vẽ ghi là D8-150 hoặc Ø8@150, Ø8-150. Vậy có cách nào áp dung hết không hay chỉ xài cho 1 dạng được thôi

 

HSG-AUR-ST-Sheet - 80013 - BASEMENT 03 - BOTTOM REINFORCEMENT PLAN.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
8 phút ago, Thuận Trần - QS cho biết:

Hi bác, khi chọ object thì nó lại báo là lỗi, mình gửi file mẫu bác xem giúp.

1 số bản vẽ thì nó sẽ ghị là D8@150, cũng sẽ có 1 số bản vẽ ghi là D8-150 hoặc Ø8@150, Ø8-150. Vậy có cách nào áp dung hết không hay chỉ xài cho 1 dạng được thôi

 

HSG-AUR-ST-Sheet - 80013 - BASEMENT 03 - BOTTOM REINFORCEMENT PLAN.dwg

Rãnh rỗi luyện tý

(defun C:thaytext(/ ndtexttt cuoi dau vttim ndtex khcach chieudai)
(command "cmdecho" 0)
(setq dtthep (car (entsel "\nChon doi tuong lay chieu dai.")))
(setq chieudai (vlax-curve-getDistAtParam dtthep (vlax-curve-getEndParam dtthep)))
(setq point1 (getpoint "\nChon diem thu 1"))
(setq point2 (getpoint point1 "\nChon diem thu 2"))
(setq khcach (distance point1 point2))
(setq dttext (entsel "\nChon doi tuong text thay the"))
(setq ndtext (cdr (assoc 1 (entget (car dttext)))))
(if (setq vttim (vl-string-search "@" ndtext))
(setq vttim (vl-string-search "@" ndtext))
(setq vttim (vl-string-search "-" ndtext)))
(setq dau (substr ndtext 1 vttim))
(setq cuoi (substr ndtext (+ vttim 1)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(setq thongtin (entget (car dttext)))
(setq giatricu (assoc 1 thongtin))
(setq giatrimoi (cons 1 (strcat dau "," (rtos chieudai 2 0) "," cuoi "," (rtos khcach 2 0))))
(setq thongtin (subst giatrimoi giatricu thongtin))
(entmod thongtin)
(command "_change" dttext "" "p" "c" "1" "")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(princ)
)

 

  • Like 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

+ Lưu ý khi sử dụng lisp: Đối tượng chọn text ban đầu là "Dtext". Không áp dụng cho Mtext". Đối tượng L là đường thẳng, không phải Block, ( kể cả lisp của bác #DuongTrungHuy cũng không xài được với block)

+ Chỉ áp dụng cho 1 loại: ký hiệu @. Bạn có thể thay "@" bằng ký kiệu khác trong lisp tùy ý. 

  • Like 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

Thanks các bác rất nhiều, dù vẫn chưa thỏa 100% mong muốn nhưng như vậy là quá ok rồi.

P/s : cho các bác muốn xài hay vô tình lướt qua topic, "Lưu ý khi sử dụng lisp: Đối tượng chọn text ban đầu là "Dtext". Không áp dụng cho Mtext". Đối tượng L là đường thẳng, không phải Block" vấn đề này đơn giản giải quyết bang explode ( từ dân gian là "nổ") , Mtext sẽ thành text và block thành đường (trừ trường hợp ATT block thì mình chị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

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  

×