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

LISP tự động cộng liên tiếp khoảng cách giữa các điểm bất kỳ

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

Vâng yêu cầu như ở trên ạh, em giải thích thêm tí nữa:

Ví dụ có 4 điểm A B C D thì em muốn lần lượt cộng khoảng cách của đoạn từ A đến C, sau đó từ điểm C đến B, B đến D, cứ thế

Em đang cần lém ạh, bác nào có lòng bỏ thời gian júp em tí thì tốt quá, em xin cảm ơn trước ! Chào thân ái !!! :s_dead:

Àh, em đã search diễn đàn rùi, chỉ có cộng tổng các line pline thui, ko có chọn đc 2 điểm bất 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
Vâng yêu cầu như ở trên ạh, em giải thích thêm tí nữa:

Ví dụ có 4 điểm A B C D thì em muốn lần lượt cộng khoảng cách của đoạn từ A đến C, sau đó từ điểm C đến B, B đến D, cứ thế

Em đang cần lém ạh, bác nào có lòng bỏ thời gian júp em tí thì tốt quá, em xin cảm ơn trước ! Chào thân ái !!! :s_dead:

Àh, em đã search diễn đàn rùi, chỉ có cộng tổng các line pline thui, ko có chọn đc 2 điểm bất kỳ >.

Bạn sử dụng Code này nhé :

