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

Cad có lênh này không?

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

2 đường thẳng cắt nhau, mà mún làm đứt liên kết giữa 2 đường thì làm thế nào ạ, k fải lệnh trim??? thank!

 

Trên điễn đàn có lisp chia đất tức là chia đôi hai thửa đất của bác Ssg. hình như cũng có lisp chặt đôi đoạn thẳng, sẽ tìm kiếm giúp bác.

 

Muốn làm đứt liên kết chỉ có cách vẽ đè lên hai đoạn thẳng đó 4 đường line xuất phát từ điểm giao cắt rồi quẳng hai đường thẳng cắt nhau lên trờ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
2 đường thẳng cắt nhau, mà mún làm đứt liên kết giữa 2 đường thì làm thế nào ạ, k fải lệnh trim??? thank!

* Với AutoCAD thì dùng Break at point có trên thanh Modify:

+ Chọn đối tượng

+ Chọn giao điểm

* Với LISP:

+ Lệnh SCISSORS

+ Chọn giao điểm

+ Chọn đối tượng

(Bác nào có thể giúp sửa Lisp này để có thể select được nhiều đối tượng. Thx)

Lisp sưu tầm:

(defun C:SCISSORS( / pt1 bpt1 bpt2 ss1 dist1 ent1 centrecercle)
 ;;make it quiet
 (setvar "cmdecho" 0)

 ;;first, get the breaking point
 (setq pt1 (getpoint "Give me the break point... ")) ;;point where to break

 ;;now, check if there's more than one object under that point
 (setq ss1 (selectfrompoint pt1))

 ;;if there's more than 1 object under point, ask to select, else use existing point
 (if (> (sslength ss1) 1)
  (progn ;;then
  (princ "DISAMBIGUATION : pick the object to break...")
  (setq ent1 (entsel))
  (setq ent1n (car ent1)) ;; e-name of ent1
  (setq bpt1 (cadr ent1)) ;; point on ent to break
  )
  (progn ;;else
  (setq ent1n (ssname ss1 0));;store into an entity (can be useful further)
  (setq bpt1 pt1) ;; point on ent to break
  )
 )

 ;;but if it's a circle (thus usually unbreakable)...
 (if
   (= (cdr (assoc 0 (entget ent1n))) "CIRCLE")
   ;;then replace the circle by 2 arcs joining at the break point
   (progn
    (princ "It's a circle !")
    (setq centrecercle (cdr (assoc 10 (entget ent1n))))
    (command "_arc" "_c" centrecercle pt1 "_a" "180")
    (command "_arc" "_c" centrecercle pt1 "_a" "-180")
    (entdel ent1n)
   )
   ;;else perform a normal break
   (progn
   (command "_break" bpt1 "_f" pt1 pt1)
   )
)

 ;;restore cmdecho
 (setvar "cmdecho" 1)
 ;;end quietly
 (princ)
)

;;--- this function makes a selection set of entities beneath a point 
(defun selectfrompoint (bpt1 / dist1 ss1)
 (setq dist1 (/ (getvar "viewsize") 200)) ;; set a distance equal to 1/200-th of view height
 (setq ss1 ;;select by fence around point
  (ssget "_F"
   (list
   (list (+ (car bpt1) dist1) (+ (cadr bpt1) dist1) 0)
   (list (- (car bpt1) dist1) (- (cadr bpt1) dist1) 0)
   )
  )
 );; setq ss1
 ss1
)

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ới AutoCAD thì dùng Break at point có trên thanh Modify:

+ Chọn đối tượng

+ Chọn giao điểm

* Với LISP:

+ Lệnh SCISSORS

+ Chọn giao điểm

+ Chọn đối tượng

(Bác nào có thể giúp sửa Lisp này để có thể select được nhiều đối tượng. Thx)

Lisp sưu tầm:

