Chuyển đến nội dung
Diễn đàn CADViet
Xuân Lộc

Nhờ các cô chú, anh chị hỗ trợ viết 1 lisp đơn giản theo đúng tỉ lệ có sẵn ạ

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

Em muốn mọi .người hỗ trợ em viết lisp chọn điểm đầu, điểm cuối là ra nét theo như bản vẽ em gửi đính kèm ạ. Theo tỉ lệ dim trong bản vẽ. Mong cô chú, anh chị giúp đỡ. 2 hình này thì tạo 2 lệnh cho em ạ
https://www.dropbox.com/scl/fi/h6finpfzay6tuuvrsxkme/Drawing1.dwg?rlkey=56szggozd51ctbdsmv0797sgm&dl=0

https://www.dropbox.com/scl/fi/h6finpfzay6tuuvrsxkme/Drawing1.dwg?rlkey=56szggozd51ctbdsmv0797sgm&dl=0

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 không nên dùng lisp để vẽ, hãy dùng dynamic block để chèn thì hơn. Dùng một grip align và một linear stretch action là ok.

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
1 giờ} trướ}c, cuongtk2 đã nói:

Bạn không nên dùng lisp để vẽ, hãy dùng dynamic block để chèn thì hơn. Dùng một grip align và một linear stretch action là ok.

xài block thì nó ko căn được tim đối tượng được ạ. Nếu dùng lisp chọn điểm đầu, điểm cuối thì nó sẽ căn giữa luôn và đỡ phải đi tìm block copy past ạ

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

Nếu bạn chỉ dùng 2 mẫu có kích thước dài 100 units như vậy thì chỉ cần dùng dynamic block có rotate action là ổn. Bởi nó đâu cần tùy biến gì ngoài xoay cho đúng góc điểm đầu và điểm cuối của bạn. Trong block editor chọn Parameter Sets -> Rotation Set để thiết lập núm xoay.

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

- "Theo tỉ lệ dim trong bản vẽ" ý của bạn là giá trị nào?

- "tỉ lệ dim" đó, nó ảnh hưởng ra sao đến các đoạn của Pline kết quả.

- Cái Pline nét cắt ống tròn với các dim có vẻ không liên quan...?

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
15 giờ trước, NTHAHT đã nói:

- "Theo tỉ lệ dim trong bản vẽ" ý của bạn là giá trị nào?

- "tỉ lệ dim" đó, nó ảnh hưởng ra sao đến các đoạn của Pline kết quả.

- Cái Pline nét cắt ống tròn với các dim có vẻ không liên quan...?

Theo mình hiểu thì ý bạn ấy là nếu chọn 2 điểm đầu và cuối có khoảng cách lớn như trong file thì kết quả của hình sẽ tương tự như kích thước trong dim, còn nếu điểm đầu và cuối nhỏ hơn trong file thì các kích thước khác sẽ tự động scale tương ứ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
4 giờ trước, Tap.Ve.Cad đã nói:

Theo mình hiểu thì ý bạn ấy là nếu chọn 2 điểm đầu và cuối có khoảng cách lớn như trong file thì kết quả của hình sẽ tương tự như kích thước trong dim, còn nếu điểm đầu và cuối nhỏ hơn trong file thì các kích thước khác sẽ tự động scale tương ứng.

dạ đú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
Vào lúc 7/10/2025 tại 10:43, Xuân Lộc đã nói:

xài block thì nó ko căn được tim đối tượng được ạ. Nếu dùng lisp chọn điểm đầu, điểm cuối thì nó sẽ căn giữa luôn và đỡ phải đi tìm block copy past 

Xài Block căn tim đối tượng bình thường mà. Chỉ có điều phải tìm block, copy paste thôi.

Tạo block với điểm chèn nằm ở đầu đoạn thẳng, sao cho khi chèn vào là trùng với Point 1. Nắm đầu điểm còn lại xoay + Scale vào point 2 là xong.

