Đế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

#21 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 - 04:51 PM

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 <" (rtos tpo 2 0) ">:")))
(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)
)

  • 0

#22 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 07 November 2009 - 05:20 PM

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.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#23 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 - 05:32 PM

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

#24 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 07 November 2009 - 05:53 PM

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 ?? < y or n > : "))
(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.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#25 huongquan11

huongquan11

    biết pan

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

Đã gửi 07 July 2011 - 12:57 PM

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

#26 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 July 2011 - 02:28 PM

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ị .

Bạn sử dụng Lisp cộng trừ dim của Tue_NV ở đây :
Bài viết số 2081
  • 1

#27 huongquan11

huongquan11

    biết pan

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

Đã gửi 07 July 2011 - 03:56 PM

Cam ơn bác Tue_NV nhiều lắm. Em làm được rồi
  • 0

#28 vetgo

vetgo

    biết vẽ polygon

  • Members
  • PipPip
  • 76 Bài viết
Điểm đánh giá: 17 (tàm tạm)

Đã gửi 04 September 2012 - 03:02 PM

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 đó.
.....
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.

Em đã thử Test Lisp này của bác và nhận thấy nếu lựa chọn "Y" thì vẫn chỉ đo được 2 đoạn thẳng thôi bác ạ, không đo được 3 đoạn thẳng và cho ra tổng chiều dài của 3 đoạn thẳng đó! bác xem lại giúp em vì thi thoảng bọn em cũng cần dùng cái này!
  • 0
Nếu nội dung post là có ích, xin tick + để thăng hàm lên lương...

#29 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 04 September 2012 - 04:41 PM

Em đã thử Test Lisp này của bác và nhận thấy nếu lựa chọn "Y" thì vẫn chỉ đo được 2 đoạn thẳng thôi bác ạ, không đo được 3 đoạn thẳng và cho ra tổng chiều dài của 3 đoạn thẳng đó! bác xem lại giúp em vì thi thoảng bọn em cũng cần dùng cái này!

Hề hề hề,
Sorry bạn,
Bạn hãy gửi cái kết quả bạn thử để mình check lại. Có nhẽ bạn đã nhập "Y" thay vì "y" rùi.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#30 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5454 Bài viết
Điểm đánh giá: 2626 (tuyệt vời)

Đã gửi 04 September 2012 - 09:13 PM

Lỗi này tại bác nhé! Bác cứ initget và getkword vào thì "y" hay "Y" cũng đều tốt cả
  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#31 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5684 Bài viết
Điểm đánh giá: 2606 (tuyệt vời)

Đã gửi 04 September 2012 - 09:38 PM

Nên viết thế này thôi bác ạ :


(defun c:do(/ lst p1 p2 p)
(setq p2 (getpoint (setq p1 (getpoint "\nP1 :")) "\nP2:") lst (list p2 p1))
(while (setq p (getpoint (car lst) "\nDiem tiep theo <space to exit>")) (setq lst (cons p lst)))
(alert (rtos (apply '+ (mapcar '(lambda(x y)(distance x y)) lst (cdr lst))) 2 2))
)

  • 3

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#32 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 04 September 2012 - 10:05 PM

Nên viết thế này thôi bác ạ :


(defun c:do(/ lst p1 p2 p)
(setq p2 (getpoint (setq p1 (getpoint "\nP1 :")) "\nP2:") lst (list p2 p1))
(while (setq p (getpoint (car lst) "\nDiem tiep theo <space to exit>")) (setq lst (cons p lst)))
(alert (rtos (apply '+ (mapcar '(lambda(x y)(distance x y)) lst (cdr lst))) 2 2))
)

Nếu viết thì như thế này thôi ket:
Gọn -> Khỏi sử dụng biến luôn

(defun c:do ()
(command "pline")(while (< 0 (getvar "CMDACTIVE")) (command pause))
(command "lengthen" "L" "" "undo" 2)
(alert (rtos (getvar "perimeter")))
(princ)
)

  • 3

#33 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5684 Bài viết
Điểm đánh giá: 2606 (tuyệt vời)

Đã gửi 04 September 2012 - 11:13 PM

Nếu yêu cầu cho phép sử dụng cách cheat này ^^ Và nếu bác undo thì phải mark trước - để tránh undo gây lỗi (theo e thì entel sẽ hay hơn)
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#34 tvkill

tvkill

    biết vẽ ellipse

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

Đã gửi 05 September 2012 - 10:58 AM

