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

Nhờ các bác viết dùm Lisp đánh cao độ

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

em tìm thấy trên diễn đàn Lisp đánh cốt cao độ, nhưng có một vài điểm em thấy chưa vừa ý,nên nhờ bác Hoành viết dùm em cái lisp với yêu cầu sau: khi mình nhập lệnh cad sẽ yêu cầu mình xác định điểm 0,0. sau đó mình sẽ pick điểm đánh cốt cao độ, nhưng sẽ liên tục đến khi mình ngưng thì có thể enter để kết thúc lệnh, và cái kí hiệu đó có thể mirror qua lại được.khi cần chỉnh sửa thì có thể sửa trực tiếp như block ATT.đây là file kí hiệu cốt cao độ của em, mong bác lấy nó làm dùm em. Cảm ơn bác nhiều. http://www.cadviet.com/upfiles/Cot_cao_do.dwg

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 tìm thấy trên diễn đàn Lisp đánh cốt cao độ, nhưng có một vài điểm em thấy chưa vừa ý,nên nhờ bác Hoành viết dùm em cái lisp với yêu cầu sau: khi mình nhập lệnh cad sẽ yêu cầu mình xác định điểm 0,0. sau đó mình sẽ pick điểm đánh cốt cao độ, nhưng sẽ liên tục đến khi mình ngưng thì có thể enter để kết thúc lệnh, và cái kí hiệu đó có thể mirror qua lại được.khi cần chỉnh sửa thì có thể sửa trực tiếp như block ATT.đây là file kí hiệu cốt cao độ của em, mong bác lấy nó làm dùm em. Cảm ơn bác nhiều. http://www.cadviet.com/upfiles/Cot_cao_do.dwg

Bạn dùng cad đời nhiêu mà mình dùng cad2007 mở hông ra vậy? Thấp thấp xuống cho mình mót tí bạn!

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 dùng cad đời nhiêu mà mình dùng cad2007 mở hông ra vậy? Thấp thấp xuống cho mình mót tí bạn!

ủa !mình cũng dùng cad 20007 thôi mà.bạn thử tải lại kiểm tra xem.

http://www.cadviet.com/upfiles/Cot_cao_do.dwg

sao chưa thấy bác hoanh đâu 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
em tìm thấy trên diễn đàn Lisp đánh cốt cao độ, nhưng có một vài điểm em thấy chưa vừa ý,nên nhờ bác Hoành viết dùm em cái lisp với yêu cầu sau: khi mình nhập lệnh cad sẽ yêu cầu mình xác định điểm 0,0. sau đó mình sẽ pick điểm đánh cốt cao độ, nhưng sẽ liên tục đến khi mình ngưng thì có thể enter để kết thúc lệnh, và cái kí hiệu đó có thể mirror qua lại được.khi cần chỉnh sửa thì có thể sửa trực tiếp như block ATT.đây là file kí hiệu cốt cao độ của em, mong bác lấy nó làm dùm em. Cảm ơn bác nhiều. http://www.cadviet.com/upfiles/Cot_cao_do.dwg

như yêu cầu của bạn mình có lisp đó nhưng mình chưa biết cách post file từ máy của mình vào diễn đàn,vì vậy bạn cho mình địa chỉ mail mình sẽ gửi cho bạn hoặc bạn vào trang tuvanxd.net dowl phần TLKT về là có đấy bạn ạ.mình đã dùng rùi.

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 tìm thấy trên diễn đàn Lisp đánh cốt cao độ, nhưng có một vài điểm em thấy chưa vừa ý,nên nhờ bác Hoành viết dùm em cái lisp với yêu cầu sau: khi mình nhập lệnh cad sẽ yêu cầu mình xác định điểm 0,0. sau đó mình sẽ pick điểm đánh cốt cao độ, nhưng sẽ liên tục đến khi mình ngưng thì có thể enter để kết thúc lệnh, và cái kí hiệu đó có thể mirror qua lại được.khi cần chỉnh sửa thì có thể sửa trực tiếp như block ATT.đây là file kí hiệu cốt cao độ của em, mong bác lấy nó làm dùm em. Cảm ơn bác nhiều. http://www.cadviet.com/upfiles/Cot_cao_do.dwg

