马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
测试代码
 - (defun c:XDTB_CurveTrim (/ _isin e key ss1 pts ptl ss0)
- (defun _isin (e1 e / mp)
- (setq mp (cadr (xdrx_curve_getpoint e1)))
- (xdrx_point_isinside mp e)
- )
- (if (and (setq e (car (xdrx_entsel
- "\n选择封闭线<非自相交>: "
- '((0 . "*LINE,CIRCLE,ELLIPSE"))
- )
- )
- )
- (or (xdrx_curve_isclosed e)
- (equal (xdrx_curve_getstartpoint e)
- (xdrx_curve_getendpoint e)
- 1e-5
- )
- )
- (setq pts (xdrx_entity_box e))
- (setq ss (ssget "C"
- (car pts)
- (caddr pts)
- '((0 . "*line,circle,arc,ellipse"))
- )
- )
- (progn
- (initget 128 "I O")
- (setq key (getkword "\n[1- 修剪内部/0- 修剪外部]<1>"))
- (if (or (null key) (= key ""))
- (setq key 1)
- (setq key 0)
- )
- )
- )
- (progn
- (XD::Begin)
- (xdrx_setmark)
- (ssdel e ss)
- (mapcar '(lambda (x / ptl pams)
- (if (setq ptl (xdrx_curve_getinters x e 0))
- (progn
- (setq pams (mapcar '(lambda (a)
- (xdrx_curve_getparamatpoint x a)
- )
- ptl
- )
- pams (vl-sort pams '<)
- )
- (apply 'xdrx_curve_getsplitcurves (cons x pams))
- )
- (ssdel x ss)
- )
- )
- (xdrx_pickset->ents ss)
- )
- (if (setq ss0 (xdrx_getss))
- (if ss
- (setq ss1 (xdrx_pickset_union ss ss0))
- (setq ss1 ss0)
- )
- )
- (if ss1
- (if (zerop key)
- (mapcar '(lambda (x)
- (if (not (_isin x e))
- (xdrx_entity_delete x)
- )
- )
- (xdrx_pickset->ents ss1)
- )
- (mapcar '(lambda (x)
- (if (_isin x e)
- (xdrx_entity_delete x)
- )
- )
- (xdrx_pickset->ents ss1)
- )
- )
- )
- (XD::End)
- )
- )
- (princ)
- )
|