Nếu không tạo Block dynamic thì dùng lệnh AL.

Theo tôi bạn tạo Block dynamic rồi dùng lệnh chèn block trong diễn đàn để chèn vào Point 1, còn pick điểm 2 phải thủ cô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

Cái này là để chèn ký hiệu mặt cắt và ký hiệu của cọc khoan nhồi hoặc cắt ống.

 

Riêng nét cắt thì đã có lệnh BRL, theo dim đẹp long lanh luôn.

 

Còn phần ký hiệu cọc khoan nhồi thì tốt nhất là tạo block dynamic với điểm đầu điểm cuối cách nhau 1 đơn vị, dùng dynamic scale. Nếu nhiều cọc thì ta copy sẽ nhanh hơn là việc cứ 1 cọc pick 2 điểm, 1000 cọc pick 2000 điể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ó sưu tầm được lisp vẽ mặt cắt ống bằng SPL nên sửa lại cho bạn dùng thử coi.

Kết thúc lệnh thì không thành 1 polyline được nha (do khả năng có hạn nên chỉ làm được tới đó thôi)

 

(defun c:ot(/ pt1 pt2 pt3 goc kcach bk osm)
(setq    osm    (getvar "osmode"))
(setq pt1 (getpoint "Diem dau : "))
(setq pt2 (getpoint "Diem cuoi : " pt1))
(command "osnap" "none")
(setq goc (angle pt1 pt2))
(setq kcach (distance pt1 pt2))
(setq bk (* kcach 0.3))
(setq pt3 (polar pt1 goc (/ kcach 2)))
(command  ".PLINE" pt1 "A" "R" bk pt3 pt2 "")
(command  ".PLINE" pt3 "A" "R" bk pt2 "")
(setvar "osmode" osm)
(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
1 giờ} trướ}c, vietduc147258 đã nói:

Có sưu tầm được lisp vẽ mặt cắt ống bằng SPL nên sửa lại cho bạn dùng thử coi.

Kết thúc lệnh thì không thành 1 polyline được nha (do khả năng có hạn nên chỉ làm được tới đó thôi)

 

(defun c:ot(/ pt1 pt2 pt3 goc kcach bk osm)
(setq    osm    (getvar "osmode"))
(setq pt1 (getpoint "Diem dau : "))
(setq pt2 (getpoint "Diem cuoi : " pt1))
(command "osnap" "none")
(setq goc (angle pt1 pt2))
(setq kcach (distance pt1 pt2))
(setq bk (* kcach 0.3))
(setq pt3 (polar pt1 goc (/ kcach 2)))
(command  ".PLINE" pt1 "A" "R" bk pt3 pt2 "")
(command  ".PLINE" pt3 "A" "R" bk pt2 "")
(setvar "osmode" osm)
(princ)
)

em cảm ơn nhiều, như này quá ổn 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

Sẵn thì làm thêm cho lệnh vẽ Breck Line luôn.

 

(defun c:brl(/ pt1 pt4 pt3 pt5 pt2 pt6 pt3 goc kcach osm)
(setq    osm    (getvar "osmode"))
(setq pt1 (getpoint "Diem dau : "))
(setq pt2 (getpoint "Diem cuoi : " pt1))
(command "osnap" "none")
(setq goc (angle pt1 pt2))
(setq kcach (distance pt1 pt2))
(setq pt3 (polar pt1 goc (* kcach 0.4)))
(setq x (polar pt1 goc (* kcach 0.45)))
(setq pt4 (polar x (+ (/ PI 2) goc) (* kcach 0.15)))
(setq y (polar pt1 goc (* kcach 0.55)))
(setq pt5 (polar y (+ (/ PI 2) goc) (* kcach  -0.15)))
(setq pt6 (polar pt1 goc (* kcach 0.6)))
(command  ".PLINE" pt1 pt3 pt4 pt5 pt6 pt2"")
(setvar "osmode" osm)
(princ)
)

