Good day everyone,
The code below adds block based on the diameter and layer of the circles; it also deletes the existing circles after the block is placed. My question is, is there a way that the smaller circles contained within the selected circles will also get deleted? The image below shows the small circle (as seen in blue) remains after I used the LISP. How can I add that to the deletion? Thanks in advance.
(defun c:INSCH(/ ss ent center diameter block-name)
(if (setq ss (ssget '((0 . "CIRCLE")(8 . "Hidden"))))
(repeat (sslength ss)
(setq
ent (ssname ss 0);--------------------------; Get circle entity from selection set
center (cdr (assoc 10 (entget ent)));-------; Get circle's XYZ position
diameter (* (cdr (assoc 40 (entget ent))) 2); Get circle's diameter
block-name (cond ;--------------------------; Create a mapping of diameter to block name
((= diameter 4.5) "M2_CB_BOT")
((= diameter 6) "M3_CB_BOT")
((= diameter 8) "M4_CB_BOT")
((= diameter 10) "M5_CB_BOT")
((= diameter 11) "M6_CB_BOT")
((= diameter 14) "M8_CB_BOT")
((= diameter 18) "M10_CB_BOT")
((= diameter 20) "M12_CB_BOT")
((= diameter 23) "M14_CB_BOT")
((= diameter 26) "M16_CB_BOT")
((= diameter 32) "M20_CB_BOT")
((= diameter 39) "M24_CB_BOT")
((= diameter 48) "M30_CB_BOT")
;; Add more conditions for other diameters and block names here
( t nil); No block name if diameter doesn't match
);cond
);setq
; Insert the block if a valid block name exists
(if block-name (command "insert" block-name center 1.0 1.0 0.0))
; Delete the original circle
(setq ss (ssdel ent ss))
(if block-name (entdel ent))
);repeat
(princ "\\nNo circles found.")
);if
(princ)
);defun