Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
48 replies to this topic

#1 VincentAz

VincentAz

    Chưa sử dụng CAD

  • Members
  • Pip
  • 3 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 17 July 2009 - 05:52 PM

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ỳ >.<
  • 0

#2 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 17 July 2009 - 08:39 PM

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)
)

  • 2

#3 soiconkthn

soiconkthn

    biết zoom

  • Members
  • Pip
  • 16 Bài viết
Điểm đánh giá: 3 (bình thường)

Đã gửi 18 July 2009 - 10:01 AM

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.^__^
  • 0

#4 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 18 July 2009 - 10:39 AM

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ế...
  • 0

#5 VincentAz

VincentAz

    Chưa sử dụng CAD

  • Members
  • Pip
  • 3 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 19 July 2009 - 01:06 PM

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 !
  • 0

#6 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 19 July 2009 - 02:40 PM

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)
)

  • 2

#7 bach1212

bach1212

    biết lệnh trim

  • Members
  • PipPipPip
  • 190 Bài viết
Điểm đánh giá: 5 (bình thường)

Đã gửi 12 August 2009 - 09:15 AM

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

Một môn tập luyện mang lại vô vàn lợi ích sức khỏe cho mọi người, nhiều bệnh tật nan y đều được chữa khỏi, hoàn toàn miễn phí. Hiệu quả chữa khỏi bệnh tật của nó lên đến hơn 90%.
Tài liệu tại đây: http://phapluan.org/

Rất vui được làm quen với mọi người trên facebook:
https://www.facebook...67946371&type=1

 

 


#8 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 12 August 2009 - 09:32 AM

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)
)

  • 1

#9 tranlaogia

tranlaogia

    biết lệnh scale

  • Members
  • PipPipPip
  • 142 Bài viết
Điểm đánh giá: 16 (tàm tạm)

Đã gửi 12 August 2009 - 09:57 AM

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é
  • 0

#10 toai

toai

    biết vẽ ellipse

  • Members
  • PipPip
  • 59 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 12 August 2009 - 10:06 PM

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:
  • 0
Mưu sự tại nhân, thành sự tại thiên.

#11 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 13 August 2009 - 08:34 AM

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))
)
)

  • 3

#12 daotac541

daotac541

    biết vẽ circle

  • Members
  • PipPip
  • 30 Bài viết
Điểm đánh giá: 2 (bình thường)

Đã gửi 15 September 2009 - 09:15 AM

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 !!!!!!!!!
  • 0

#13 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 15 September 2009 - 12:13 PM

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 <" (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)
)

:s_big:
  • 3

#14 daotac541

daotac541

    biết vẽ circle

  • Members
  • PipPip
  • 30 Bài viết
Điểm đánh giá: 2 (bình thường)

Đã gửi 15 September 2009 - 02:36 PM

Lisp này thật hay.
Cảm ơn bác Tuệ rất nhiều !!!!!!!!!!!!!!!!!!!
  • 0

#15 zippo.113

zippo.113

    biết pan

  • Members
  • Pip
  • 7 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 09 October 2009 - 03:44 PM

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é.
  • 0

#16 trieubb

trieubb

    biết vẽ ellipse

  • Members
  • PipPip
  • 59 Bài viết
Điểm đánh giá: 6 (bình thường)

Đã gửi 09 October 2009 - 05:13 PM

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

  • -1

#17 votanphu

votanphu

    biết vẽ spline

  • Members
  • PipPip
  • 93 Bài viết
Điểm đánh giá: -5 (bình thường)

Đã gửi 07 November 2009 - 02:12 PM

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)
)
  • 0

#18 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 07 November 2009 - 03:51 PM

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 <" (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)
)

  • 1

#19 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1435 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 07 November 2009 - 03:51 PM

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)
)

  • 1

#20 votanphu

votanphu

    biết vẽ spline

  • Members
  • PipPip
  • 93 Bài viết
Điểm đánh giá: -5 (bình thường)

Đã gửi 07 November 2009 - 04:38 PM

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