(defun C:SCISSORS( / pt1 bpt1 bpt2 ss1 dist1 ent1 centrecercle)
 ;;make it quiet
 (setvar "cmdecho" 0)

 ;;first, get the breaking point
 (setq pt1 (getpoint "Give me the break point... ")) ;;point where to break

 ;;now, check if there's more than one object under that point
 (setq ss1 (selectfrompoint pt1))

 ;;if there's more than 1 object under point, ask to select, else use existing point
 (if (> (sslength ss1) 1)
  (progn ;;then
  (princ "DISAMBIGUATION : pick the object to break...")
  (setq ent1 (entsel))
  (setq ent1n (car ent1)) ;; e-name of ent1
  (setq bpt1 (cadr ent1)) ;; point on ent to break
  )
  (progn ;;else
  (setq ent1n (ssname ss1 0));;store into an entity (can be useful further)
  (setq bpt1 pt1) ;; point on ent to break
  )
 )

 ;;but if it's a circle (thus usually unbreakable)...
 (if
   (= (cdr (assoc 0 (entget ent1n))) "CIRCLE")
   ;;then replace the circle by 2 arcs joining at the break point
   (progn
    (princ "It's a circle !")
    (setq centrecercle (cdr (assoc 10 (entget ent1n))))
    (command "_arc" "_c" centrecercle pt1 "_a" "180")
    (command "_arc" "_c" centrecercle pt1 "_a" "-180")
    (entdel ent1n)
   )
   ;;else perform a normal break
   (progn
   (command "_break" bpt1 "_f" pt1 pt1)
   )
)

 ;;restore cmdecho
 (setvar "cmdecho" 1)
 ;;end quietly
 (princ)
)

;;--- this function makes a selection set of entities beneath a point 
(defun selectfrompoint (bpt1 / dist1 ss1)
 (setq dist1 (/ (getvar "viewsize") 200)) ;; set a distance equal to 1/200-th of view height
 (setq ss1 ;;select by fence around point
  (ssget "_F"
   (list
   (list (+ (car bpt1) dist1) (+ (cadr bpt1) dist1) 0)
   (list (- (car bpt1) dist1) (- (cadr bpt1) dist1) 0)
   )
  )
 );; setq ss1
 ss1
)

Đây là Lisp Tue_nv đã viết và chỉnh sửa lại một chút :

- Lệnh Brt

- Chọn đường cắt bằng cách chọn 2 điểm

- Chọn đối tượng

- Lisp sẽ break tại điểm giao của đường cắt với đối tượng

Giống như cách chọn đối tượng theo kiểu F(Fence)

(Defun c:brt(/ aL bL cL dL eL sL ss n i)
(vl-load-com) 
(prompt "\n Chon duong cat bang cach chon diem thu nhat va diem thu hai :")
(setq aL (getpoint "\n Chon diem thu nhat :"))
(setq bL (getpoint aL "\n Chon diem thu hai :"))

(Prompt "\n Chon doi tuong Line can break tai 1 diem :")
(Setq ss (ssget '((0 . "LINE,LWPOLYLINE"))))
(Setq n (sslength ss) 
i 0)
(while ((setq sL (ssname ss i))
(setq cL (vlax-curve-getStartPoint sL))
(setq dL (vlax-curve-getEndPoint sL))

(setq eL (inters aL bL cL dL T))

(if (= eL nil) (setq i (1+ i)))
(if (/= eL nil) 
(progn
(Command "_Break" sL eL "@")
(setq i (1+ i))
)
)
)
(sssetfirst ss ss)
(Princ)
)

Các bạn có thể tham khoả thêm bài viết : Hoi ve lenh Break

Chúc thành công :(

  • 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

Cho mình hỏi hơi ngu. ngu. 
Việc dùng Lisp cad trong trường hợp này , như hướng dẫn của Tue_NV thì ko nhanh hơn dùng Break at Point đúng ko?
Vậy Lisp cad nó là gì? phải có người viết rồi mình mới dùng được. Trên thế giới có vô số Lisp cad phải ko?
Cuối cùng :: có nên dùng lisp cad 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

Đây là Lisp Tue_nv đã viết và chỉnh sửa lại một chút :

- Lệnh Brt

- Chọn đường cắt bằng cách chọn 2 điểm

- Chọn đối tượng

- Lisp sẽ break tại điểm giao của đường cắt với đối tượng

Giống như cách chọn đối tượng theo kiểu F(Fence)

Các bạn có thể tham khoả thêm bài viết : 

 

chào bạn. mình đang cần lisp cắt tất cả các các line, plne, arc, circle, tại tất cả các điểm giao nhau, bạn sửa lisp giúp nhé! 

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  

×