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

[Yêu cầu] Viết lisp vẽ 1 đường Line có ghi luôn kích thước của Line đó

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

hiện mình vừa vẽ 1 đường thẳng vừa đo kích thước rất mất time

bạn nào biết viết lisp viết cho mình 1 lisp chỉ cần vẽ đường thẳng thui mà có luôn kích thước ở đó

hộ mình nha . Thank

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ện mình vừa vẽ 1 đường thẳng vừa đo kích thước rất mất time

bạn nào biết viết lisp viết cho mình 1 lisp chỉ cần vẽ đường thẳng thui mà có luôn kích thước ở đó

hộ mình nha . Thank

Y/c của bạn không khó, nhưng nếu bạn nói rõ hơn thì sẽ dễ viết, chứ viết cho trường hợp tổng quát thì hơi rắc rối, mà sử dụng cũng nhiêu khê. Cụ thể:

- Vị trí của text thể hiện kích thước sẽ nằm ở đâu trên line, height+width+font+layer+v.v... của text như thế nào, phương của nó, canh lề của nó.v.v và v.v...

Thân thươ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

Mình đề xuất là dùng dim hiện hành để đo. Lisp có lựa chọn và mặc định nếu người dùng không thay đổi hai giá trị Phía đặt dim và khoảng cách so với đường thẳ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

Y/c của bạn không khó, nhưng nếu bạn nói rõ hơn thì sẽ dễ viết, chứ viết cho trường hợp tổng quát thì hơi rắc rối, mà sử dụng cũng nhiêu khê. Cụ thể:

- Vị trí của text thể hiện kích thước sẽ nằm ở đâu trên line, height+width+font+layer+v.v... của text như thế nào, phương của nó, canh lề của nó.v.v và v.v...

Thân thương!

 

-???...liên quan đến nhiều vấn đề vậy hả bạn ?. Text cao 4mm và song song với line cách line 1,5mm, font +layer thì tự chọn đc ko nếu ko thì cho về 1font và 1 layer . Mình ko cần đường phương , canh lề ...vv bỏ hết đi , để mỗi số chiều dài của line thui

Ah còn nữa nếu mình muốn thay đổi chiều dài line thì kích thước cũng thay đổi theo ( nếu đc thì càng tốt)

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/c của bạn không khó, nhưng nếu bạn nói rõ hơn thì sẽ dễ viết, chứ viết cho trường hợp tổng quát thì hơi rắc rối, mà sử dụng cũng nhiêu khê. Cụ thể:

- Vị trí của text thể hiện kích thước sẽ nằm ở đâu trên line, height+width+font+layer+v.v... của text như thế nào, phương của nó, canh lề của nó.v.v và v.v...

Thân thương!

 

-???...liên quan đến nhiều vấn đề vậy hả bạn ?. Text cao 4mm và song song với line cách line 1,5mm, font +layer thì tự chọn đc ko nếu ko thì cho về 1font và 1 layer . Mình ko cần đường phương , canh lề ...vv bỏ hết đi , để mỗi số chiều dài của line thui

Ah còn nữa nếu mình muốn thay đổi chiều dài line thì kích thước cũng thay đổi theo ( nếu đc thì càng tốt)

Xem cái này thế nào: Lệnh là LKT


