VisDak 发表于 2022-7-6 14:14:24

边界修剪路线

大家好,
 
我只是想知道为什么这个嘴唇不起作用,请看附件中的图片,路径必须像这样,选择点1到点2作为矩形边界,它将在我打开的矩形窗口上修剪,代码如下:
 
(defun c:cut () (graphscr)
       (setvar "osmode" 31743)
       (setvar "cmdecho" 0)
       (initget 32)
       (setq pnt1 (getpoint "First corner of rectangle: ")) (terpri)
       (setq pnt3 (getcorner "Second corner: " pnt1 ))(terpri)
       (setq pnt2 (list (car pnt1) (cadr pnt3)))
       (setq pnt4 (list (car pnt3) (cadr pnt1)))
       (command "Pline" pnt1 pnt2 pnt3 pnt4 "c")
       (setq el (entlast))
       (repeat 3
       (setq pt1 (list (+ (car pnt1) 0.05)(+ (cadr pnt1) 0.05)))
       (setq pt2 (list (+ (car pnt2) 0.05)(- (cadr pnt2) 0.05)))   
       (setq pt3 (list (- (car pnt3) 0.05)(- (cadr pnt3) 0.05)))   
       (setq pt4 (list (- (car pnt4) 0.05)(+ (cadr pnt4) 0.05)))   
       (command "trim" el "" "f" pt1 pt2 pt3 pt4 pt1 "" "" )
       )
       (command "erase" "w" pnt1 pnt3 "" )
       (command "erase" el "" )
       (setvar "cmdecho" 1)
       (setvar "osmode" 15359)
(princ)
)
cls
 
我不明白为什么它会删除所有选中的行:哎呀:请在这条路线上帮助我,
 
提前感谢大家,

JohnM 发表于 2022-7-6 14:34:37

你试过了吗?

VisDak 发表于 2022-7-6 14:39:47

是的,JohnM,我已经试过了,我认识到当第一个角点拾取从左下到右上第二个角点拾取时,它工作正常,但为什么当我拾取右侧或左上角到选定边界的第一个角点时,该线将被删除,
 
非常感谢JohnM,我将在代码中添加快照:D

David Bethel 发表于 2022-7-6 14:52:54

这可能是由于你的拣选箱的大小-大卫
 
此外,隐含选择也有自己的规则。

CAB 发表于 2022-7-6 15:07:00

快速。。。
(defun c:cut (/ p1 p2 ofd clst ll lr ur ul ent trimpts)
(graphscr)
(setvar "cmdecho" 0)
(setq p1 (getpoint "\nFirst corner of rectangle: "))
(initget 32)
(setq p2 (getcorner "\nSecond corner: " p1))
(if (and p1 p2)
   (progn
   (command "_.undo" "begin")
   (setq ofd0.05         ; offset distance
         clst (list p1 p2)
   )
   ;; get lower left corner
   (setq ll (list (apply 'min (mapcar 'car clst))
                  (apply 'min (mapcar 'cadr clst))
            )
   )
   ;;get upper right corner
   (setq ur (list (apply 'max (mapcar 'car clst))
                  (apply 'max (mapcar 'cadr clst))
            )
   )
   (setq lr (list (car ur) (cadr ll)))
   (setq ul (list (car ll) (cadr ur)))
   (command "Pline" "_non" ll "_non" lr "_non" ur "_non" ul "c")
   (setq ent (entlast))

   (setq trimpts (list
                     (polar ll (* pi 0.25) ofd)
                     (polar lr (* pi 0.75) ofd)
                     (polar ur (* pi 1.25) ofd)
                     (polar ul (* pi 1.75) ofd)
                     (polar ll (* pi 0.25) ofd)
                   )
   )
   (repeat 2
       (command "trim" ent "" "f")
       (foreach x trimpts (command "_non" x))
       (command "" "")
   )

   (if (setq x (ssget "wp" trimpts))
       (command "erase" x "")
   )

   (entdel ent)
   (command "_.undo" "end")
   )
)
(setvar "cmdecho" 1)
(princ)
)

VisDak 发表于 2022-7-6 15:20:05

谢谢CAB,
 
你的路线很完美,正是我需要的,
 
 
再次感谢各位朋友
页: [1]
查看完整版本: 边界修剪路线