(defun c:ckc()
(setq po1 (getpoint "\n Pick diem dau :") S 0 i 0)
(while 
(setq po2 (getpoint po1 "\n Pick diem tiep theo de tinh khoang cach/ Enter de ket thuc :"))
(setq S (+ S (distance po1 po2)) po1 po2)
)
(alert (strcat "Tong S = " (rtos S)))
(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

bác Tue_NV thật là nhiệt tình giúp đỡ mọi người.^__^

bác làm ơn giải thich dùm e dòng này với e đang học lisp nên ko hiêu nhiều lắm :

(setq po1 (getpoint "\n Pick diem dau :") S 0 i 0)

ở đây gán i = 0 mà sao ở dưới ko dùng đến hay nó như thế nào khác?

(setq S (+ S (distance po1 po2)) po1 po2 )

dòng này gán S = S + (khoảng cách p01 và p02) còn p02,p02 ở sau để làm gì?

nếu e tính khoảng cách 3 điểm liên tiếp cách nhau là 10 nếu xoá p01,p02 ở sau đi thì kết quá là 30

chứ ko phải 20.

mong bác giải thích hộ e.thanks bác trướ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
bác làm ơn giải thich dùm e dòng này với e đang học lisp nên ko hiêu nhiều lắm :

(setq po1 (getpoint "\n Pick diem dau :") S 0 i 0)

ở đây gán i = 0 mà sao ở dưới ko dùng đến hay nó như thế nào khác?

(setq S (+ S (distance po1 po2)) po1 po2 )

dòng này gán S = S + (khoảng cách p01 và p02) còn p02,p02 ở sau để làm gì?

nếu e tính khoảng cách 3 điểm liên tiếp cách nhau là 10 nếu xoá p01,p02 ở sau đi thì kết quá là 30

chứ ko phải 20.

mong bác giải thích hộ e.thanks bác trước.^__^

ở đây gán i = 0 : cái này Tue_NV bị thừa đó mà. mình không sử dụng nó :s_dead:

 

(setq S (+ S (distance po1 po2)) po1 po2 )

Dòng này có thể phân tích làm 2 dòng:

(setq S (+ S (distance po1 po2)))

(setq po1 po2 )

 

(setq po1 po2) : tức là gán toạ độ điiểm po2 cho po1 để thành lập khoảng cách cho vòng lặp tiếp theo

Nếu bạn bỏ po1 po2 ở dòng này : (setq S (+ S (distance po1 po2)) po1 po2 )

tức là bạn luôn xác nhận điểm đầu tiên mà bạn chọn tới điểm mà bạn chọn po2 làm khoảng cách và tính tổng

Ví dụ :

Điểm A-> điểm B-> điểm C -> điểm D

của bạn sẽ là : AB+AC+AD

Còn theo của Tue_NV sẽ là : Điểm A-> điểm B-> điểm C -> điểm D : AB+BC+CD

 

Nói dễ hiểu nhé : chọn điểm đầu A -> chọn điểm B -> tính kcách AB -> tính tổng kcách -> gán toạ độ điểm B làm điểm đầu (setq po1 po2) -> chọn điểm C -> tính kcách BC -> tính tổng kcách -> cứ thế...

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

Thks bác Tue_NV, bác júp em nhiều lắm ! Em có ý này ạh, liệu bác có thể sửa đổi 1 chút để nó có thể làm đc thế này ko

 

Lisp này có thể cộng tổng cả các đoạn liên tiếp lẫn các đoạn riêng rẽ

Vd: Có 5 điểm A,B,C,D,E

Tính khoảng cách từ A-B, sau đó tính khoảng cách 2 đoạn liên tiếp C-D, D-E (như cái lisp cũ). Cuối cùng cộng tổng AB và đoạn gấp khúc C-D-E-->ra kết quả :s_dead:

Nếu làm đc thế này thì cái lisp này sẽ trở nên linh hoạt hơn nhiều! Em đợi tin 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
Thks bác Tue_NV, bác júp em nhiều lắm ! Em có ý này ạh, liệu bác có thể sửa đổi 1 chút để nó có thể làm đc thế này ko

 

Lisp này có thể cộng tổng cả các đoạn liên tiếp lẫn các đoạn riêng rẽ

Vd: Có 5 điểm A,B,C,D,E

Tính khoảng cách từ A-B, sau đó tính khoảng cách 2 đoạn liên tiếp C-D, D-E (như cái lisp cũ). Cuối cùng cộng tổng AB và đoạn gấp khúc C-D-E-->ra kết quả :s_dead:

Nếu làm đc thế này thì cái lisp này sẽ trở nên linh hoạt hơn nhiều! Em đợi tin bác !

Bạn thử đoạn Code này xem :

(defun c:ckc()
(setq po1 (getpoint "\n Pick diem A :"))
(setq po2 (getpoint po1 "\n Pick diem B :"))
(setq S (distance po1 po2))
(setq po3 (getpoint "\n Pick diem C :"))
(while 
(setq po4 (getpoint po3 "\n Pick diem tiep theo de tinh khoang cach/ Enter de ket thuc :"))
(setq S (+ S (distance po3 po4)) po3 po4)
)
(alert (strcat "Tong S = " (rtos S)))
(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
Bạn thử đoạn Code này xem :

(defun c:ckc()
(setq po1 (getpoint "\n Pick diem A :"))
(setq po2 (getpoint po1 "\n Pick diem B :"))
(setq S (distance po1 po2))
(setq po3 (getpoint "\n Pick diem C :"))
(while 
(setq po4 (getpoint po3 "\n Pick diem tiep theo de tinh khoang cach/ Enter de ket thuc :"))
(setq S (+ S (distance po3 po4)) po3 po4)
)
(alert (strcat "Tong S = " (rtos S)))
(princ)
)

em vẽ bằng pl 1đoạn 100 rồi 1đoạn 200. dùng lisp CKC pick vào 3điểm mút của pline trên được kết quả S=100. Nhưng rõ ràng là độ dài pline trên là 300. Tại sao như thế bác nhỉ? Lisp này tiện ích khi tính tổng khoảng cách giữa các điểm riêng biệt. Nếu kết quả có lựa chọn chọn text để điền kết quả nữa thì tốt! Ah nhưng nếu dùng CKC của bài viết trước thì lại có kết quả chính xác. Lạ thế ko bít. hii

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 vẽ bằng pl 1đoạn 100 rồi 1đoạn 200. dùng lisp CKC pick vào 3điểm mút của pline trên được kết quả S=100. Nhưng rõ ràng là độ dài pline trên là 300. Tại sao như thế bác nhỉ? Lisp này tiện ích khi tính tổng khoảng cách giữa các điểm riêng biệt. Nếu kết quả có lựa chọn chọn text để điền kết quả nữa thì tốt! Ah nhưng nếu dùng CKC của bài viết trước thì lại có kết quả chính xác. Lạ thế ko bít. hii

Xin lỗi bạn, code trên Tue_NV nhầm, xin chỉnh lại :

(defun c:ckc()
(setq po1 (getpoint "\n Pick diem A :"))
(setq po2 (getpoint po1 "\n Pick diem B :"))
(setq po3 (getpoint po2 "\n Pick diem C :"))
(setq S (+ (distance po1 po2) (distance po2 po3)))
(while 
(setq po4 (getpoint po3 "\n Pick diem tiep theo de tinh khoang cach/ Enter de ket thuc :"))
(setq S (+ S (distance po3 po4)) po3 po4)
)
(alert (strcat "Tong S = " (rtos S)))
(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
Xin lỗi bạn, code trên Tue_NV nhầm, xin chỉnh lại :

(defun c:ckc()
(setq po1 (getpoint "\n Pick diem A :"))
(setq po2 (getpoint po1 "\n Pick diem B :"))
(setq po3 (getpoint po2 "\n Pick diem C :"))
(setq S (+ (distance po1 po2) (distance po2 po3)))
(while 
(setq po4 (getpoint po3 "\n Pick diem tiep theo de tinh khoang cach/ Enter de ket thuc :"))
(setq S (+ S (distance po3 po4)) po3 po4)
)
(alert (strcat "Tong S = " (rtos S)))
(princ)
)

lisp này của bác Tuệ thật hay, nhưng bác có thể sửa lisp này theo 1 vài yêu cầu giúp em được kô? Tức là khi mình chọn điểm A sau đó chọn B lấy luôn giá trị này thay thế cho 1 giá trị trên bản vẽ và tiếp tục như thế khi chọn tiếp điểm c, d... Tồng các số được không bác. cám ơn bác 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
Xin lỗi bạn, code trên Tue_NV nhầm, xin chỉnh lại :

(defun c:ckc()
(setq po1 (getpoint "\n Pick diem A :"))
(setq po2 (getpoint po1 "\n Pick diem B :"))
(setq po3 (getpoint po2 "\n Pick diem C :"))
(setq S (+ (distance po1 po2) (distance po2 po3)))
(while 
(setq po4 (getpoint po3 "\n Pick diem tiep theo de tinh khoang cach/ Enter de ket thuc :"))
(setq S (+ S (distance po3 po4)) po3 po4)
)
(alert (strcat "Tong S = " (rtos S)))
(princ)
)

Các bác ơi, nếu đoạn code trên được bổ sung thêm tính năng ghi kết quả đo ra bản vẽ thì sẽ càng tiện lợi hơn. Tôi có ý kiến như vậy thì khác gì nhờ giúp đỡ rồi đúng không ạ? :bigsmile:

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 bác ơi, nếu đoạn code trên được bổ sung thêm tính năng ghi kết quả đo ra bản vẽ thì sẽ càng tiện lợi hơn. Tôi có ý kiến như vậy thì khác gì nhờ giúp đỡ rồi đúng không ạ? :bigsmile:

Bạn sử dụng thử cái này nhé :

(defun c:ckc(/ po1 po2 po cao S i j po3 pot)
(setq po1 (getpoint "\n Pick diem 1 :"))
(setq po2 (getpoint po1 "\n Pick diem 2 :"))

(grdraw po1 po2 1)

(setq po (getpoint "\n Chon diem viet chu :"))
(setq cao (getdist "\n Chon chieu cao chu :"))
(setq S (distance po1 po2) i 1 j 2)

(wtxt (strcat "Chieu dai doan " (itoa i) " - " (itoa (+ i 1)) " la : " (rtos S 2 2)) po 0 cao)
(while 
(setq po3 (getpoint po2 
"\n Pick diem tiep theo de tinh khoang cach/ Enter de ket thuc :"))
(grdraw po2 po3 1)
(setq di (distance po2 po3))
(setq S (+ S di) po2 po3)
(setq pot (list (car po) (- (cadr po) (* cao j)) 0))

(wtxt (strcat "Chieu dai doan " (itoa (+ i 1)) " - " (itoa (+ i 2)) " la : " (rtos di 2 2)) pot 0 cao)
(Setq i (1+ i))
(setq j (+ j 2))
)
(setq pot (list (car po) (- (cadr po) (* cao j)) 0))
(wtxt (strcat "Tong chieu dai cac doan la : "(rtos S 2 2)) pot 0 cao)
(alert (strcat "Tong S = " (rtos S)))
(princ)
)
;
(defun wtxt (txt p ang h / sty)
(setq sty (getvar "textstyle"))
(entmake (list (cons 0 "TEXT") (cons 7 sty) (cons 1 txt) (cons 10 p) (cons 11 p) 
(cons 72 0) (cons 73 1) (cons 50 ang) (cons 40 h) (cons 41 1))
)
)

  • Vote tăng 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

Em chào bác Tuệ. Nhân có cái lisp của bác em có cái ý này mong bác viết dùm em lisp tính khoảng cách cộng dồn.

1. Có 4 điêm O, A, B, C. Khoảng cách AB=5; BC=7;

2. Tại A ta có text đo khoảng cách OA là 100

3. Mục đích của lisp là:

copy số 100 tại A tới B và text sẽ nhảy thành 105 (= 100+5)

copy text đó tới vị trí C text nhảy thành 112 (= 105+7)

lisp có thêm lựa chọn sau số phảy "," thì càng tốt ( ví dụ 112.00)

Hy vọng em diễn đạt không khó hiêu quá.

Cảm ơn bác nhiều 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
Em chào bác Tuệ. Nhân có cái lisp của bác em có cái ý này mong bác viết dùm em lisp tính khoảng cách cộng dồn.

1. Có 4 điêm O, A, B, C. Khoảng cách AB=5; BC=7;

2. Tại A ta có text đo khoảng cách OA là 100

3. Mục đích của lisp là:

copy số 100 tại A tới B và text sẽ nhảy thành 105 (= 100+5)

copy text đó tới vị trí C text nhảy thành 112 (= 105+7)

lisp có thêm lựa chọn sau số phảy "," thì càng tốt ( ví dụ 112.00)

Hy vọng em diễn đạt không khó hiêu quá.

Cảm ơn bác nhiều nhiều !!!!!!!!!

Bạn thử Code này nhé :

 
(defun c:ckc(/ oldim ent ndung po1 po2 po3 S entl ndung1)
(setq oldim (getvar "DIMZIN"))
(setvar "DIMZIN" 0)
(setq ent (car(entsel "\n Pick chon text :")))
(setq ndung (atof(cdr(assoc 1 (entget ent)))))

(if (not tpo) (setq tpo 0)) 
(setq tp (getint (strcat "\n So chu so thap phan  :")))
(if (not tp) (setq tp tpo) (setq tpo tp))

(setq po1 (getpoint "\n Pick diem A :"))
(setq po2 (getpoint po1 "\n Pick diem B :"))
(setq S (distance po1 po2))

(Command "copy" ent "" po1 po2)
(setq entl (entget (entlast)))

(setq ndung1 (+ ndung S))

(setq entl (entmod (subst (cons 1 (rtos ndung1 2 tp)) (assoc 1 entl) entl)))  

(while 
(setq po3 (getpoint po2 "\n Pick diem tiep theo de tinh khoang cach/ Enter de ket thuc :"))
(setq S (+ S (distance po2 po3)))

(Command "copy" "L" "" po2 po3)
(setq entl (entget (entlast)))

(setq ndung1 (+ ndung S) po2 po3)

(setq entl (entmod (subst (cons 1 (rtos ndung1 2 tp)) (assoc 1 entl) entl)))


)

;(alert (strcat "Tong S = " (rtos S)))
(setvar "DIMZIN" oldim)
(princ)
)

:s_big:

  • Vote tăng 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

Giá như kết quả của lisp nay được tuỳ chọn điểm pick kết quả thì tuyệt, chứ cứ để nó tự động ghi như vậy thì hơi rối, nếu như khoảng cách của các đường thẳng hay pline quá gần nhau mà theo text của bản vẽ size lớn thì thực sự rất khó nhìn, nó chỉ mang tính ghóp ý thôi mong ban và các bạn bỏ qua cho 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
Bạn thử Code này nhé :

 
(defun c:ckc(/ oldim ent ndung po1 po2 po3 S entl ndung1)
(setq oldim (getvar "DIMZIN"))
(setvar "DIMZIN" 0)
(setq ent (car(entsel "\n Pick chon text :")))
(setq ndung (atof(cdr(assoc 1 (entget ent)))))

(if (not tpo) (setq tpo 0)) 
(setq tp (getint (strcat "\n So chu so thap phan <" (itoa tpo) "> :")))
(if (not tp) (setq tp tpo) (setq tpo tp))

(setq po1 (getpoint "\n Pick diem A :"))
(setq po2 (getpoint po1 "\n Pick diem B :"))
(setq S (distance po1 po2))

(Command "copy" ent "" po1 po2)
(setq entl (entget (entlast)))

(setq ndung1 (+ ndung S))

(setq entl (entmod (subst (cons 1 (rtos ndung1 2 tp)) (assoc 1 entl) entl)))  

(while 
(setq po3 (getpoint po2 "\n Pick diem tiep theo de tinh khoang cach/ Enter de ket thuc :"))
(setq S (+ S (distance po2 po3)))

(Command "copy" "L" "" po2 po3)
(setq entl (entget (entlast)))

(setq ndung1 (+ ndung S) po2 po3)

(setq entl (entmod (subst (cons 1 (rtos ndung1 2 tp)) (assoc 1 entl) entl)))
)

;(alert (strcat "Tong S = " (rtos S)))
(setvar "DIMZIN" oldim)
(princ)
)

:bigsmile:

 

Bạn nên sửa lisp này

các số sau phải nằm đúng giữa AB, BC ....

tức là giữa po1, po2 ... ấy

chứ không thì rối dắm lắm

  • 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

CHÀO CÁC BẠN. CÁC BẠN XEM LISP NÀY VỚI LISP NÀY CHỈ ĐO KHOẢNG CÁCH ? CÁC BẠN NÀO BIẾT VIẾT THÊM ĐOẠN LISP ĐO XONG KHOẢNG CÁCH RỒI ĐIỀN VÀO MỘT TEXT BẤT KỲ ? RẤT MONG MỌI NGƯỜI XEM VÀ CHO Ý KIẾN .

LISP NÀY LÀ Tue_NV

 

;; free lisp from cadviet.com

(defun c:ltc()

(setq po1 (getpoint "\n Pick diem A :"))

(setq po2 (getpoint po1 "\n Pick diem B :"))

(setq S (distance po1 po2))

(setq po3 (getpoint "\n Pick diem C :"))

(while

(setq po4 (getpoint po3 "\n Pick diem tiep theo de tinh khoang cach/ Enter de ket thuc :"))

(setq S (+ S (distance po3 po4)) po3 po4)

)

(alert (strcat "Tong S = " (rtos S)))

(princ)

)

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
CHÀO CÁC BẠN. CÁC BẠN XEM LISP NÀY VỚI LISP NÀY CHỈ ĐO KHOẢNG CÁCH ? CÁC BẠN NÀO BIẾT VIẾT THÊM ĐOẠN LISP ĐO XONG KHOẢNG CÁCH RỒI ĐIỀN VÀO MỘT TEXT BẤT KỲ ? RẤT MONG MỌI NGƯỜI XEM VÀ CHO Ý KIẾN .

LISP NÀY LÀ Tue_NV

 

;; free lisp from cadviet.com

(defun c:ltc()

(setq po1 (getpoint "\n Pick diem A :"))

(setq po2 (getpoint po1 "\n Pick diem B :"))

(setq S (distance po1 po2))

(setq po3 (getpoint "\n Pick diem C :"))

(while

(setq po4 (getpoint po3 "\n Pick diem tiep theo de tinh khoang cach/ Enter de ket thuc :"))

(setq S (+ S (distance po3 po4)) po3 po4)

)

(alert (strcat "Tong S = " (rtos S)))

(princ)

)

Bạn sử dụng code này nhé :

 

(defun c:ckc(/ po1 po2 oldim tp S te ent)

(setq oldim (getvar "DIMZIN"))

(setvar "DIMZIN" 0)

(if (not tpo) (setq tpo 0))

(setq tp (getint (strcat "\n So chu so thap phan :")))

(if (not tp) (setq tp tpo) (setq tpo tp))

(setq po1 (getpoint "\n Pick diem dau :"))

 

(while

(setq po2

(getpoint po1 "\n Pick diem tiep theo de tinh khoang cach/ Enter de ket thuc :"))

(setq S (distance po1 po2) po1 po2)

(while (null (setq ent (entsel "\n Pick vao TEXT :")))

(setq ent (entsel "\n Pick lai vao TEXT :"))

)

(setq te (entget (car ent)))

(setq te (entmod(subst(cons 1 (rtos S 2 tp)) (assoc 1 te) te)))

)

(setvar "DIMZIN" oldim)

(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
CHÀO CÁC BẠN. CÁC BẠN XEM LISP NÀY VỚI LISP NÀY CHỈ ĐO KHOẢNG CÁCH ? CÁC BẠN NÀO BIẾT VIẾT THÊM ĐOẠN LISP ĐO XONG KHOẢNG CÁCH RỒI ĐIỀN VÀO MỘT TEXT BẤT KỲ ? RẤT MONG MỌI NGƯỜI XEM VÀ CHO Ý KIẾN .

LISP NÀY LÀ Tue_NV

..........................

Bạn thử đoạn Code này xem :

(defun c:d2t(/ chdai obj ov p1 p2 ssle vl);distance 2 Text
 (defun *error* (msg)
   (if ov (mapcar 'setvar vl ov))
   (if (not(wcmatch (strcase msg) "*BREAK,*EXIT*,*CANCEL*"))
     (princ (strcat "\n** Error: " msg " **")))
   (princ))

 (or vlax-ename->vla-object (vl-load-com))
 (setq vl '("osmode" "orthomode" "cmdecho" "dimzin") ; Sys Var list
ov (mapcar 'getvar vl))                       ; Get Old values
 (mapcar 'setvar vl '(33 0 0 0))
 (or *ssle* (setq *ssle* 0))
 (initget 4)
 (setq ssle (getint (strcat "\nSo so le <" (itoa *ssle*) ">: ")))
 (if ssle (setq *ssle* ssle))
 (while
   (and
     (setq p1 (getpoint "\n Diem dau :"))
     (setq p2 (getpoint p1 "\n Diem cuoi :"))
     (setq chdai (rtos (distance p1 p2) 2 *ssle*))
     (princ chdai)
     (setq obj (entsel (strcat "\nChon text de ghi ket qua <" chdai "> :")))      
     (setq obj (vlax-ename->vla-object (car obj)))            
     )
   (if (wcmatch (vlax-get obj 'ObjectName) "*Text")
     (vla-put-TextString obj chdai)
     )    
   )
 (mapcar 'setvar vl ov) ; reset Sys Vars
 (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

Bạn sử dụng code này nhé :

 

(defun c:ckc(/ po1 po2 oldim tp S te ent)

(setq oldim (getvar "DIMZIN"))

(setvar "DIMZIN" 0)

(if (not tpo) (setq tpo 0))

(setq tp (getint (strcat "\n So chu so thap phan <" (rtos tpo 2 0) ">:")))

(if (not tp) (setq tp tpo) (setq tpo tp))

(setq po1 (getpoint "\n Pick diem dau :"))

 

(while

(setq po2

(getpoint po1 "\n Pick diem tiep theo de tinh khoang cach/ Enter de ket thuc :"))

(setq S (distance po1 po2) po1 po2)

(while (null (setq ent (entsel "\n Pick vao TEXT :")))

(setq ent (entsel "\n Pick lai vao TEXT :"))

)

(setq te (entget (car ent)))

(setq te (entmod(subst(cons 1 (rtos S 2 tp)) (assoc 1 te) te)))

)

(setvar "DIMZIN" oldim)

(princ)

)

 

lisp này chỉ đo khoảng cách 2 điểm và viết vào text . ý của mình ở đây là mình muốn đo 2điểm A và B sau đó đo tiếp C Và D để biết tổng chiều dài của 2 đoạn AB và CD mà bằng cach pick điểm sau đó điền vào text . Xin mọi nguoi em và cho ý kiến

l

  • 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 này chỉ đo khoảng cách 2 điểm và viết vào text . ý của mình ở đây là mình muốn đo 2điểm A và B sau đó đo tiếp C Và D để biết tổng chiều dài của 2 đoạn AB và CD mà bằng cach pick điểm sau đó điền vào text . Xin mọi nguoi em và cho ý kiến

l

Theo như yêu cầu của bạn thì code sau viết theo ý bạn :

Bạnthử nhé :

 

(defun c:ckc(/ po1 po2 oldim tp S te ent)

(setq oldim (getvar "DIMZIN"))

(setvar "DIMZIN" 0)

(if (not tpo) (setq tpo 0))

(setq tp (getint (strcat "\n So chu so thap phan :")))

(if (not tp) (setq tp tpo) (setq tpo tp))

 

(setq po1 (getpoint "\n Pick diem A :"))

 

(setq po2 (getpoint po1 "\n Pick diem B :"))

 

(setq po3 (getpoint "\n Pick diem C :"))

 

(setq po4 (getpoint po3"\n Pick diem D :"))

 

(setq S (+ (distance po1 po2) (distance po3 po4)))

 

 

(while (null (setq ent (entsel "\n Pick vao TEXT :")))

(setq ent (entsel "\n Pick lai vao TEXT :"))

)

(setq te (entget (car ent)))

(setq te (entmod(subst(cons 1 (rtos S 2 tp)) (assoc 1 te) te)))

(setvar "DIMZIN" oldim)

(princ)

)

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 sử dụng code này nhé :

 

lisp này chỉ đo khoảng cách 2 điểm và viết vào text . ý của mình ở đây là mình muốn đo 2điểm A và B sau đó đo tiếp C Và D để biết tổng chiều dài của 2 đoạn AB và CD mà bằng cach pick điểm sau đó điền vào text . Xin mọi nguoi em và cho ý kiến

l

Chào bạn Votanphu,

Bạn xài thử cái này xem đúng ý bạn chưa nhé.

(defun c:tkc ()
(setq po1 (getpoint "\n Pick diem A :"))
(setq po2 (getpoint po1 "\n Pick diem B :"))
(setq S (distance po1 po2))
(setq po3 (getpoint "\n Pick diem C :"))
(setq po4 (getpoint po3 "\n Pick diem tiep theo de tinh khoang cach:"))
(setq S (+ S (distance po3 po4)))

(alert (strcat "Tong S = " (rtos S)))
(command "text" (getpoint "\n Chon diem dat text") 2 0 (rtos S 2 2))
(princ)
)

Chúc bạn vui.

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
thank bạn Tue_NV rất đúng với ý mình cảm ơn bạn nhiều lắm . xin phép hỏi thêm là đ0 nhiều đoạn được ko

Chào bạn Votanphu,

Cái này cho phép bạn đo nhiều đoạn thẳng và cho ra kết quả tổng độ dài của các đoạn thẳng đó.

(defun c:tkc ()
(setq po1 (getpoint "\n Pick diem A :"))
(setq po2 (getpoint po1 "\n Pick diem B :"))
(setq S (distance po1 po2))
(setq po3 po2)
(while po3
(setq po3 (getpoint "\n Pick diem C :"))
(setq po4 (getpoint po3 "\n Pick diem tiep theo de tinh khoang cach:"))
(setq S (+ S (distance po3 po4)) po3 po4)
(setq ans (getstring "\n Ban co muon tiep tuc ??  : "))
(if (/= ans "y")
(setq po3 nil)
)
)
(alert (strcat "Tong S = " (rtos S)))
(command "text" (getpoint "\n Chon diem dat text") 2 0 (rtos S 2 2))
(princ)
)

 

Sau khi bạn đã chọn đoạn thẳng thứ hai thì lisp sẽ hỏi bạn có muốn tiếp tục hay không. Nếu bạn trả lời "y" thì nó cho bạn chọn tiếp đoạn thẳng thứ ba và cứ thế cho đến khi bạn trả lời "n". Khi ấy lisp sẽ cho ra kết quả cuối cùng bạn nhé.

Chúc bạn vui.

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

Chào các anh chị !

cũng cung đề tài này em muốn nhờ các anh giúp em tạo một lísp cộng dồn khỏang cách trong dimension có tính theo tỵ lệ của dimension.

vd: em có điểm A có số 250 đến b khỏang cách 50 sẽ đuợc thể hiện tại b là 300 tỷ lệ bản vẽ ;à 1/500.Cám nơn các anh chị .

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  

×