马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
 - (defun c:soustrac (/ *error* ss1 ss2 n lst)
- (vl-load-com)
- (or *acdoc*
- (setq *acdoc* (vla-get-activeDocument (vlax-get-acad-object)))
- )
- (defun *error* (msg)
- (and
- msg
- (/= msg "Fonction annulée")
- (princ (strcat "\nErreur: " msg))
- )
- (vla-EndUndoMark *acdoc*)
- (princ)
- )
- (princ
- "\nSelect the solids and regions to remove from .."
- )
- (if
- (setq ss1 (ssget '((0 . "REGION,3DSOLID"))))
- (if (and
- (princ
- "\nSelect the solids and regions to subtract .."
- )
- (setq ss2 (ssget '((0 . "REGION,3DSOLID"))))
- )
- (progn
- (vla-StartUndoMark *acdoc*)
- (repeat (setq n (sslength ss2))
- (setq
- lst
- (cons
- (vlax-ename->vla-object (ssname ss2 (setq n (1- n))))
- lst
- )
- )
- )
- (repeat (setq n (sslength ss1))
- (setq
- obj (vlax-ename->vla-object (ssname ss1 (setq n (1- n))))
- )
- (foreach o lst
- (and (= (vla-get-ObjectName obj) (vla-get-ObjectName o))
- (vla-Boolean obj acSubtraction (vla-copy o))
- )
- )
- )
- (initget "Yes No")
- (if (= "Yes"
- (getkword
- "\nDelete subtracted objects [Yes / No] <N>:"
- )
- )
- (mapcar 'vla-delete lst)
- )
- (*error* nil)
- )
- )
- )
- (princ)
- )
|