Đây là lisp viết theo yêu cầu của bạn:

http://www.cadviet.com/upfiles/CTR.vlx cho trường hợp đơn vị đo cao độ là mm.

Hoặc http://www.cadviet.com/upfiles/CTR_1.vlx cho trường hợp đơn vị đo cao độ là m

Chú ý: Trong file cad phải có sẵn Block KH-COSVER như bạn đã gửi.

Tên lệnh là CTR.

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
Đây là lisp viết theo yêu cầu của bạn:

http://www.cadviet.com/upfiles/CTR.vlx cho trường hợp đơn vị đo cao độ là mm.

Hoặc http://www.cadviet.com/upfiles/CTR_1.vlx cho trường hợp đơn vị đo cao độ là m

Chú ý: Trong file cad phải có sẵn Block KH-COSVER như bạn đã gửi.

Tên lệnh là CTR.

Chào quygtvt

Có lẽ rằng khi viết Lisp bạn chưa chú ý đến biến ATTREQ

Lisp của bạn sẽ sai khi biến hệ thống ATTREQ = 0

Lisp của bạn chỉ đúng khi biến hệ thống ATTREQ = 1

Vậy nên, bạn phải thiết lập cái biến này trong Lisp thì Lisp mới đúng được

Chức năng của biến ATTREQ : bạn đọc Help nhé

:s_dead:

  • 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
Đây là lisp viết theo yêu cầu của bạn:

http://www.cadviet.com/upfiles/CTR.vlx cho trường hợp đơn vị đo cao độ là mm.

Hoặc http://www.cadviet.com/upfiles/CTR_1.vlx cho trường hợp đơn vị đo cao độ là m

Chú ý: Trong file cad phải có sẵn Block KH-COSVER như bạn đã gửi.

Tên lệnh là CTR.

Cám ơn bạn rất nhiều, mình đã down cả 2 file về dùng thử và thấy đúng như bác Tue NV đã nói. ATTREQ =0 thì đúng như ý mình, chỉ tiếc là số cao độ lại không chịu nhảy, còn = 1 thì số chịu nhảy nhưng dấu "+, - (âm dương)" thì không có. nhờ bác sửa lại dùm em chỗ đó. nếu được thì nhờ bác Tue NV sửa dùm cho em luôn. thank's các bác nhiều lắm lắm.

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ám ơn bạn rất nhiều, mình đã down cả 2 file về dùng thử và thấy đúng như bác Tue NV đã nói. ATTREQ =0 thì đúng như ý mình, chỉ tiếc là số cao độ lại không chịu nhảy, còn = 1 thì số chịu nhảy nhưng dấu "+, - (âm dương)" thì không có. nhờ bác sửa lại dùm em chỗ đó. nếu được thì nhờ bác Tue NV sửa dùm cho em luôn. thank's các bác nhiều lắm lắm.

Đoạn Lisp của bạn quygtvt cần phải bổ sung thêm các ý sau cho hoàn thiện :

1. Bổ sung thêm biến Attreq để Lisp hoạt động đúng như Tue_NV đã nêu

2. Vấn đề về tỉ lệ vẽ. Vì đôi lúc ta vẽ với các tỉ lệ khác nhau

3. Cao độ tại điểm mốc. Tức là :

Nhap diem moc cao do:

Sau đó phải thêm dòng nữa là : Nhập cao độ cho điểm mốc là bao nhiêu ? -> để từ đó tính toán cao độ cho

Nhap diem ve cao do:

4. theo ý của auduongphuc

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
Đoạn Lisp của bạn quygtvt cần phải bổ sung thêm các ý sau cho hoàn thiện :

1. Bổ sung thêm biến Attreq để Lisp hoạt động đúng như Tue_NV đã nêu

2. Vấn đề về tỉ lệ vẽ. Vì đôi lúc ta vẽ với các tỉ lệ khác nhau

3. Cao độ tại điểm mốc. Tức là :

Nhap diem moc cao do:

Sau đó phải thêm dòng nữa là : Nhập cao độ cho điểm mốc là bao nhiêu ? -> để từ đó tính toán cao độ cho