(defun c:lkt ( )
(command "undo" "be")
 (command "-style" "ktdt" "VNI-HELVE" "0" "1" "0" "n" "n")
 (if (null dolora)(setq dolora "4"))
(Setq temp T)
(While temp
(setq a (strcat "\nD lon text hien hanh la (" dolora ") /<Diem dau tien>: "))
(Initget "d D")
(setq str (getpoint a))
(Cond
 ((= str "d") (setq dolora (getstring (strcat"\nDo lon text <" dolora "> :"))))
 ((= str "D") (setq dolora (getstring (strcat"\nDo lon text <" dolora "> :"))))
  (Progn
 (Setq a str)
  (setq temp nil)
 )
)
)

(setq b (getpoint a"\nChon diem tiep theo: "))
(setq luubatdiem (getvar "osmode"))
 (setvar "osmode" 0)
(setq doclora (atof dolora))
(setq gocxeo(angle a B))
(setq daiab (distance a B))
(setq c (polar a gocxeo (/ daiab 2)))
(setq d (polar c (+ gocxeo (/ pi 2)) (/ doclora 4)))

(command ".line" a b "")
(command "text" "j" "c" c doclora b (rtos daiab 2 2) "")
(command ".move" "last" "" c d)
(cond
((> gocxeo (/ pi 2)) (command ".rotate" "last" "" c 180))
)
(setvar "osmode" luubatdiem)
(command "undo" "end")
(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

anh có thể sửa lại lisp sao cho đường dim có đầy đủ đường gióng,đường kéo dài không ah

thank anh

Xem cái này xem: lệnh là LKTD, lisp dùng dim hiện hành để đánh nhé.


(defun c:lktd ( )
(command "undo" "be")
 (if (null dolora)(setq dolora "4"))
(Setq temp T)
(While temp
(setq a (strcat "\nKhoang cach dim hien hanh la (" dolora ") /<Diem dau tien>: "))
(Initget "k K")
(setq str (getpoint a))
(Cond
 ((= str "k") (setq dolora (getstring (strcat"\nKhoang cach dim voi line <" dolora "> :"))))
 ((= str "K") (setq dolora (getstring (strcat"\nKhoang cach dim voi line <" dolora "> :"))))
  (Progn
 (Setq a str)
  (setq temp nil)
 )
)
)

(setq b (getpoint a"\nChon diem tiep theo: "))
(setq luubatdiem (getvar "osmode"))
 (setvar "osmode" 0)
(setq doclora (atof dolora))
(setq gocxeo(angle a B))
(setq daiab (distance a B))
(setq c (polar a gocxeo (/ daiab 2)))
(setq d (polar c (+ gocxeo (/ pi 2)) doclora))

(command ".line" a b "")
(command "DIMALIGNED" a b d)
(cond
((> gocxeo (/ pi 2)) (command ".rotate" "last" "" c 180))
)
(setvar "osmode" luubatdiem)
(command "undo" "end")
(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 có thể thêm chức năng đường Polyline nữa được không . Cám ơn bạn

Thêm vào cái trên hay cái dướ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

Bạn thêm vào code dưới nhé...

Cái này thì sao.

Lệnh: PLKT

(defun c:plkt ( )
(command "undo" "be")
 (if (null dolora)(setq dolora "4"))
(Setq temp T)
(While temp
(setq a (strcat "\nKhoang cach dim hien hanh la (" dolora ") /<Diem dau tien>: "))
(Initget "k K")
(setq str (getpoint a))
(Cond
 ((= str "k") (setq dolora (getstring (strcat"\nKhoang cach dim voi line <" dolora "> :"))))
 ((= str "K") (setq dolora (getstring (strcat"\nKhoang cach dim voi line <" dolora "> :"))))
  (Progn
 (Setq a str)
  (setq temp nil)
 )
)
)

(setq b (getpoint a"\nChon diem tiep theo: "))
(setq luubatdiem (getvar "osmode"))
 (setvar "osmode" 0)
(setq doclora (atof dolora))
(setq gocxeo(angle a B))
(setq daiab (distance a B))
(setq c (polar a gocxeo (/ daiab 2)))
(setq d (polar c (+ gocxeo (/ pi 2)) doclora))

(command ".pline" a b "")
(setq plhoinay (entlast))
(command "DIMALIGNED" a b d)
(cond
((> gocxeo (/ pi 2)) (command ".rotate" "last" "" c 180))
)
(setq a B)
(setvar "osmode" luubatdiem)
(While (setq b (getpoint a"\nChon diem tiep theo: <Enter de ket thuc> "))
(setq luubatdiem (getvar "osmode"))
 (setvar "osmode" 0)
(setq doclora (atof dolora))
(setq gocxeo(angle a B))
(setq daiab (distance a B))
(setq c (polar a gocxeo (/ daiab 2)))
(setq d (polar c (+ gocxeo (/ pi 2)) doclora))

(command ".pline" a b "")
(command "pedit" "m" "L" plhoinay "" "j" "0" "")
(setq plhoinay (entlast))
(command "DIMALIGNED" a b d)
(cond
((> gocxeo (/ pi 2)) (command ".rotate" "last" "" c 180))
)
(setq a B)
(setvar "osmode" luubatdiem)
)
(command "undo" "end")
(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 Duy ơi em cần cái lisp này lắm nhưng bác có thể thêm vào chức năng chọn độ lớn cho text ghi kích thước không chứ mặc định là 4 thì nhiều khi to khi nhỏ nên bản vẽ không đẹp mà khi hiệu chỉnh lại chữ nhỏ thì khoảng cách chữ với đường thẳng lại xa quá. Hy vọng bác giúp. Chúc bác sức khỏe!

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 Duy ơi em cần cái lisp này lắm nhưng bác có thể thêm vào chức năng chọn độ lớn cho text ghi kích thước không chứ mặc định là 4 thì nhiều khi to khi nhỏ nên bản vẽ không đẹp mà khi hiệu chỉnh lại chữ nhỏ thì khoảng cách chữ với đường thẳng lại xa quá. Hy vọng bác giúp. Chúc bác sức khỏe!

Khi dùng lisp nó hỏi:

D lon text hien hanh la (4) /<Diem dau tien>:

Lúc này bạn không chọn điểm vội và gỏ d enter thì nó cho bạn nhập lại độ lớn text. (lưu ý khoảng cách text và line là 1/4 độ cao text).

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

À đang bị lổi 1/4 nhưng bận quá nên phải tháng nửa mới mò đến. Hay bạn tự mò chút chổ

(cond

((> gocxeo (/ pi 2)) (command ".rotate" "last" "" c 180))

)

xem.

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

À đang bị lổi 1/4 nhưng bận quá nên phải tháng nửa mới mò đến. Hay bạn tự mò chút chổ

(cond

((> gocxeo (/ pi 2)) (command ".rotate" "last" "" c 180))

)

xem.

Hề hề hề,

Tranh thủ lúc bác Duy bận, dây máu ăn phần tí hè????

Thay:

(> gocxeo (/ pi 2))

bằng:

(and (> gocxeo (/ pi 2) (< gocxeo (* (/ pi 2) 3)))

  • 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

Cái này thì sao.

Lệnh: PLKT

(defun c:plkt ( )(command "undo" "be")  (if (null dolora)(setq dolora "4"))(Setq temp T)(While temp(setq a (strcat "\nKhoang cach dim hien hanh la (" dolora ") /<Diem dau tien>: "))(Initget "k K")(setq str (getpoint a))(Cond  ((= str "k") (setq dolora (getstring (strcat"\nKhoang cach dim voi line <" dolora "> :"))))  ((= str "K") (setq dolora (getstring (strcat"\nKhoang cach dim voi line <" dolora "> :"))))   (Progn  (Setq a str)   (setq temp nil)  ))) (setq b (getpoint a"\nChon diem tiep theo: "))(setq luubatdiem (getvar "osmode"))  (setvar "osmode" 0)	(setq doclora (atof dolora))	(setq gocxeo(angle a 
B))

(setq daiab (distance a B))

(setq c (polar a gocxeo (/ daiab 2)))

(setq d (polar c (+ gocxeo (/ pi 2)) doclora))

 

(command ".pline" a b "")

(setq plhoinay (entlast))

(command "DIMALIGNED" a b d)

(cond

((> gocxeo (/ pi 2)) (command ".rotate" "last" "" c 180))

)

(setq a B)

(setvar "osmode" luubatdiem)

(While (setq b (getpoint a"\nChon diem tiep theo: <Enter de ket thuc> "))

(setq luubatdiem (getvar "osmode"))

(setvar "osmode" 0)

(setq doclora (atof dolora))

(setq gocxeo(angle a B))

(setq daiab (distance a B))

(setq c (polar a gocxeo (/ daiab 2)))

(setq d (polar c (+ gocxeo (/ pi 2)) doclora))

 

(command ".pline" a b "")

(command "pedit" "m" "L" plhoinay "" "j" "0" "")

(setq plhoinay (entlast))

(command "DIMALIGNED" a b d)

(cond

((> gocxeo (/ pi 2)) (command ".rotate" "last" "" c 180))

)

(setq a B)

(setvar "osmode" luubatdiem)

)

(command "undo" "end")

(Princ)

)

 

Bác Duy ơi. Bác còn đây ko. Bác hoạc Pro nào đó có thể sửa lại cái Lisp LKT bên trên của bác Duy thành dạng poline như cái lisp này và khi đo thì chữ luôn nằm phía trên của Line hoặc bên trái Line được 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

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

×