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

[Yêu cầu] Lisp chia 1 đoạn thẳng thành các đoạn nhỏ, nằm trên các layer khác nhau

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

Em có một vấn đề như sau:

Có một số các đường thẳng nằm trong cùng một layer (chẳng hạn Layer0):

1-4.jpg

 

Em muốn chia mỗi đoạn thẳng trong số các đoạn thẳng này thành 3 đoạn thẳng nhỏ : 2 đoạn ở hai đầu có độ dài bằng nhau và bằng a (chẳng hạn a=100) và chúng cùng thuộc một layer (chẳng hạn Layer1), còn đoạn thẳng ở giữa thì chuyển thành ở layer khác (chẳng hạn Layer2):

2-4.jpg

 

Em muốn viết một lisp, trong đó người dùng được chỉ định các thông số a (độ dài 2 đoạn 2 bên), Layer1 và Layer2. Mong cả nhà giúp đỡ!

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 có một vấn đề như sau:

Có một số các đường thẳng nằm trong cùng một layer ...

 

Em muốn chia mỗi đoạn thẳng trong số các đoạn thẳng này thành 3 đoạn thẳng nhỏ :

 

Em muốn viết một lisp, trong đó người dùng được chỉ định các thông số a (độ dài 2 đoạn 2 bên), Layer1 và Layer2. Mong cả nhà giúp đỡ!

Vậy rốt cục là bạn muốn tự viết nhưng thiếu ý tưởng hay muốn nhờ người khác viế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

Vậy rốt cục là bạn muốn tự viết nhưng thiếu ý tưởng hay muốn nhờ người khác viết ? :)

Em muốn tự viết nhưng khó khăn ở một số điểm sau:

+) Em không biết làm thế nào để khi sử dụng mình có thể chọn các layer

+) Cắt các đoạn thẳng như thế nào (dùng lệnh break hay là theo tọa độ điểm)

+) Chuyển một đoạn thẳng từ một layer này sang một layer khác

 

Vì em còn biết ít lisp quá, mà đang cần gấp, anh nào tiện viết hộ em thì càng tốt ạ :D

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 muốn tự viết nhưng khó khăn ở một số điểm sau:

+) Em không biết làm thế nào để khi sử dụng mình có thể chọn các layer

+) Cắt các đoạn thẳng như thế nào (dùng lệnh break hay là theo tọa độ điểm)

+) Chuyển một đoạn thẳng từ một layer này sang một layer khác

 

Vì em còn biết ít lisp quá, mà đang cần gấp, anh nào tiện viết hộ em thì càng tốt ạ :D

Đỏ : có nhiều cách để gán 1 đối tượng theo 1 layer nào đó :

- Có thể dùng (setvar "clayer" "tên layer") -> Kể từ sau bước này các đối tượng tạo mới có layer mặc định là "tên layer" (thông thường)

- Có thể tạo đối tượng trước rồi dùng lệnh Change với Properties là Layer, Object là last

- Dùng entmake, entmakex tạo đối tượng theo 1 layer từ đầu

..

Xanh : Cắt cũng vẫn phải cung cấp tọa độ cho điểm cắt. Thường thì không dùng cách cắt vì khó xử lý các đổi tượng sau khi cắt.Do đối tượng bạn yêu cầu là Line, nên có thể vẽ lại Line đó bằng 3 đoạn

 

P/S : Muộn rồi, mình viết giùm bạn cái khung thô, còn các phần kiểm tra lỗi như : không có layer,a lớn hơn Line.. bạn tự lo nhé

(defun c:test()
(setq la1 (getstring "\nLayer 1 :")
la2 (getstring "\nLayer 2 :")
a (getreal "\n a :"))
(prompt "\nChon Line")
(foreach ent  (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget '((0 . "LINE"))))))
	(setq 1st (acet-dxf 10 (entget ent)) 2nd (acet-dxf 11 (entget ent)))
	(Line 1st (setq tmp1 (polar 1st (angle 1st 2nd) a)) la1)
	(Line 2nd (setq tmp2 (polar 2nd (angle 2nd 1st) a)) la1)
	(Line tmp1 tmp2 la2)
	(entdel ent)
)
)
(defun Line (p1 p2 Lay)(entmakex (list (cons 0 "LINE")(cons 10 p1)(cons 11 p2)(cons 8 Lay))))

  • 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

Thay đổi từ anh sang bạn!

Quan là lời cảm ơn chân thành, còn anh hay bạn thì cũng tương đối thôi mà :D

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  

×