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

Nhờ viết Lisp thêm các vertex tại điểm giao giữa đường pline và các đường khác cắt qua nó

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

Nhờ ae viết giúp 1 lisp thêm các vertex tại điểm giao giữa đường pline (màu đỏ) và các đường khác cắt qua nó (màu vàng) bằng cách chọn đường Pline (màu đỏ) như hình. Đường pline ban đầu có 6 vertex từ 1-6, đường pline sau khi thêm có 12 vertex từ 1-12 như file đính kèm. Lưu ý đường pline gồm các đoạn thẳng và cung tròn, sau khi thêm vertex thì đường pline vẫn giữ nguyên hì nh dạng, đặc biệt là các cung tròn. Trân trọng cảm ơn!

Drawing1 - Copy.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

Lâu không viết lisp nên kỹ năng giảm đáng kể. Nhờ mấy con bot thì toàn bị ngụy tạo thông tin. Nhìn code rất đẹp nhưng chỉ là rác. Cuối cùng cũng phải tự viết.

;; viet boi HungmanhCuong CadViet
;; tel : 0903 492 234
;; date 10-6-2025
;; 
(defun c:plineV	(/ pline ls ss n cvs plineObj i objVLA pt param k newVertex )  

  (setq pline (car (entsel "\nChon pline")))

  (setq plineget (entget pline)
	ls (list))
  (foreach item1 plineget
	  (if (= (car item1) 10) (setq ls (append ls (list(cdr item1))))
	    )
	  )  
  
  (setq ss (ssget "_F" ls '(( 0 . "LINE"))));; chon cac line voi kieu chon fence
  (setq n (sslength ss))
  (setq cvs (ACET-SS-TO-LIST ss))
  (setq plineObj (vlax-ename->vla-object pline))
  (setq	i 0
	n (length cvs)
  )
  (while (< i n)
    (progn
      (setq objVLA (vlax-ename->vla-object (nth i cvs)))
      (setq
	pt (vlax-invoke plineObj 'IntersectWith objVLA acExtendNone)
      )
	
	
      (setq param (vlax-curve-getparamatpoint plineObj pt))
      (setq k (+ 1 (fix param)))
      (setq newVertex (vlax-make-safearray vlax-vbDouble '(0 . 1)))

      (vlax-safearray-fill newVertex (list (car pt) (cadr pt)))
      (vla-AddVertex plineObj k newVertex)
					
    )
    (setq i (1+ i))
  )					;while
)

 

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

Lâu không viết lisp nên kỹ năng giảm đáng kể. Nhờ mấy con bot thì toàn bị ngụy tạo thông tin. Nhìn code rất đẹp nhưng chỉ là rác. Cuối cùng cũng phải tự viết.


;; viet boi HungmanhCuong CadViet
;; tel : 0903 492 234
;; date 10-6-2025
;; 
(defun c:plineV	(/ pline ls ss n cvs plineObj i objVLA pt param k newVertex )  

  (setq pline (car (entsel "\nChon pline")))

  (setq plineget (entget pline)
	ls (list))
  (foreach item1 plineget
	  (if (= (car item1) 10) (setq ls (append ls (list(cdr item1))))
	    )
	  )  
  
  (setq ss (ssget "_F" ls '(( 0 . "LINE"))));; chon cac line voi kieu chon fence
  (setq n (sslength ss))
  (setq cvs (ACET-SS-TO-LIST ss))
  (setq plineObj (vlax-ename->vla-object pline))
  (setq	i 0
	n (length cvs)
  )
  (while (< i n)
    (progn
      (setq objVLA (vlax-ename->vla-object (nth i cvs)))
      (setq
	pt (vlax-invoke plineObj 'IntersectWith objVLA acExtendNone)
      )
	
	
      (setq param (vlax-curve-getparamatpoint plineObj pt))
      (setq k (+ 1 (fix param)))
      (setq newVertex (vlax-make-safearray vlax-vbDouble '(0 . 1)))

      (vlax-safearray-fill newVertex (list (car pt) (cadr pt)))
      (vla-AddVertex plineObj k newVertex)
					
    )
    (setq i (1+ i))
  )					;while
)

 

Nếu đã biết dot net thì cần gì lisp nữa bác. Lisp làm được thì dot net làm được, còn dot net làm được chưa chắc lisp làm được. Vậy thì đơn giản ta dùng 1 món thô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
1 giờ} trướ}c, amateurday đã nói:

Nếu đã biết dot net thì cần gì lisp nữa bác. Lisp làm được thì dot net làm được, còn dot net làm được chưa chắc lisp làm được. Vậy thì đơn giản ta dùng 1 món thôi.

Đúng là như vậy, anh phải viết dll cho cùng một nhiệm vụ này:

1. Dùng autolisp : Code mất 2h mà chưa hoàn thành nhiệm vụ (phình tại arc segment ). Ưu điểm : Người dùng có thể tùy chỉnh code. Khuyết điểm: khó kiểm soát lỗi trong lúc code.

2. Dùng dotNet : Code trong 5 phút với copilot, thực hiện đúng nhiệm vụ. Ưu điểm: tốc độ của lệnh nhanh. Khuyết điểm: phụ thuộc vào một số version AutoCad nhất định, user không can thiệp vào code được (VD: đổi tên lệnh).

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

Lâu không viết lisp nên kỹ năng giảm đáng kể. Nhờ mấy con bot thì toàn bị ngụy tạo thông tin. Nhìn code rất đẹp nhưng chỉ là rác. Cuối cùng cũng phải tự viết.


;; viet boi HungmanhCuong CadViet
;; tel : 0903 492 234
;; date 10-6-2025
;; 
(defun c:plineV	(/ pline ls ss n cvs plineObj i objVLA pt param k newVertex )  

  (setq pline (car (entsel "\nChon pline")))

  (setq plineget (entget pline)
	ls (list))
  (foreach item1 plineget
	  (if (= (car item1) 10) (setq ls (append ls (list(cdr item1))))
	    )
	  )  
  
  (setq ss (ssget "_F" ls '(( 0 . "LINE"))));; chon cac line voi kieu chon fence
  (setq n (sslength ss))
  (setq cvs (ACET-SS-TO-LIST ss))
  (setq plineObj (vlax-ename->vla-object pline))
  (setq	i 0
	n (length cvs)
  )
  (while (< i n)
    (progn
      (setq objVLA (vlax-ename->vla-object (nth i cvs)))
      (setq
	pt (vlax-invoke plineObj 'IntersectWith objVLA acExtendNone)
      )
	
	
      (setq param (vlax-curve-getparamatpoint plineObj pt))
      (setq k (+ 1 (fix param)))
      (setq newVertex (vlax-make-safearray vlax-vbDouble '(0 . 1)))

      (vlax-safearray-fill newVertex (list (car pt) (cadr pt)))
      (vla-AddVertex plineObj k newVertex)
					
    )
    (setq i (1+ i))
  )					;while
)

 

đúng là bị phình tại arc segment bác ạ, có cách nào khắc phục không bá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 không khắc phục được, đó là lý do có bản dll bên dưới. Nếu bạn rất cần với lisp, mình sẽ đầu tư 1 ngày công để làm việ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
Vào lúc 10/6/2025 tại 22:47, cuongtk2 đã nói:

Đúng là như vậy, anh phải viết dll cho cùng một nhiệm vụ này:

1. Dùng autolisp : Code mất 2h mà chưa hoàn thành nhiệm vụ (phình tại arc segment ). Ưu điểm : Người dùng có thể tùy chỉnh code. Khuyết điểm: khó kiểm soát lỗi trong lúc code.

2. Dùng dotNet : Code trong 5 phút với copilot, thực hiện đúng nhiệm vụ. Ưu điểm: tốc độ của lệnh nhanh. Khuyết điểm: phụ thuộc vào một số version AutoCad nhất định, user không can thiệp vào code được (VD: đổi tên lệnh).

5 phút ?! bạn có nói quá ko vậy!:-)

 

Với Arc segment, sử dụng cặp GetBulge/SetBulge sẽ giải quyết đc vấn đề.

  • 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

@gia_bachTôi thừa nhận là mất khoảng 15 -20 phút vì đã thử code lại để xem nó mất bao lâu.

Câu nói hơi ẩu vì thấy code rất nhanh nên nghĩ là nó mất có 5 phút. :-) . Hoàn toàn mất khái niệm về thời gian.

 

 

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

Với Arc segment, sử dụng cặp GetBulge/SetBulge sẽ giải quyết đc vấn đề.

Đúng vậy bác! Vấn đề ở đây là phải tính toán lại và mới giá trị Bulge.

image.thumb.png.8d72a6ce89c7c5c29a10d6b7967be8c2.png

Mình thử tham gia 1 lisp: https://drive.google.com/file/d/1WNbovt7Eh-nGYz9FrzgrJGyKyZEke_8e/view?usp=sharing

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

Đúng vậy bác! Vấn đề ở đây là phải tính toán lại và mới giá trị Bulge.

image.thumb.png.8d72a6ce89c7c5c29a10d6b7967be8c2.png

Mình thử tham gia 1 lisp: https://drive.google.com/file/d/1WNbovt7Eh-nGYz9FrzgrJGyKyZEke_8e/view?usp=sharing

thanks bạn nhưng bạn có thể chia sẻ file. lsp cho mình được không? xin 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

@trieubbBạn tự đừng đánh giá cao bản thân quá rồi, bọn mình viết để giải trí nhu cầu giải trí của bản thân như chơi game vậy thôi. Có lệnh dùng là tốt rồi. Đừng nghĩ bọn này là chatbot.

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

@trieubbBạn tự đừng đánh giá cao bản thân quá rồi, bọn mình viết để giải trí nhu cầu giải trí của bản thân như chơi game vậy thôi. Có lệnh dùng là tốt rồi. Đừng nghĩ bọn này là chatbot.

Đồng ý với bá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

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

×