Nhap diem ve cao do:

4. theo ý của auduongphuc

 

@ auduongphuc : Nếu bạn có thể sửa được chủ đề của Topic này thì Tue_NV sẽ giúp bạn vì lí do tế nhị là mình không muốn " múa rìu qua mắt bác Hoành". Mong bạn thông cảm

Cảm ơn bác Tue NV đã nhiệt tình giúp đỡ, nhưng ..Hic..hic...thật sự là em không biết làm cách nào có thể thay đổi được chủ đề. Post như vậy chủ yếu là để bác Hoành nhìn thấy dễ hơn,nếu rảnh thì có thể giúp em. nhưng thấy lâu quá, chắc bác Hoành bận thiệt rồi. thôi nhờ bác Tue NV viết dùm em đi. nếu bác Hoành có đọc được chắc cũng thông cảm mà. nếu bác vẫn ngại thì làm phiền bác gửi mail cho em. auduongphuc@gmail.com . Thank's bác 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
Chuyện "có thể thay đổi được tên chủ đề" hay không bạn Tue_NV biết rõ hơn bạn chứ? (Group: CADViet Team)

Nhưng bạn đã ghi rõ nhờ bác Hoành thì mọi người cũng dè chừng.

muốn giúp bạn nhưng ... ngại "cây đa cây đề".

Cám ơn anh giabach.

Em đang viết và cố gắng hoàn thành xong code này để giúp cho bạn auduongphuc.

Có gì trở ngại mong anh gia bách và mọi người hỗ trợ thêm.

Chào anh. Chúc anh thật nhiều sức khoẻ.

-----------

Tue_NV đã hoàn thành xong code này

Bạn auduongphuc chạy thử xem :

Chỉ Có 2 yêu cầu nhỏ khi chạy code :

1. Lisp chấp nhận bất cứ Block cao độ nào miễn là Block đó có 1 Atrtibute và Block đó phải có trên CAD để mà ta Pick chon Block mau

2. Điểm chèn Block đó nên nằm ngay cos cao độ chèn

Mong bạn auduongphuc hiểu

