
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
Hi all,
i want to copy block to all centoid rectang, so i writed this code. But it is not run. Can someone fix it. Thanks.
(defun c:test (/ blk ename cen p_blk ar ar1 n ss)
(if (setq blk (car (entsel "\nSelect block: ")))
(progn
(if
(setq
ename (entsel
"\nSelect object: "
)
)
(progn
(setq p_blk (vlax-get (vlax-ename->vla-object blk) 'InsertionPoint)
)
(setq ar
(vlax-get (vlax-ename->vla-object (car ename)) 'area)
)
(print (list (assoc 0 (entget (car circle))) (assoc 8 (entget (car ename)))))
(setq ss (ssget "_X"
(list (assoc 0 (entget (car ename)))
(assoc 8 (entget (car ename)))
)
)
)
(setq n 0)
(repeat (sslength ss)
(setq cen (LM:PolyCentroid (ssname ss n)))
(setq ar1 (vlax-get (vlax-ename->vla-object (ssname ss n)) 'area)
)
(if (= ar ar1)
(progn
(command "_.copy" blk "" "_NONE" p_blk "_NONE" cen)
);progn then
) ;if
(setq n (+ n 1))
) ;repeat
) ;progn then
) ;if
) ;progn
) ;if
(princ)
) ;defun
;; Polygon Centroid - Lee Mac
;; Returns the WCS Centroid of an LWPolyline Polygon Entity
(defun LM:PolyCentroid (e / l)
(foreach x (setq e (entget e))
(if (= 10 (car x))
(setq l (cons (cdr x) l))
)
)
(
(lambda (a)
(if (not (equal 0.0 a 1e-8))
(trans
(mapcar
'/
(apply
'mapcar
(cons '+
(mapcar
(function
(lambda (a b)
(
(lambda (m)
(mapcar
(function
(lambda (c d) (* (+ c d) m))
)
a
b
)
)
(- (* (car a) (cadr b)) (* (car b) (cadr a)))
)
)
)
l
(cons (last l) l)
)
)
)
(list a a)
)
(cdr (assoc 210 e))
0
)
)
)
(* 3.0
(apply '+
(mapcar
(function
(lambda (a b)
(- (* (car a) (cadr b)) (* (car b) (cadr a)))
)
)
l
(cons (last l) l)
)
)
)
)
)
Solved! Go to Solution.