大家好!
我将尝试解释我要做的事情:
1.创建选择集并找到其bbox的中心
2.创建bpoly,在封闭区域内拾取,并找到其bbox的中心
3.将所选内容从其中心移动到B多边形的中心
4、删除bpoly
目前,我正在修改Tharwat的一些代码(并添加了Lee Mac的一些函数),但我现在陷入了困境,找不到我的错误:
- ;Credits: Tharwat, Lee Mac
- (defun c:test (/ s1 l1 cen1 doc e o u spc reg obj cen2)
- (princ "\nSelect objects to move from their center")
- (setq s1 (ssget "_:L"))
- (setq l1 (LM:ssboundingbox s1 ))
- (setq cen1 (apply 'mapcar (cons '(lambda ( a b ) (/ (+ a b) 2.0)) l1)) )
- (setq e (entlast))
- (if (and (vl-cmdf "_.-boundary" "\" "\")
- (setq o (entlast))
- (not (eq e o))
- (eq (cdr (assoc 0 (entget o))) "LWPOLYLINE")
- )
- (progn
- (setq doc (vla-get-activedocument (vlax-get-acad-object)) )
- (setq spc (vla-get-block (vla-item (vla-get-layouts doc) (getvar 'ctab))) )
- (setq reg (vlax-invoke spc 'addregion (list (setq obj (vlax-ename->vla-object o)))) )
- (if
- (setq cen2 (vlax-3d-point (append (vlax-get (car reg) 'centroid) (list 0.))) )
- (progn
- (command "_move" s1 "" "_non" cen1 "_non" cen2 )
- (mapcar 'vla-delete o)
- (vla-delete (car reg))
- );progn
- );if
- );progn
- );if
- ;vlax-safearray->list (vlax-variant-value VAR))
- (princ)
- )
- ;; Selection Set Bounding Box - Lee Mac
- ;; Returns a list of the lower-left and upper-right WCS coordinates of a
- ;; rectangular frame bounding all objects in a supplied selection set.
- ;; s - [sel] Selection set for which to return bounding box
- (defun LM:ssboundingbox ( s / a b i m n o )
- (repeat (setq i (sslength s))
- (if
- (and
- (setq o (vlax-ename->vla-object (ssname s (setq i (1- i)))))
- (vlax-method-applicable-p o 'getboundingbox)
- (not (vl-catch-all-error-p (vl-catch-all-apply 'vla-getboundingbox (list o 'a 'b))))
- )
- (setq m (cons (vlax-safearray->list a) m)
- n (cons (vlax-safearray->list b) n)
- )
- )
- )
- (if (and m n)
- (mapcar '(lambda ( a b ) (apply 'mapcar (cons a b))) '(min max) (list m n))
- )
- )
- (vl-load-com) (princ)
谁能修好它,谁就可以拿走版权(我不在乎)。
我只是想把这件事做完! |