Chuyển đến nội dung
Diễn đàn CADViet
nh0cxip0

[Yêu cầu]Lisp copy giá trị dim vào dtext

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

Chào các bác mình muốn thống kê chiều dài các đoạn pline vào bảng.

Nên nhờ nhờ mọi người viết giúp lisp copy dim đó vào đối tượng dtext

Chọn dim -> space -> chọn text muốn dán -> space (dán và kết thúc)
Hoặc có cách nào nhanh hơn thì mong mọi người giúp mình.

KHUNG LUOI NHOM.dwg

1.jpg

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 kiểu này khó, mà hiện nay người viết free kiếm đỏ con mắt không có ai. Thôi bạn đành hóng gió chờ thôi nhé!!!

Nêu tam giác là polyline 3 cạnh thì dễ hơn được chút.

  • 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

Tôi không biết viết lisp, nhưng có thể giúp đỡ bạn được 1 phần:

tôi ghép lisp tính độ dài với lưu vào clipboad lại 1

bạn click vào đối tượng nó sẽ lưu độ dài vào bộ nhớ cho bạn

Bạn phải click vào test cần paste và paste nó vào.

Tôi không có lisp nào gán giá trị đó vào test nên bạn làm thủ công bước này.

Mọi người suy nghĩ quá phức tạp, là muốn làm phát 1 ăn ngay nên mới thấy khó. 

Bạn chờ ai đó giúp thêm nha

 

 

(defun c:lc ( / e i l s )
    (if (setq s
            (ssget
               '(   (0 . "ARC,CIRCLE,ELLIPSE,LINE,*POLYLINE,SPLINE")
                    (-4 . "<NOT")
                        (-4 . "<AND")
                            (0 . "POLYLINE") (-4 . "&") (70 . 80)
                        (-4 . "AND>")
                    (-4 . "NOT>")
                )
            )
        )
        (progn
            (setq l 0.0)
            (repeat (setq i (sslength s))
                (setq e (ssname s (setq i (1- i)))
                      l (+ l (vlax-curve-getdistatparam e (vlax-curve-getendparam e)))
                )
            )
            
            (vlax-invoke
    (vlax-get
        (vlax-get (setq 2ClipB (vlax-create-object "htmlfile"))
            'ParentWindow
        ) 'ClipBoardData )  'SetData "Text" (rtos l 2 2)
    )

            )
    )
    (princ)
)

 

 

 

 

Bạn lưu ý là lisp lấy từ lisp tính tổng độ dài nên chọn nhiều đối tượng được. nếu bạn chọn nhiều đối tượng giá trị sẽ bị sai đó

 

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
22 giờ trước, nh0cxip0 đã nói:

Chào các bác mình muốn thống kê chiều dài các đoạn pline vào bảng.

Nên nhờ nhờ mọi người viết giúp lisp copy dim đó vào đối tượng dtext

Chọn dim -> space -> chọn text muốn dán -> space (dán và kết thúc)
Hoặc có cách nào nhanh hơn thì mong mọi người giúp mình.

KHUNG LUOI NHOM.dwg

 

Sái thử. Viết sơ vừa đủ chạy cho vui thôi . Không chắc dim khác chạy tốt nhe

 

Nếu bạn làm nhiều và thường xuyên thì nên bỏ ra ít tiền cho ai đó viết cho 1 lisp. Chỉ càn vẽ xong chọn tất cả là nó tự dim và lạp bảng cho bạn luôn.