(defun c:dcd(/ tlv blm blname dmo cdm cd dm cdmi dmoc)
(setvar "attreq" 1)
(setvar "cmdecho" 0)
(setq oldim (getvar "DimZin"))
(setvar "Dimzin" 0)
(setq tlv (/ 1 (getreal "\n Nhap ti le ve : 1/")))
(setq blm (entget(car(entsel "\n Pick chon Block mau :"))))
(setq blname (cdr(assoc 2 blm)))
(setq TLX (cdr(assoc 41 blm)))
(setq TLY (cdr(assoc 42 blm)))


(setq dmo (getpoint "\n Pick diem moc : "))

(setq cdm (getreal "\n Nhap cao do cua diem moc :"))
(if (= cdm 0) (setq cd (strcat "%%p" (rtos cdm 2 3))))
(if (> cdm 0) (setq cd (strcat "+" (rtos cdm 2 3))))
(if ((command "insert" blname dmo TLX TLY "0" cd)
(setq dmoc dmo)
(while (setq dm (getpoint dmoc "\n Pick diem tiep theo :"))
(setq cdmi (* (- (cadr dm) cdm (cadr dmo)) tlv))
(if (= cdmi 0) (setq cdi (strcat "%%p" (rtos cdmi 2 3))))
(if (> cdmi 0) (setq cdi (strcat "+" (rtos cdmi 2 3))))
(if ((command "insert" blname dm TLX TLY "0" cdi)
(setq dmoc dm)
)

(setvar "Dimzin" oldim)
(princ)
)

  • Vote tăng 4

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ám ơn anh giabach.

Em đang viết và cố gắng hoàn thành xong code này để giúp cho bạn auduongphuc.

Có gì trở ngại mong anh gia bách và mọi người hỗ trợ thêm.

Chào anh. Chúc anh thật nhiều sức khoẻ.

-----------

Tue_NV đã hoàn thành xong code này

Bạn auduongphuc chạy thử xem :

Chỉ Có 2 yêu cầu nhỏ khi chạy code :

1. Lisp chấp nhận bất cứ Block cao độ nào miễn là Block đó có 1 Atrtibute và Block đó phải có trên CAD để mà ta Pick chon Block mau

2. Điểm chèn Block đó nên nằm ngay cos cao độ chèn

Mong bạn auduongphuc hiểu

(defun c:dcd(/ tlv blm blname dmo cdm cd dm cdmi dmoc)
(setvar "attreq" 1)
(setvar "cmdecho" 0)
(setq oldim (getvar "DimZin"))
(setvar "Dimzin" 0)
(setq tlv (/ 1 (getreal "\n Nhap ti le ve : 1/")))
(setq blm (entget(car(entsel "\n Pick chon Block mau :"))))
(setq blname (cdr(assoc 2 blm)))
(setq TLX (cdr(assoc 41 blm)))
(setq TLY (cdr(assoc 42 blm)))
(setq dmo (getpoint "\n Pick diem moc : "))

(setq cdm (getreal "\n Nhap cao do cua diem moc :"))
(if (= cdm 0) (setq cd (strcat "%%p" (rtos cdm 2 3))))
(if (> cdm 0) (setq cd (strcat "+" (rtos cdm 2 3))))
(if (< cdm 0) (setq cd (rtos cdm 2 3)))
(command "insert" blname dmo TLX TLY "0" cd)
(setq dmoc dmo)
(while (setq dm (getpoint dmoc "\n Pick diem tiep theo :"))
(setq cdmi (* (- (cadr dm) cdm (cadr dmo)) tlv))
(if (= cdmi 0) (setq cdi (strcat "%%p" (rtos cdmi 2 3))))
(if (> cdmi 0) (setq cdi (strcat "+" (rtos cdmi 2 3))))
(if (< cdmi 0) (setq cdi (rtos cdmi 2 3)))
(command "insert" blname dm TLX TLY "0" cdi)
(setq dmoc dm)
)

(setvar "Dimzin" oldim)
(princ)
)

Cảm ơn bác Tue_NV rất nhiều, Lisp của bác rất đúng với ý em (đến 99%), nhưng còn bị 1 vấn đề rất nhỏ nữa, không biết là do em kém hay bác nhầm (hy vọng là do em) mà cốt cao độ bị nhân lên tới 10 lần. Khi cốt ở 0.000 thì ok, nhưng khi mình lên cao hơn hoặc xuống thấp hơn thì đúng số nhưng bị x10 lần, mong bác chỉnh sửa lại dùm em hoặc bác chỉ bảo dùm em. Thank's bác. em xin gửi kèm theo file để dễ hình dung http://www.cadviet.com/upfiles/2/cot_cao_do.dwg

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ảm ơn bác Tue_NV rất nhiều, Lisp của bác rất đúng với ý em (đến 99%), nhưng còn bị 1 vấn đề rất nhỏ nữa, không biết là do em kém hay bác nhầm (hy vọng là do em) mà cốt cao độ bị nhân lên tới 10 lần. Khi cốt ở 0.000 thì ok, nhưng khi mình lên cao hơn hoặc xuống thấp hơn thì đúng số nhưng bị x10 lần, mong bác chỉnh sửa lại dùm em hoặc bác chỉ bảo dùm em. Thank's bác. em xin gửi kèm theo file để dễ hình dung http://www.cadviet.com/upfiles/2/cot_cao_do.dwg

Bạn đã nhầm rồi. 5,6mét <=> 5600 mm

-> mà bạn vẽ cos là 5.600

=> kết quả tỉ lệ ở dòng Nhap ti le ve : 1/1000

Phải nhập là số 1000 phải không bạn

5600/5.6 = 1000

 

cos của bạn là 5,600 nhưng kết quả đo được là 5600 thì bạn suy luận sẽ ra kết quả tỉ lệ vẽ đó mà

Cái hay của Lisp này như Tue_NV đã nói là Lisp chấp nhận bất cứ Block cao độ nào miễn là Block đó có 1 Atrtibute và Block đó phải có trên CAD để mà ta Pick chon Block mau

  • 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
Chuyện "có thể thay đổi được tên chủ đề" hay không bạn Tue_NV biết rõ hơn bạn chứ? (Group: CADViet Team)

Nhưng bạn đã ghi rõ nhờ bác Hoành thì mọi người cũng dè chừng.

muốn giúp bạn nhưng ... ngại "cây đa cây đề".

 

Nếu em là Bác Hoành chắc em cũng cảm thấy khó chịu với những topic chỉ đích danh tên mình thế này. "đây là diễn đàn chung của cả cộng đồng Cadviet cơ mà, có fải website của riêng tôi đâu mà lúc nào cũng fải chỉ rõ tên tôi mỗi khi bạn gặp vấn đề thế? nếu có gì thắc mắc thì cứ post lên để mọi nguời cùng tháo gỡ" Em mà là bác ấy em sẽ nghĩ như vậy đấy :s_dead:

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 thấy lisp này rất hay, tuy nhiên có nhược điểm là khi "nhao cao do diem moc" nếu là 0.00 thì lisp chạy chính xác, nhưng nếu nhập con số khác 0, thì nó hiểu bị ngược. ví dụ tôi nhập 3 thì khi move lên 1 đơn vị kết quả sẽ là -2 (nếu đúng là 4), nếu tôi nhập -1 thì khi tôi move xuống 1 đơn vị thì kết quả là 0 (nếu đúng là -2). Bạn Tue_NV sửa lại chỗ này giúp mình, cám ơn.

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
:D Hic, chủ lisp không quan tâm nữa àh, mong tin chủ lisp, thanks.

 

Bạn sài thử cái này, mình viết và dùng cũng tạm, có gì Reply lại nhé:

http://www.cadviet.com/forum/index.php?showtopic=21470

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ám ơn anh giabach.

Em đang viết và cố gắng hoàn thành xong code này để giúp cho bạn auduongphuc.

Có gì trở ngại mong anh gia bách và mọi người hỗ trợ thêm.

Chào anh. Chúc anh thật nhiều sức khoẻ.

-----------

Tue_NV đã hoàn thành xong code này

Bạn auduongphuc chạy thử xem :

Chỉ Có 2 yêu cầu nhỏ khi chạy code :

1. Lisp chấp nhận bất cứ Block cao độ nào miễn là Block đó có 1 Atrtibute và Block đó phải có trên CAD để mà ta Pick chon Block mau

2. Điểm chèn Block đó nên nằm ngay cos cao độ chèn

Mong bạn auduongphuc hiểu

(defun c:dcd(/ tlv blm blname dmo cdm cd dm cdmi dmoc)
(setvar "attreq" 1)
(setvar "cmdecho" 0)
(setq oldim (getvar "DimZin"))
(setvar "Dimzin" 0)
(setq tlv (/ 1 (getreal "\n Nhap ti le ve : 1/")))
(setq blm (entget(car(entsel "\n Pick chon Block mau :"))))
(setq blname (cdr(assoc 2 blm)))
(setq TLX (cdr(assoc 41 blm)))
(setq TLY (cdr(assoc 42 blm)))
(setq dmo (getpoint "\n Pick diem moc : "))

(setq cdm (getreal "\n Nhap cao do cua diem moc :"))
(if (= cdm 0) (setq cd (strcat "%%p" (rtos cdm 2 3))))
(if (> cdm 0) (setq cd (strcat "+" (rtos cdm 2 3))))
(if (< cdm 0) (setq cd (rtos cdm 2 3)))
(command "insert" blname dmo TLX TLY "0" cd)
(setq dmoc dmo)
(while (setq dm (getpoint dmoc "\n Pick diem tiep theo :"))
(setq cdmi (* (- (cadr dm) cdm (cadr dmo)) tlv))
(if (= cdmi 0) (setq cdi (strcat "%%p" (rtos cdmi 2 3))))
(if (> cdmi 0) (setq cdi (strcat "+" (rtos cdmi 2 3))))
(if (< cdmi 0) (setq cdi (rtos cdmi 2 3)))
(command "insert" blname dm TLX TLY "0" cdi)
(setq dmoc dm)
)

(setvar "Dimzin" oldim)
(princ)
)

Bác ơi, tình hình là lisp của bạn rất hay, đúng ý mình, nhưng mà trong bản vẽ thì cốt cao độ sẽ là đơn vị mét, và thường là sau dấu thập phân chỉ cần hai số thôi, ví dụ như là +2.52, bác có thể sửa thêm giùm em dc không?Cảm ơn bác 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
Bác ơi, tình hình là lisp của bạn rất hay, đúng ý mình, nhưng mà trong bản vẽ thì cốt cao độ sẽ là đơn vị mét, và thường là sau dấu thập phân chỉ cần hai số thôi, ví dụ như là +2.52, bác có thể sửa thêm giùm em dc không?Cảm ơn bác nhiều

Bạn chỉ cần sửa Rtos ..... 2 3 -> Rtos ........ 2 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

lisp đánh cao độ của Tue rất hay nhưng bị lỗi rồi...sau khi cho giá trị tại điểm mốc, thì nó cứ bằng 0 và cái block bị rotate một góc...và click những điểm tiếp theo thì vẫn không nhảy số...

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ám ơn anh giabach.

Em đang viết và cố gắng hoàn thành xong code này để giúp cho bạn auduongphuc.

Có gì trở ngại mong anh gia bách và mọi người hỗ trợ thêm.

Chào anh. Chúc anh thật nhiều sức khoẻ.

-----------

Tue_NV đã hoàn thành xong code này

Bạn auduongphuc chạy thử xem :

Chỉ Có 2 yêu cầu nhỏ khi chạy code :

1. Lisp chấp nhận bất cứ Block cao độ nào miễn là Block đó có 1 Atrtibute và Block đó phải có trên CAD để mà ta Pick chon Block mau

2. Điểm chèn Block đó nên nằm ngay cos cao độ chèn

Mong bạn auduongphuc hiểu

(defun c:dcd(/ tlv blm blname dmo cdm cd dm cdmi dmoc)(setvar "attreq" 1)(setvar "cmdecho" 0)(setq oldim (getvar "DimZin"))(setvar "Dimzin" 0)(setq tlv (/ 1 (getreal "\n Nhap ti le ve : 1/")))(setq blm (entget(car(entsel "\n Pick chon Block mau :"))))(setq blname (cdr(assoc 2 blm)))(setq TLX (cdr(assoc 41 blm)))(setq TLY (cdr(assoc 42 blm)))(setq dmo (getpoint "\n Pick diem moc : "))(setq cdm (getreal "\n Nhap cao do cua diem moc :"))(if (= cdm 0) (setq cd (strcat "%%p" (rtos cdm 2 3))))(if (> cdm 0) (setq cd (strcat "+" (rtos cdm 2 3))))(if (< cdm 0) (setq cd (rtos cdm 2 3)))(command "insert" blname dmo TLX TLY "0" cd)(setq dmoc dmo)(while (setq dm (getpoint dmoc "\n Pick diem tiep theo :"))(setq cdmi (* (- (cadr dm) cdm (cadr dmo)) tlv))(if (= cdmi 0) (setq cdi (strcat "%%p" (rtos cdmi 2 3))))(if (> cdmi 0) (setq cdi (strcat "+" (rtos cdmi 2 3))))(if (< cdmi 0) (setq cdi (rtos cdmi 2 3)))(command "insert" blname dm TLX TLY "0" cdi)(setq dmoc dm))(setvar "Dimzin" oldim)(princ))

Lisp này của bác rất tuyệt. Mong bác chỉnh sửa thêm cho lisp hoàn thiện:

- Lỗi gặp phải là cao độ điểm mốc khác 0 thì lisp tính phần cao độ tại các điểm thấp hơn chưa đúng. (Thay vì trừ đi khoảng cách giữa 2 điểm thì nó lại lấy cao độ mốc cộng thêm vào và điền dấu trừ phía trước, mặc dù cao độ mốc là 5.00 và khoảng cách giảm xuống là 2.00: Kết quả đúng phải là +3.00 nhưng lisp tính là: -7.00)

- Khi lựa chọn cao độ mốc, thêm chức năng chọn text trực tiếp trên bản vẽ (Hiện tại chỉ có 1 lựa chọn nhập số bằng tay)

Thanks

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 dc của ketxu mình cũng sưu tầm nó lâu rùi. Lisp đó rất chuẩn. Nhưng công việc mình đang cần theo dạng của bác Tuenv như trên, lựa chọn vị trí điểm mốc, chọn cao độ mốc là text trên bản vẽ (hoặc nhập tay vào) ==> chọn vị trí điểm mới và chèn blog cao độ vào đó. (mà không cần chèn blog cao độ vào điểm mố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

Mình thấy lisp này rất hay, tuy nhiên có nhược điểm là khi "nhao cao do diem moc" nếu là 0.00 thì lisp chạy chính xác, nhưng nếu nhập con số khác 0, thì nó hiểu bị ngược. ví dụ tôi nhập 3 thì khi move lên 1 đơn vị kết quả sẽ là -2 (nếu đúng là 4), nếu tôi nhập -1 thì khi tôi move xuống 1 đơn vị thì kết quả là 0 (nếu đúng là -2). Bạn Tue_NV sửa lại chỗ này giúp mình, cám ơn.

Lisp này của bác rất tuyệt. Mong bác chỉnh sửa thêm cho lisp hoàn thiện:

- Lỗi gặp phải là cao độ điểm mốc khác 0 thì lisp tính phần cao độ tại các điểm thấp hơn chưa đúng. (Thay vì trừ đi khoảng cách giữa 2 điểm thì nó lại lấy cao độ mốc cộng thêm vào và điền dấu trừ phía trước, mặc dù cao độ mốc là 5.00 và khoảng cách giảm xuống là 2.00: Kết quả đúng phải là +3.00 nhưng lisp tính là: -7.00)

- Khi lựa chọn cao độ mốc, thêm chức năng chọn text trực tiếp trên bản vẽ (Hiện tại chỉ có 1 lựa chọn nhập số bằng tay)

Thanks

Nhờ các Bác viết hộ lisp thước cao độ như hình vẽ trên :http://www.cadviet.c...66_drawing2.dwg

Tue_NV chỉnh sửa lại Lisp

(defun c:dcd(/ tlv blm blname dmo cdm cd dm cdmi dmoc bl)
(setvar "attreq" 1)
(setvar "cmdecho" 0)
(setq oldim (getvar "DimZin"))
(setvar "Dimzin" 0)
(setq tlv (/ 1 (getreal "\n Nhap ti le ve : 1/")))
(setq bl (car(entsel "\n Pick chon Block mau / Text mau :")))
(setq blm (entget bl))
(setq dmo (getpoint "\n Pick diem moc : "))

(setq cdm (getreal "\n Nhap cao do cua diem moc \ Enter pick text cao do : "))
(if (null cdm) (setq cdm (atof (cdr(assoc 1 (entget(car (entsel "pick text cao do : ")))))))  )
(if cdm (progn
(if (= cdm 0) (setq cd (strcat "%%p" (rtos cdm 2 3))))
(if (> cdm 0) (setq cd (strcat "+" (rtos cdm 2 3))))
(if (< cdm 0) (setq cd (rtos cdm 2 3)))
(command "copy" bl "" "_non" (cdr(assoc 10 blm)) "_non" dmo)
(if (and (wcmatch (cdr(assoc 0 (entget (entlast)))) "INSERT") (= (cdr(assoc 66 (entget (entlast)))) 1))
	(setq el (entget (entnext (entlast)) )))
(if (wcmatch (cdr(assoc 0 (entget (entlast)))) "TEXT") (setq el (entget (entlast))) )
(entmod (subst (cons 1 cd) (assoc 1 el) el))
(setq dmoc dmo)
(while (setq dm (getpoint dmoc "\n Pick diem tiep theo :"))
(if (> (cadr dm) (cadr dmo))  (setq cdmi (+ (* (- (cadr dm) (cadr dmo)) tlv) cdm) ) )
(if (<= (cadr dm) (cadr dmo))  (setq cdmi (- cdm (* (- (cadr dmo) (cadr dm)) tlv) ) ) )
(if (= cdmi 0) (setq cdi (strcat "%%p" (rtos cdmi 2 3))))
(if (> cdmi 0) (setq cdi (strcat "+" (rtos cdmi 2 3))))
(if (< cdmi 0) (setq cdi (rtos cdmi 2 3)))
(command "copy" bl "" "_non" (cdr(assoc 10 blm)) "_non" dm)
(if (and (wcmatch (cdr(assoc 0 (entget (entlast)))) "INSERT") (= (cdr(assoc 66 (entget (entlast)))) 1))
	(setq el (entget (entnext (entlast)) )))
(if (wcmatch (cdr(assoc 0 (entget (entlast)))) "TEXT") (setq el (entget (entlast))) )
(entmod (subst (cons 1 cdi) (assoc 1 el) el))
(setq dmoc dm)
)
(setvar "Dimzin" oldim)
))
(princ)
)

Có thể sử dụng với Text

  • 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
Tue_NV chỉnh sửa lại Lisp
 (defun c:dcd(/ tlv blm blname dmo cdm cd dm cdmi dmoc bl) (setvar "attreq" 1) (setvar "cmdecho" 0) (setq oldim (getvar "DimZin")) (setvar "Dimzin" 0) (setq tlv (/ 1 (getreal "\n Nhap ti le ve : 1/"))) (setq bl (car(entsel "\n Pick chon Block mau / Text mau :"))) (setq blm (entget bl)) (setq dmo (getpoint "\n Pick diem moc : ")) (setq cdm (getreal "\n Nhap cao do cua diem moc \ Enter pick text cao do : ")) (if (null cdm) (setq cdm (atof (cdr(assoc 1 (entget(car (entsel "pick text cao do : "))))))) ) (if cdm (progn (if (= cdm 0) (setq cd (strcat "%%p" (rtos cdm 2 3)))) (if (> cdm 0) (setq cd (strcat "+" (rtos cdm 2 3)))) (if (< cdm 0) (setq cd (rtos cdm 2 3))) (command "copy" bl "" "_non" (cdr(assoc 10 blm)) "_non" dmo) (if (and (wcmatch (cdr(assoc 0 (entget (entlast)))) "INSERT") (= (cdr(assoc 66 (entget (entlast)))) 1)) (setq el (entget (entnext (entlast)) ))) (if (wcmatch (cdr(assoc 0 (entget (entlast)))) "TEXT") (setq el (entget (entlast))) ) (entmod (subst (cons 1 cd) (assoc 1 el) el)) (setq dmoc dmo) (while (setq dm (getpoint dmoc "\n Pick diem tiep theo :")) (if (> (cadr dm) (cadr dmo)) (setq cdmi (+ (* (- (cadr dm) (cadr dmo)) tlv) cdm) ) ) (if (<= (cadr dm) (cadr dmo)) (setq cdmi (- cdm (* (- (cadr dmo) (cadr dm)) tlv) ) ) ) (if (= cdmi 0) (setq cdi (strcat "%%p" (rtos cdmi 2 3)))) (if (> cdmi 0) (setq cdi (strcat "+" (rtos cdmi 2 3)))) (if (< cdmi 0) (setq cdi (rtos cdmi 2 3))) (command "copy" bl "" "_non" (cdr(assoc 10 blm)) "_non" dm) (if (and (wcmatch (cdr(assoc 0 (entget (entlast)))) "INSERT") (= (cdr(assoc 66 (entget (entlast)))) 1)) (setq el (entget (entnext (entlast)) ))) (if (wcmatch (cdr(assoc 0 (entget (entlast)))) "TEXT") (setq el (entget (entlast))) ) (entmod (subst (cons 1 cdi) (assoc 1 el) el)) (setq dmoc dm) ) (setvar "Dimzin" oldim) )) (princ) ) 

Có thể sử dụng với Text

E tìm mãi ko ra. Không biết dòng nào của bác Tuenv làm cho blog insert ra có giá trị đều giống blog mẫu mà không nhận cao độ. Hic... Còn phần mở rộng thêm cho text thì oki rùi.

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  

×