Nên viết thế này thôi bác ạ :

 (defun c:do(/ lst p1 p2 p) (setq p2 (getpoint (setq p1 (getpoint "\nP1 :")) "\nP2:") lst (list p2 p1)) (while (setq p (getpoint (car lst) "\nDiem tiep theo <space to exit>")) (setq lst (cons p lst))) (alert (rtos (apply '+ (mapcar '(lambda(x y)(distance x y)) lst (cdr lst))) 2 2)) ) 

lisp đo khoảng cách ,khi đo xong có thể cho ra text có săn không vây bạn?
  • 0

#35 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 05 September 2012 - 11:02 AM

lisp đo khoảng cách ,khi đo xong có thể cho ra text có săn không vây bạn?

Hề hề hề,
Có thể bạn ạ. Nhưng sẵn kiểu gì thì bạn phải trình bày cho rõ chứ đừng hỏi bâng quơ như vậy.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#36 tvkill

tvkill

    biết vẽ ellipse

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

Đã gửi 05 September 2012 - 11:19 AM

Hề hề hề,
Có thể bạn ạ. Nhưng sẵn kiểu gì thì bạn phải trình bày cho rõ chứ đừng hỏi bâng quơ như vậy.

TEXT có săn đó bạn.mình có viết trên rồi mà
  • 0

#37 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 05 September 2012 - 11:25 AM

TEXT có săn đó bạn.mình có viết trên rồi mà

Hề hề hề,
Trên bản vẽ của bạn có bao nhiêu text có sẵn??? Vậy bạn muốn chọn thằng có sẵn nào??? Bạn cần thay thế text có sẵn ây bằng kết quả hay bạn muốn thêm kết quả vào text có sẵn, hay bạn muốn ........????
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#38 tvkill

tvkill

    biết vẽ ellipse

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

Đã gửi 05 September 2012 - 02:16 PM

Hề hề hề,
Trên bản vẽ của bạn có bao nhiêu text có sẵn??? Vậy bạn muốn chọn thằng có sẵn nào??? Bạn cần thay thế text có sẵn ây bằng kết quả hay bạn muốn thêm kết quả vào text có sẵn, hay bạn muốn ........????

Thay thế text có săn nawnm trong đoan tính toán thôi
  • 0

#39 quan08

quan08

    biết vẽ pline

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

Đã gửi 06 September 2012 - 08:14 AM

Nên viết thế này thôi bác ạ :


(defun c:do(/ lst p1 p2 p)
(setq p2 (getpoint (setq p1 (getpoint "\nP1 :")) "\nP2:") lst (list p2 p1))
(while (setq p (getpoint (car lst) "\nDiem tiep theo <space to exit>")) (setq lst (cons p lst)))
(alert (rtos (apply '+ (mapcar '(lambda(x y)(distance x y)) lst (cdr lst))) 2 2))
)

Nhờ bác sửa lại thành đo nhiều đoạn chứ không phải đo các đoạn thẳng liền nhau.
1.Chọn điểm P1 rồi chọn điểm P2 là đoạn thứ 1 sẽ hỏi tiếp tục không?
a. Nếu có sẽ chọn điểm P1 và P2 ra đoạn thứ 2,tiếp tục tới n đoạn.kết thúc lệnh sẽ cộng tổng các đoạn tiép là mục 3
b. Nếu chọn không sẽ kết thúc lệnh tiếp là mục 3.
3. Khi kết thúc lệnh thì hiện Số cần chia khi ta nhập số cần chia vào thì lấy kích thước tổng vừa đo chia cho số đó và hiện kết quả làm tròn ở hàng chục.
Ví dụ: Sau khi chia kết quả là 255,33 thì làm tròn là 256.
Thanks.
  • 0

#40 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 06 September 2012 - 01:40 PM

Nhờ bác sửa lại thành đo nhiều đoạn chứ không phải đo các đoạn thẳng liền nhau.
1.Chọn điểm P1 rồi chọn điểm P2 là đoạn thứ 1 sẽ hỏi tiếp tục không?
a. Nếu có sẽ chọn điểm P1 và P2 ra đoạn thứ 2,tiếp tục tới n đoạn.kết thúc lệnh sẽ cộng tổng các đoạn tiép là mục 3
b. Nếu chọn không sẽ kết thúc lệnh tiếp là mục 3.
3. Khi kết thúc lệnh thì hiện Số cần chia khi ta nhập số cần chia vào thì lấy kích thước tổng vừa đo chia cho số đó và hiện kết quả làm tròn ở hàng chục.
Ví dụ: Sau khi chia kết quả là 255,33 thì làm tròn là 256.
Thanks.

Bạn viết kết quả làm tròn ở hàng chục.
Sao tôi thấy bạn ví dụ lại ở hàng đơn vị nhỉ
  • 1