(defun c:ct(/ en1 en2 st)
  (if (and (setq en1 (car (entsel "/nChon dim:")))
	   (eq (cdr (assoc 0 (setq en1 (entget en1)))) "DIMENSION")
	   (setq en2 (car (entsel "/nChon text:")))
	   (wcmatch (cdr (assoc 0 (entget en2))) "TEXT,MTEXT"))
    (entmod (list (cons -1 en2)
		  (cons 1 (rtos (cdr (assoc 42 en1)) 2 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
Vào lúc 21/8/2022 tại 09:23, ngokiet đã nói:

Sái thử. Viết sơ vừa đủ chạy cho vui thôi . Không chắc dim khác chạy tốt nhe

 

Nếu bạn làm nhiều và thường xuyên thì nên bỏ ra ít tiền cho ai đó viết cho 1 lisp. Chỉ càn vẽ xong chọn tất cả là nó tự dim và lạp bảng cho bạn luôn.


(defun c:ct(/ en1 en2 st)
  (if (and (setq en1 (car (entsel "/nChon dim:")))
	   (eq (cdr (assoc 0 (setq en1 (entget en1)))) "DIMENSION")
	   (setq en2 (car (entsel "/nChon text:")))
	   (wcmatch (cdr (assoc 0 (entget en2))) "TEXT,MTEXT"))
    (entmod (list (cons -1 en2)
		  (cons 1 (rtos (cdr (assoc 42 en1)) 2 1)))))
  (princ))

 

Thank bạn mình dùng đc rồi

Nhanh hơn rất nhiều khi phải nhấn vào dim Ctl + C rồi ra click dzo test Ctl + V

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ào lúc 21/8/2022 tại 08:59, vietduc147258 đã nói:

Tôi không biết viết lisp, nhưng có thể giúp đỡ bạn được 1 phần:

tôi ghép lisp tính độ dài với lưu vào clipboad lại 1

bạn click vào đối tượng nó sẽ lưu độ dài vào bộ nhớ cho bạn

Bạn phải click vào test cần paste và paste nó vào.

Tôi không có lisp nào gán giá trị đó vào test nên bạn làm thủ công bước này.

Mọi người suy nghĩ quá phức tạp, là muốn làm phát 1 ăn ngay nên mới thấy khó. 

Bạn chờ ai đó giúp thêm nha

 

 

(defun c:lc ( / e i l s )
    (if (setq s
            (ssget
               '(   (0 . "ARC,CIRCLE,ELLIPSE,LINE,*POLYLINE,SPLINE")
                    (-4 . "<NOT")
                        (-4 . "<AND")
                            (0 . "POLYLINE") (-4 . "&") (70 . 80)
                        (-4 . "AND>")
                    (-4 . "NOT>")
                )
            )
        )
        (progn
            (setq l 0.0)
            (repeat (setq i (sslength s))
                (setq e (ssname s (setq i (1- i)))
                      l (+ l (vlax-curve-getdistatparam e (vlax-curve-getendparam e)))
                )
            )
            
            (vlax-invoke
    (vlax-get
        (vlax-get (setq 2ClipB (vlax-create-object "htmlfile"))
            'ParentWindow
        ) 'ClipBoardData )  'SetData "Text" (rtos l 2 2)
    )

            )
    )
    (princ)
)

 

 

 

 

Bạn lưu ý là lisp lấy từ lisp tính tổng độ dài nên chọn nhiều đối tượng được. nếu bạn chọn nhiều đối tượng giá trị sẽ bị sai đó

 

thank bạn, cách này nhanh hơn thủ công làm một tí.
Bạn dưới làm đc rồi.

  • 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
Vào lúc 23/8/2022 tại 17:15, nh0cxip0 đã nói:

Thank bạn mình dùng đc rồi

Nhanh hơn rất nhiều khi phải nhấn vào dim Ctl + C rồi ra click dzo test Ctl + V

- Với file cad mẫu và lisp trên mình dự đoán thời gian cày khoảng 30 phút đến 1h mới xong.

- Nếu theo ý thứ 2 của @ngokiet  thì thời gian thực hiện chưa đầy 1 phú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ào lúc 20/8/2022 tại 11:06, nh0cxip0 đã nói:

Chào các bác mình muốn thống kê chiều dài các đoạn pline vào bảng.

Nên nhờ nhờ mọi người viết giúp lisp copy dim đó vào đối tượng dtext

Chọn dim -> space -> chọn text muốn dán -> space (dán và kết thúc)
Hoặc có cách nào nhanh hơn thì mong mọi người giúp mình.

KHUNG LUOI NHOM.dwg

1.jpg

Nếu bạn cần 1 tool viết bằng .net thì có thể nhắn mình qua zalo nhé: 0399 690 324 

Cái này chỉ cần đối tượng chuyển về dạng đơn giản nhất là line và text luôn nằm trong tam giác thì sẽ có thể 1 lệnh là ra kết quả gồm tự động Dim cũng như xuất bảng thống kê.

Bạn có thể xem demo ở video này nhé: (ở đây nếu bạn muốn viết thì nên thiết lập thêm các thống số phụ: cỡ chữ, Dim,v.vv.) 

 

 

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ó thể viết được chương trình để 1 nút bấm xong toàn bộ. hoàn thành cả bảng cho bạn luôn.

Gợi ý cho các bạn code nhé:

- Chọn toàn bộ và lọc thành 2 list:

    text và phần còn lại.

-  foreach item lst_text 

   sử dụng boudary (vl-cmdf "_.boundary" "a" "b" "n" lst_dt "I" "Y" "O" "P" "x" pt_text "")

  lấy được pline tại điểm text  và trích xuất độ dài các cạnh của pline đó.

không khó phải không.

nếu không có bạn nào giúp thớt thì liên lạc lại 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

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

×