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

Nhờ các anh (chị) sửa giúp lisp ạ!

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

Em có một lisp có công dụng nối liền các pline bên trái với các pline tương ứng bên phải (ảnh minh hoạ ạ).

Khi dùng lisp thì gắp 1 vấn đề là: thứ tự tạo ra (vẽ) các đường pline sẽ ảnh hưởng đến kết quả mình mong muốn ạ.

Các text (1,2,3,4) thể hiện cho thứ tự tạo ra các pline. khi dùng lisp nó sẽ nối 1-1, 2-2, 3-3, 4-4 (ảnh minh hoạ ạ).
Mong muốn của em là các pline sẽ được nối với nhau lần lượt từ dưới lên trên ạ, cụ thể là 1-3, 2-1, 3-2, 4-4 ạ.

 

Lisp do em cóp nhặt và chỉnh sửa từ các code lisp khác nhau ạ, móng các anh (chị) xem và sửa lại giúp em ạ.
Em cảm ơn ạ!

 

test1.dwg

NOI LIEN PLINE (TE1).lsp

test1.png

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 phải nói cụ thể là pline nối với nhau theo tiêu chí gì, đề bài có sẵn các số 1 2 3 4 không, nếu mà không có và các pline phải nối với nhau theo cách "hợp lý nhất" thì chắc đề bài này không có lời giả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

dạ, các số 1 2 3 4 chỉ là cái mà em thể hiện thứ thự tạo ra các pline thôi ạ.
vì các pline được xếp chồng lên nhau nên em muốn nối theo từng lớp ạ.
em không nghĩ ra đc điều kiện hợp lý và đơn giản để khắc phục việc nối chéo nhau nên nhờ các anh ạ :((

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
46 phút trước, Yud14 đã nói:

dạ, các số 1 2 3 4 chỉ là cái mà em thể hiện thứ thự tạo ra các pline thôi ạ.
vì các pline được xếp chồng lên nhau nên em muốn nối theo từng lớp ạ.
em không nghĩ ra đc điều kiện hợp lý và đơn giản để khắc phục việc nối chéo nhau nên nhờ các anh ạ :((

Vậy giả sử điều kiện của mình là đường nối các pline là đường ngắn nhất thì bạn thử ướm vào các trường hợp bạn hay gặp xem có đúng ko ?

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

Em có một lisp có công dụng nối liền các pline bên trái với các pline tương ứng bên phải (ảnh minh hoạ ạ).

Khi dùng lisp thì gắp 1 vấn đề là: thứ tự tạo ra (vẽ) các đường pline sẽ ảnh hưởng đến kết quả mình mong muốn ạ.

Các text (1,2,3,4) thể hiện cho thứ tự tạo ra các pline. khi dùng lisp nó sẽ nối 1-1, 2-2, 3-3, 4-4 (ảnh minh hoạ ạ).
Mong muốn của em là các pline sẽ được nối với nhau lần lượt từ dưới lên trên ạ, cụ thể là 1-3, 2-1, 3-2, 4-4 ạ.

Lisp do em cóp nhặt và chỉnh sửa từ các code lisp khác nhau ạ, móng các anh (chị) xem và sửa lại giúp em ạ.
Em cảm ơn ạ!

test1.dwg

NOI LIEN PLINE (TE1).lsp

 

Khi chọn nhóm đối tượng 1 và nhóm đối tượng 2 bạn chọn bằng "fence" theo cùng hướng là được.

  • Like 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
13 giờ trước, Duong Nhat Duy đã nói:

Vậy giả sử điều kiện của mình là đường nối các pline là đường ngắn nhất thì bạn thử ướm vào các trường hợp bạn hay gặp xem có đúng ko ?

dạ. em cũng nghĩ đến trường hợp này, nhưng gặp 2 vấn đề là có trường hợp pline cùng lớp đó chưa chắc đã là ngắn nhất ạ! cái khó hơn là viết đc code lisp cho cái điều kiện đó ạ! :((
(em thử theo cách của Bác Doan Van Hạ đã thành cô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
12 giờ trước, Doan Van Ha đã nói:

Khi chọn nhóm đối tượng 1 và nhóm đối tượng 2 bạn chọn bằng "fence" theo cùng hướng là được.

Cháu đã thử và thành công rồi ạ! 
Bác cho cháu hỏi thêm chút là có viết cái thao tác "fence" thành code được không ạ?
Giống như mình làm với (command "erase" "f") ý ạ!

 

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
11 phút trước, Yud14 đã nói:

Cháu đã thử và thành công rồi ạ! 
Bác cho cháu hỏi thêm chút là có viết cái thao tác "fence" thành code được không ạ?
Giống như mình làm với (command "erase" "f") ý ạ!

 

Được, nhưng tôi không ngồi máy. Nhờ người khác giúp cho.

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

Code lấy tập hợp điểm bên phải ss1 và sắp xếp từ trên xuống:

(repeat (sslength ss1)
    (setq e (vlax-ename->vla-object (ssname ss1 giaso)))
    (setq pd (vlax-curve-getStartPoint e))
    (setq pc (vlax-curve-getEndPoint e))
    (setq p (if (< (car pd) (car pc)) pc pd))
    (setq list1 (cons p list1))
    (setq giaso (1+ giaso))
)
(setq list1 (vl-sort list1(function (lambda (x1 x2)(> (cadr x1) (cadr x2)) ) ) ))

Bạn tự viết cho ss2 rồi nối lại

  • Like 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
57 phút trước, Doan Van Ha đã nói:

Được, nhưng tôi không ngồi máy. Nhờ người khác giúp cho.

vâng ạ! cháu cảm ơn ạ! <3

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
46 phút trước, ndtnv đã nói:

Code lấy tập hợp điểm bên phải ss1 và sắp xếp từ trên xuống:

(repeat (sslength ss1)
    (setq e (vlax-ename->vla-object (ssname ss1 giaso)))
    (setq pd (vlax-curve-getStartPoint e))
    (setq pc (vlax-curve-getEndPoint e))
    (setq p (if (< (car pd) (car pc)) pc pd))
    (setq list1 (cons p list1))
    (setq giaso (1+ giaso))
)
(setq list1 (vl-sort list1(function (lambda (x1 x2)(> (cadr x1) (cadr x2)) ) ) ))

Bạn tự viết cho ss2 rồi nối lại

Em đã thử và thành công rồi ạ! 
Cái code này của anh dùng luôn cho cả line và spline luôn. 
Em 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

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

×