If user want to make group of circles align with reference one in X-axis or Y-axis. Pls download LISP source code and run in your PTCAD. Video below show how to use command (axy).
Here is Video
Here is LISP source code
(defun c:Axy( / refEnt refData refCenter selSet idx entData mode moveVec srcCenter )
;; Select reference circle
(setq refEnt (car (entsel "\nSelect reference circle: ")))
(if (and refEnt (eq (cdr (assoc 0 (entget refEnt))) "CIRCLE"))
(progn
(setq refData (entget refEnt))
(setq refCenter (cdr (assoc 10 refData)))
;; Ask user alignment axis
(initget "X Y")
(setq mode (getkword "\nAlign by [X/Y]: "))
;; Select circles to align
(setq selSet (ssget '((0 . "CIRCLE"))))
(if selSet
(progn
(setq idx 0)
(while (< idx (sslength selSet))
(setq ent (ssname selSet idx))
(setq entData (entget ent))
(setq srcCenter (cdr (assoc 10 entData)))
(cond
;; Align X axis only
((= mode "X")
(setq moveVec (list (- (car refCenter) (car srcCenter)) 0.0 0.0))
)
;; Align Y axis only
((= mode "Y")
(setq moveVec (list 0.0 (- (cadr refCenter) (cadr srcCenter)) 0.0))
)
)
;; Move the circle
(command "MOVE" ent "" '(0 0 0) moveVec)
(setq idx (1+ idx))
)
(princ "\n✅ Circles aligned successfully.")
)
(princ "\nNo circles selected.")
)
)
(princ "\n❌ Please select a valid circle as reference.")
)
(princ)
)
;; Select reference circle
(setq refEnt (car (entsel "\nSelect reference circle: ")))
(if (and refEnt (eq (cdr (assoc 0 (entget refEnt))) "CIRCLE"))
(progn
(setq refData (entget refEnt))
(setq refCenter (cdr (assoc 10 refData)))
;; Ask user alignment axis
(initget "X Y")
(setq mode (getkword "\nAlign by [X/Y]: "))
;; Select circles to align
(setq selSet (ssget '((0 . "CIRCLE"))))
(if selSet
(progn
(setq idx 0)
(while (< idx (sslength selSet))
(setq ent (ssname selSet idx))
(setq entData (entget ent))
(setq srcCenter (cdr (assoc 10 entData)))
(cond
;; Align X axis only
((= mode "X")
(setq moveVec (list (- (car refCenter) (car srcCenter)) 0.0 0.0))
)
;; Align Y axis only
((= mode "Y")
(setq moveVec (list 0.0 (- (cadr refCenter) (cadr srcCenter)) 0.0))
)
)
;; Move the circle
(command "MOVE" ent "" '(0 0 0) moveVec)
(setq idx (1+ idx))
)
(princ "\n✅ Circles aligned successfully.")
)
(princ "\nNo circles selected.")
)
)
(princ "\n❌ Please select a valid circle as reference.")
)
(princ)
)
No comments:
Post a Comment