【未解决】两个矩形或者多边形的形心自动对齐,用于结构基础对齐柱
RT,直接看图。(defun C:mymy (/ ENT1 ENT2 ENTCENP1 ENTCENP2 ENTPLIST X Y)
;;1 [功能] 获取两点的中点坐标
(defun MJ:MIDPOINT (P1 P2)
(mapcar '(lambda (X Y) (/ (+ X Y) 2.0)) P1 P2)
)
;;2获取对象的外边框
(defun HH:MinMaxPt (ent / MinPt MaxPt)
;;(vl-load-com)
(vla-GetBoundingBox
(vlax-Ename->vla-Object ent)
'MinPt
'MaxPt
)
(mapcar 'vlax-safearray->list (list MinPt MaxPt))
)
(setq ent1 (car (entsel "\n目标:")))
(setq entplist (HH:MinMaxPt ent1))
(setq entcenP1 (MJ:MIDPOINT (car entplist) (cadr entplist)))
(setq ent2 (car (entsel "\n源:")))
(setq entplist (HH:MinMaxPt ent2))
(setq entcenP2 (MJ:MIDPOINT (car entplist) (cadr entplist)))
(command "_.move" ent1 "" entcenP1 entcenP2)
(princ)
) 顶,这个不错的程序 对不起,忘记补充了, 能不能批量处理,框选。 批量怎判断哪个与哪个中心对齐,这要有条件吧 (defun c:xxdq (/
TCCAD-I TCCAD-LAYER
TCCAD-PT1 TCCAD-PT2 TCCAD-PTLIST
TCCAD-SI TCCAD-SII TCCAD-SSGET1
TCCAD-SSGET2 TCCAD-SSLENGTH
)
(setq tccad-layer
(tccad-dxf (car (entsel "\n请点取基础所在图层:")) 8)
)
(setq tccad-ssget1 (ssget (list (cons 8 tccad-layer))))
(setq tccad-sslength (sslength tccad-ssget1))
(setq tccad-i -1)
(while (setq tccad-si (ssname tccad-ssget1 (setq tccad-i (1+ tccad-i))))
(setq tccad-ptlist (vertexs tccad-si))
(setq tccad-pt1 (get_centroid tccad-si))
(setq tccad-ssget2
(ssget "wP" tccad-ptlist (list (cons 0 "*LINE")))
)
(setq tccad-sii (ssname tccad-ssget2 0))
(setq tccad-pt2 (get_centroid tccad-sii))
(vla-move (vlax-ename->vla-object tccad-si) (vlax-3D-point tccad-pt1) (vlax-3D-point tccad-pt2))
(setq tccad-pt1 niltccad-pt2 nil)
(command "change" tccad-si "" "PROPERTIES" "c" "1" "")
)
(princ)
)
页:
[1]