Những lisp dạng này thỉnh thoảng sẽ phát sinh lỗi không hoạt động + thoát lệnh giữa chừng bị lỗi bắt điể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
26 phút trước, vietduc147258 đã nói:

Sẵn thì làm thêm cho lệnh vẽ Breck Line luôn.

 

(defun c:brl(/ pt1 pt4 pt3 pt5 pt2 pt6 pt3 goc kcach osm)
(setq    osm    (getvar "osmode"))
(setq pt1 (getpoint "Diem dau : "))
(setq pt2 (getpoint "Diem cuoi : " pt1))
(command "osnap" "none")
(setq goc (angle pt1 pt2))
(setq kcach (distance pt1 pt2))
(setq pt3 (polar pt1 goc (* kcach 0.4)))
(setq x (polar pt1 goc (* kcach 0.45)))
(setq pt4 (polar x (+ (/ PI 2) goc) (* kcach 0.15)))
(setq y (polar pt1 goc (* kcach 0.55)))
(setq pt5 (polar y (+ (/ PI 2) goc) (* kcach  -0.15)))
(setq pt6 (polar pt1 goc (* kcach 0.6)))
(command  ".PLINE" pt1 pt3 pt4 pt5 pt6 pt2"")
(setvar "osmode" osm)
(princ)
)

Những lisp dạng này thỉnh thoảng sẽ phát sinh lỗi không hoạt động + thoát lệnh giữa chừng bị lỗi bắt điểm

em cảm ơn ạ, lisp ra đúng ý khỏi chê luô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
Vào lúc 9/10/2025 tại 14:43, vietduc147258 đã nói:

Có sưu tầm được lisp vẽ mặt cắt ống bằng SPL nên sửa lại cho bạn dùng thử coi.

Kết thúc lệnh thì không thành 1 polyline được nha (do khả năng có hạn nên chỉ làm được tới đó thôi)

 

Sửa lại chút cho kết thúc lệnh thành Polyline rồi nhé @Xuân Lộc

(defun c:ot(/ pt1 pt2 pt3 goc kcach bk osm dt1 dt2)
(setq osm	(getvar "osmode"))
	(setq pt1 (getpoint "diem dau : "))
	(setq pt2 (getpoint "diem cuoi : " pt1))
(setvar "osmode" 0)
	(setq goc (angle pt1 pt2))
	(setq kcach (distance pt1 pt2))
	(setq bk (* kcach 0.3))
	(setq pt3 (polar pt1 goc (/ kcach 2)))
	(command  ".pline" pt1 "a" "r" bk pt3 pt2 "")
		(setq dt1(entlast))
	(command  ".pline" pt3 "a" "r" bk pt1 "")
		(setq dt2(entlast))
	(command ".join" dt1 dt2 "")
(setvar "osmode" osm)
(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
20 giờ trước, vietduc147258 đã nói:

Sửa lại chút cho kết thúc lệnh thành Polyline rồi nhé @Xuân Lộc


(defun c:ot(/ pt1 pt2 pt3 goc kcach bk osm dt1 dt2)
(setq osm	(getvar "osmode"))
	(setq pt1 (getpoint "diem dau : "))
	(setq pt2 (getpoint "diem cuoi : " pt1))
(setvar "osmode" 0)
	(setq goc (angle pt1 pt2))
	(setq kcach (distance pt1 pt2))
	(setq bk (* kcach 0.3))
	(setq pt3 (polar pt1 goc (/ kcach 2)))
	(command  ".pline" pt1 "a" "r" bk pt3 pt2 "")
		(setq dt1(entlast))
	(command  ".pline" pt3 "a" "r" bk pt1 "")
		(setq dt2(entlast))
	(command ".join" dt1 dt2 "")
(setvar "osmode" osm)
(princ)
)

 

Em cảm ơn nhiều, nó bị lỗi ; error: malformed list on input khi load lisp

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

×