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

[Đã xong] Lisp xuất chiều dài Line ra Text có sẵn và có tiền tố, hậu tố

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

Các cao thủ có thể sửa giúp em làm sao để ghi ra kết quả nó theo đơn vị met được không ạ. chứ em thực hiện lệnh xong thì phần chữ số vẫn theo đơn vị mm :((. EM cảm ơn các bro trước.

  • 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

Các cao thủ có thể sửa giúp em làm sao để ghi ra kết quả nó theo đơn vị met được không ạ. chứ em thực hiện lệnh xong thì phần chữ số vẫn theo đơn vị mm :((. EM cảm ơn các bro trước.

 

Được voi đòi 2 bà Trưng đây. Lạm dụng lisp nhiều quá ko tốt đâu nhé.

 

Sửa thì dễ, nhưng bạn có thể thủ công thêm 1 dấu chấm sau 3 chữ số mà  ! Cứ thích yêu cầu 1 nháy chuột ăn ngay cơ  :D  :D  :D.

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ới LINE thì sử dụng dòng này không được

(command "area" "e" dtuong1)

Vì LINE không có diện tích

Và ngoài ý 1 mà bạn DoanVanHa đã nêu trên, bạn alpha1810 phải thay dòng

(command "area" "e" dtuong1)

thành dòng :

(command "LENGTHEN" dtuong1 "")

hoặc : (command "LIST" dtuong1 "")

Bạn Tue_NV ơi,

  1. Lisp này có thêm chế độ chọn liên tục nhiều Line (multi) được không?
  2. Mình có nhiều đoạn Line khác nhau, ví dụ AB, CD, EF..,...theo Lisp này thì xong từng đoạn Line rồi lập lại từ đầu với các đoạn khác, như vậy hơi mất thêm thời gian
  3. kết quả xuất ra "m" thay vì "mm"

 

Cảm ơn bạn

  • 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

post dwg vi du len các anh các bác sẽ giúp ^_^

mình ko up lên cadviet mình gửi kèm link gồm dwg và lisp bạn nhé, đây là lisp mình lấy được trên diễn đàn, cảm ơn bạn, cuối tuần vui vẽ nhé

 

https://drive.google.com/file/d/0B1TsLvqrTXBycDY1RzllYW0yU28/view?usp=sharing

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 ko up lên cadviet mình gửi kèm link gồm dwg và lisp bạn nhé, đây là lisp mình lấy được trên diễn đàn, cảm ơn bạn, cuối tuần vui vẽ nhé

 

https://drive.google.com/file/d/0B1TsLvqrTXBycDY1RzllYW0yU28/view?usp=sharing

Lisp mới đây, chỉ cần chọn LINE còn lại lisp làm việc nhé. ^_^ Thay tên lệnh tùy ý. 

 

Chui khắp các topic nhờ vả mà ko thấy ai repply, khổ thân ^_^

;;Lenh TEST

(defun c:test (/ ss n _length pt1 ss1)
  (setvar "CMDECHO" 0)
  (princ "\nChon *LINE: ")
  (if (setq ss (ssget '((0 . "*LINE"))))
    (progn
      (command "zoom" "ob" ss "")
      (setq n 0)
      (repeat (sslength ss)
	(setq _length (/ (vlax-get (vlax-ename->vla-object (ssname ss n)) 'Length) 1000.))
	
	(setq pt1 (polar (cdr (assoc 10 (entget (ssname ss n)))) (/ pi 2) 100.))
	
	(setq ss1 (ssget "C" pt1 (cdr (assoc 11 (entget (ssname ss n)))) '((0 . "TEXT"))))
	(if ss1
	  (entmod (subst (cons 1 (strcat "L= " (rtos _length 2 1) " m"))
			   (assoc 1 (entget (ssname ss1 0)))
			   (entget (ssname ss1 0)))
		    )
	    )
	(setq n (1+ n))
	);repeat
      );progn
    (princ "\nBan da khong chon LINE.")
    );if
  (command "zoom" "P")
  (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

 

Lisp mới đây, chỉ cần chọn LINE còn lại lisp làm việc nhé. ^_^ Thay tên lệnh tùy ý. 

 

Chui khắp các topic nhờ vả mà ko thấy ai repply, khổ thân ^_^

;;Lenh TEST

(defun c:test (/ ss n _length pt1 ss1)
  (setvar "CMDECHO" 0)
  (princ "\nChon *LINE: ")
  (if (setq ss (ssget '((0 . "*LINE"))))
    (progn
      (command "zoom" "ob" ss "")
      (setq n 0)
      (repeat (sslength ss)
	(setq _length (/ (vlax-get (vlax-ename->vla-object (ssname ss n)) 'Length) 1000.))
	
	(setq pt1 (polar (cdr (assoc 10 (entget (ssname ss n)))) (/ pi 2) 100.))
	
	(setq ss1 (ssget "C" pt1 (cdr (assoc 11 (entget (ssname ss n)))) '((0 . "TEXT"))))
	(if ss1
	  (entmod (subst (cons 1 (strcat "L= " (rtos _length 2 1) " m"))
			   (assoc 1 (entget (ssname ss1 0)))
			   (entget (ssname ss1 0)))
		    )
	    )
	(setq n (1+ n))
	);repeat
      );progn
    (princ "\nBan da khong chon LINE.")
    );if
  (command "zoom" "P")
  (princ)
  )

Dear bạn, lisp này cad 2013 sử dụng được, ko sử dụng được cho cad 2007 vậy bạn,  nó báo select object: 1 found

Sáng đầu tuần mà có tin vui của bạn rồi, cảm ơn bạn nhé, đầu tuần vui vẽ, hihi

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 mới đây, chỉ cần chọn LINE còn lại lisp làm việc nhé. ^_^ Thay tên lệnh tùy ý. 

 

Chui khắp các topic nhờ vả mà ko thấy ai repply, khổ thân ^_^

;;Lenh TEST

(defun c:test (/ ss n _length pt1 ss1)
  (setvar "CMDECHO" 0)
  (princ "\nChon *LINE: ")
  (if (setq ss (ssget '((0 . "*LINE"))))
    (progn
      (command "zoom" "ob" ss "")
      (setq n 0)
      (repeat (sslength ss)
	(setq _length (/ (vlax-get (vlax-ename->vla-object (ssname ss n)) 'Length) 1000.))
	
	(setq pt1 (polar (cdr (assoc 10 (entget (ssname ss n)))) (/ pi 2) 100.))
	
	(setq ss1 (ssget "C" pt1 (cdr (assoc 11 (entget (ssname ss n)))) '((0 . "TEXT"))))
	(if ss1
	  (entmod (subst (cons 1 (strcat "L= " (rtos _length 2 1) " m"))
			   (assoc 1 (entget (ssname ss1 0)))
			   (entget (ssname ss1 0)))
		    )
	    )
	(setq n (1+ n))
	);repeat
      );progn
    (princ "\nBan da khong chon LINE.")
    );if
  (command "zoom" "P")
  (princ)
  )

Hi bạn,

nếu đường thẳng nằm dọc hay nằm ngiêng lisp ko tính được, mình gửi bản vẽ đính kèm nhờ bạn xem với nhé, thanks

 

https://drive.google.com/open?id=0B1TsLvqrTXByZkhva1RYZUZJUFk

  • 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

Hi bạn,

nếu đường thẳng nằm dọc hay nằm ngiêng lisp ko tính được, mình gửi bản vẽ đính kèm nhờ bạn xem với nhé, thanks

 

https://drive.google.com/open?id=0B1TsLvqrTXByZkhva1RYZUZJUFk

Đã fix nhé ^_^

;;Lenh TEST

(defun c:test (/ ss n _length pt1 pt2 pt3 pt4 ss1 )
  (vl-load-com)
  (setvar "CMDECHO" 0)
  (princ "\nChon LINE: ")
  (if (setq ss (ssget '((0 . "LINE"))))
    (progn
      (command "zoom" "ob" ss "")
      (setq n 0)
      (repeat (sslength ss)
	(setq _length (/ (vlax-get (vlax-ename->vla-object (ssname ss n)) 'Length) 1000.))
	(setq pt1 (polar (cdr (assoc 10 (entget (ssname ss n)))) (+ (angle (cdr (assoc 10 (entget (ssname ss n))))
									   (cdr (assoc 11 (entget (ssname ss n))))
									   )
								      (/ pi 2)
								    )
			 100.)
	      )
	(setq pt2 (polar (cdr (assoc 11 (entget (ssname ss n)))) (- (angle (cdr (assoc 10 (entget (ssname ss n))))
									   (cdr (assoc 11 (entget (ssname ss n))))
									   )
								      (/ pi 2)
								    )
			 100.)
	      )
	(setq pt3 (polar (cdr (assoc 10 (entget (ssname ss n)))) (- (angle (cdr (assoc 10 (entget (ssname ss n))))
									   (cdr (assoc 11 (entget (ssname ss n))))
									   )
								      (/ pi 2)
								    )
			 100.)
	      )
	(setq pt4 (polar (cdr (assoc 11 (entget (ssname ss n)))) (+ (angle (cdr (assoc 10 (entget (ssname ss n))))
									   (cdr (assoc 11 (entget (ssname ss n))))
									   )
								      (/ pi 2)
								    )
			 100.)
	      )

	(setq ss1 (ssget "CP" (list pt1 pt4 pt2 pt3) '((0 . "TEXT"))))
	(if ss1
	  (if (> (sslength ss1) 1)
	    (progn
	      (princ "\nCo >1 TEXT tai vi tri vung chon xung quanh LINE.")
	      (redraw (ssname ss n) 3)
	      )
	    (entmod (subst (cons 1 (strcat "L= " (rtos _length 2 1) " m"))
			   (assoc 1 (entget (ssname ss1 0)))
			   (entget (ssname ss1 0)))
		    )
	    )
	  )
	(setq n (1+ n))
	);repeat
      );progn
    (princ "\nBan da khong chon LINE.")
    );if
  (command "zoom" "P")
  (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

 

Đã fix nhé ^_^

;;Lenh TEST

(defun c:test (/ ss n _length pt1 pt2 pt3 pt4 ss1 )
  (vl-load-com)
  (setvar "CMDECHO" 0)
  (princ "\nChon LINE: ")
  (if (setq ss (ssget '((0 . "LINE"))))
    (progn
      (command "zoom" "ob" ss "")
      (setq n 0)
      (repeat (sslength ss)
	(setq _length (/ (vlax-get (vlax-ename->vla-object (ssname ss n)) 'Length) 1000.))
	(setq pt1 (polar (cdr (assoc 10 (entget (ssname ss n)))) (+ (angle (cdr (assoc 10 (entget (ssname ss n))))
									   (cdr (assoc 11 (entget (ssname ss n))))
									   )
								      (/ pi 2)
								    )
			 100.)
	      )
	(setq pt2 (polar (cdr (assoc 11 (entget (ssname ss n)))) (- (angle (cdr (assoc 10 (entget (ssname ss n))))
									   (cdr (assoc 11 (entget (ssname ss n))))
									   )
								      (/ pi 2)
								    )
			 100.)
	      )
	(setq pt3 (polar (cdr (assoc 10 (entget (ssname ss n)))) (- (angle (cdr (assoc 10 (entget (ssname ss n))))
									   (cdr (assoc 11 (entget (ssname ss n))))
									   )
								      (/ pi 2)
								    )
			 100.)
	      )
	(setq pt4 (polar (cdr (assoc 11 (entget (ssname ss n)))) (+ (angle (cdr (assoc 10 (entget (ssname ss n))))
									   (cdr (assoc 11 (entget (ssname ss n))))
									   )
								      (/ pi 2)
								    )
			 100.)
	      )

	(setq ss1 (ssget "CP" (list pt1 pt4 pt2 pt3) '((0 . "TEXT"))))
	(if ss1
	  (if (> (sslength ss1) 1)
	    (progn
	      (princ "\nCo >1 TEXT tai vi tri vung chon xung quanh LINE.")
	      (redraw (ssname ss n) 3)
	      )
	    (entmod (subst (cons 1 (strcat "L= " (rtos _length 2 1) " m"))
			   (assoc 1 (entget (ssname ss1 0)))
			   (entget (ssname ss1 0)))
		    )
	    )
	  )
	(setq n (1+ n))
	);repeat
      );progn
    (princ "\nBan da khong chon LINE.")
    );if
  (command "zoom" "P")
  (princ)
  )

lisp quá tốt, thanks bạn hí

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

Anh sửa đoạn này (rtos (- tdt 0) 2 2) --> (rtos (- tdt 0) 2 0) là oki!

Chúc thành công !

anh ơi vậy cho em hỏi mình muốn làm tròn vd như đoạn thẳng dài 1997 thì text ra là L= 2000 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

Em xin nhờ các bác là với lisp này nhưng em muốn thêm vào text có sẵn chứ không phải xóa đi text cũ.

Ví dụ: e có sẵn text là 10d12a200 khi dùng lisp này nó sẽ thành 10d12a200 L=5.20m chứ không phải là L=5.20m.

  • 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

Các cao nhân giúp em viết 1 lisp đo chiều dài line, pline rôi xuất ra text có sẵn, nhưng vẫn giữ nguyên text trước đó và thêm chiều dài vào phía sau text đó.

VD: có text trc là 300x200 xuất ra 300x200 3050 

Em cảm ơn đã đọc tin!

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 26/6/2011 tại 15:10, pdle đã nói:

 

Của anh đây ạ :

 


(defun c:cc (/ doituong total dtuong1 tdt dt ktext ktratext ktratext1 ktextcu textdt ktextmoi newcolor oldcolor)
  (setq doituong (ssget '((0 . "*POLYLINE"))))
  (setq total (sslength doituong))
  (setq tdt 0)
  (repeat total
        (setq total (- total 1))
        (setq dtuong1 (cdr (car (entget (ssname doituong total)))))
        (command "area" "e" dtuong1)
        (setq dt (getvar "Perimeter"))
        (setq tdt (+ tdt dt))
  )
  (setq ktext (car (entsel "chi vµo text cЗn ghi: ")))
  (setq ktratext (entget ktext))
  (setq ktratext1 (cdr (assoc 0 ktratext)))
  (if (= ktratext1 "TEXT")
      (progn
              (setq ktextcu (assoc 1 ktratext))
              (setq textdt (strcat "L= " (rtos (- tdt 0) 2 2) " m"))
              (setq ktextmoi (cons 1 textdt))
              (setq ktratext (subst ktextmoi ktextcu ktratext))
              (entmod ktratext)
              (setq color 4)
              (setq newcolor (cons 62 color))
                 (if (assoc 62 ktratext)
                     (progn
                          (setq oldcolor (assoc 62 ktratext))
                          (setq ktratext (subst newcolor oldcolor ktratext))
                          (entmod ktratext)
                     )
                     (entmod (append ktratext (list (cons 62 color))))
                  )
       )
       (alert "¤i trкi ¬i, chдn nhЗm rеi, ®г kh«ng ph¶i lµ tetx!")
  )
 (textpage)
 (graphscr)
)
 

 

 

Nhân tiện cho em hỏi là biến nào lưu giữ đơn vị hiện hành của CAD ạ ?

 

em đang sử dụng lisp này cho cad 2007 thì ổn  nhưng chuyển sang cad 2019 thì lại bị lỗi polyline chọn text không hiển thị kết quả, với đường line sau khi chọn text xong không kết thúc lệnh mà cad lại hiện specify total length.  Mọi người sửa lại cho sử dụng đc với cad đời cao giúp em 

đây là đoạn code:

;; free lisp from cadviet.com
;;; this lisp was downloaded from http://www.cadviet.com/forum/topic/47335-da-xong-lisp-xuat-chieu-dai-line-ra-text-co-san-va-co-tien-to-hau-to/
(defun c:d21 (/ doituong total dtuong1 tdt dt ktext ktratext ktratext1 ktextcu textdt ktextmoi newcolor oldcolor)
   (setq doituong (ssget '((0 . "*LINE"))))
   (setq total (sslength doituong))
   (setq tdt 0)
   (repeat total
         (setq total (- total 1))
         (setq dtuong1 (cdr (car (entget (ssname doituong total)))))
         (command "lengthen" dtuong1"")
         (setq dt (getvar "Perimeter"))
         (setq tdt (+ tdt dt))
   )
   (setq ktext (car (entsel "chi vµo text cЗn ghi: ")))
   (setq ktratext (entget ktext))
   (setq ktratext1 (cdr (assoc 0 ktratext)))
   (if (= ktratext1 "TEXT")
       (progn
               (setq ktextcu (assoc 1 ktratext))
               (setq textdt (strcat "DN20-" (rtos (/ tdt 1000) 2 1) " "))
               (setq ktextmoi (cons 1 textdt))
               (setq ktratext (subst ktextmoi ktextcu ktratext))
               (entmod ktratext)
               (setq color bylayer)
               (setq newcolor (cons 62 color))
                  (if (assoc 62 ktratext)
                      (progn
                           (setq oldcolor (assoc 62 ktratext))
                           (setq ktratext (subst newcolor oldcolor ktratext))
                           (entmod ktratext)
                      )
                      (entmod (append ktratext (list (cons 62 color))))
                   )
        )
        (alert "¤i trкi ¬i, chдn nhЗm rеi, ®г kh«ng ph¶i lµ tetx!")
   )
  (textpage)
  (graphscr)
)

image.png.85ad6760ab36fd64ccf2c2ea1c65f136.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
Vào lúc 25/1/2021 tại 11:24, nh0kdkny đã nói:

 

em đang sử dụng lisp này cho cad 2007 thì ổn  nhưng chuyển sang cad 2019 thì lại bị lỗi polyline chọn text không hiển thị kết quả, với đường line sau khi chọn text xong không kết thúc lệnh mà cad lại hiện specify total length.  Mọi người sửa lại cho sử dụng đc với cad đời cao giúp em 

đây là đoạn code:

;; free lisp from cadviet.com
;;; this lisp was downloaded from http://www.cadviet.com/forum/topic/47335-da-xong-lisp-xuat-chieu-dai-line-ra-text-co-san-va-co-tien-to-hau-to/
(defun c:d21 (/ doituong total dtuong1 tdt dt ktext ktratext ktratext1 ktextcu textdt ktextmoi newcolor oldcolor)
   (setq doituong (ssget '((0 . "*LINE"))))
   (setq total (sslength doituong))
   (setq tdt 0)
   (repeat total
         (setq total (- total 1))
         (setq dtuong1 (cdr (car (entget (ssname doituong total)))))
         (command "lengthen" dtuong1"")
         (setq dt (getvar "Perimeter"))
         (setq tdt (+ tdt dt))
   )
   (setq ktext (car (entsel "chi vµo text cЗn ghi: ")))
   (setq ktratext (entget ktext))
   (setq ktratext1 (cdr (assoc 0 ktratext)))
   (if (= ktratext1 "TEXT")
       (progn
               (setq ktextcu (assoc 1 ktratext))
               (setq textdt (strcat "DN20-" (rtos (/ tdt 1000) 2 1) " "))
               (setq ktextmoi (cons 1 textdt))
               (setq ktratext (subst ktextmoi ktextcu ktratext))
               (entmod ktratext)
               (setq color bylayer)
               (setq newcolor (cons 62 color))
                  (if (assoc 62 ktratext)
                      (progn
                           (setq oldcolor (assoc 62 ktratext))
                           (setq ktratext (subst newcolor oldcolor ktratext))
                           (entmod ktratext)
                      )
                      (entmod (append ktratext (list (cons 62 color))))
                   )
        )
        (alert "¤i trкi ¬i, chдn nhЗm rеi, ®г kh«ng ph¶i lµ tetx!")
   )
  (textpage)
  (graphscr)
)

image.png.85ad6760ab36fd64ccf2c2ea1c65f136.png

Bạn sửa  (setq color bylayer) thành  (setq color 256) .

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

Bạn sửa  (setq color bylayer) thành  (setq color 256) .

 

mình đã thử nhưng hình như không phải. vẫn bị lỗi như này khi chọn nhiều đoạn thẳng còn chọn 1 đoạn thì vẫn dùng được. Có thể đoạn tính tổng chiều dài không áp dụng được cho cad đời cao

 

image.thumb.png.0cb2817c645ccb91bc09d62ede9cbfa7.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
8 giờ trước, nh0kdkny đã nói:

 

mình đã thử nhưng hình như không phải. vẫn bị lỗi như này khi chọn nhiều đoạn thẳng còn chọn 1 đoạn thì vẫn dùng được. Có thể đoạn tính tổng chiều dài không áp dụng được cho cad đời cao

 

image.thumb.png.0cb2817c645ccb91bc09d62ede9cbfa7.png

 

+Lần trước bạn nói lỗi text, đã sửa được rồi.

+Lần này bạn nói không chọn được nhiều line, bạn sửa như sau:

1- Xóa hết đoạn :

        (setq dtuong1 (cdr (car (entget (ssname doituong total)))))
         (command "lengthen" dtuong1"")
         (setq dt (getvar "Perimeter"))

2- Thay bằng đoạn:

       (setq dtuong1 (ssname doituong total)
                 dt  (vlax-curve-getDistAtParam dtuong1 (vlax-curve-getEndParam dtuong1 )))

+ Nếu có lần sau thì nhờ người khác sử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
3 giờ trước, alisp đã nói:

 

+Lần trước bạn nói lỗi text, đã sửa được rồi.

+Lần này bạn nói không chọn được nhiều line, bạn sửa như sau:

1- Xóa hết đoạn :

        (setq dtuong1 (cdr (car (entget (ssname doituong total)))))
         (command "lengthen" dtuong1"")
         (setq dt (getvar "Perimeter"))

2- Thay bằng đoạn:

       (setq dtuong1 (ssname doituong total)
                 dt  (vlax-curve-getDistAtParam dtuong1 (vlax-curve-getEndParam dtuong1 )))

+ Nếu có lần sau thì nhờ người khác sửa.

 

Rất cám ơn bạn đã giúp đỡ.

Do ban đầu mình diễn đạt không chuẩn nên khiến bạn không hiểu hết. 

Mình đã kiểm tra lại thì phần text khi chọn 1 polyline đã sửa được nhưng không kết thúc lệnh mà vẫn hiện specify total length.

khi chọn nhiều line hay pline thì bị lỗi nên có thêm lần 2

Lỗi nhiều đoạn mình có sửa theo nhưng nó báo lỗi như này.

 

image.png.df2bd77a65be68a29d8a4b3ef5b219f1.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

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

×