@piyush.parihar24 ,
As others experts said, it's unclear what you want to do but here a 'Shot in the dark' 😀
attached is a command called GORD (Grid Order) to align blocks (you choose) onto a grid
as you will soon see, the real challenge here was not the align to grid but rather collecting the input for the process.
is this what you had in mind?
moshe
(vl-load-com)
; block grid order
(defun c:gord (/ getBlockName gridSpacing alignAngle applyRotation ; local functions
bname gs p0 p1 dir rot ss i AcDbBlkRef)
(defun getBlockName (/ pick elist blk)
(while (not blk)
(initget "Name")
(setq pick (entsel (strcat "\n<Pick block>/Name" (if (eq (getvar 'users1) "") ": " (strcat " <" (getvar 'users1) ">: ")))))
(cond
((eq (type pick) 'LIST)
(setq elist (entget (car pick)))
(if (eq (cdr (assoc '0 elist)) "INSERT")
(setq blk (cdr (assoc '2 elist)))
(progn
(vlr-beep-reaction)
(setq blk (prompt "\nSelected object is not a block."))
)
)
); case
((not pick)
(setq blk (getvar 'users1))
); case
((eq pick "Name")
(if (eq (setq blk (getstring (strcat "\nEnter block name" (if (eq (getvar 'users1) "") ": " (strcat " <" (getvar 'users1) ">: "))))) "")
(setq blk (getvar 'users1))
(if (null (tblsearch "block" blk))
(progn
(vlr-beep-reaction)
(setq blk (prompt (strcat "\nBlock " blk " is not exist.")))
); progn
); if
); if
); case
); cond
); while
blk
); getBlockName
(defun gridSpacing (/ ask)
(if (not (setq ask (getdist (strcat "\nGrid spacing <" (rtos (getvar 'userr1) 2) ">: "))))
(setq ask (getvar 'userr1))
ask
)
); gridSpacing
(defun directionPath (/ ask)
(if (not (setq ask (getangle p0 (strcat "\nDirection path <" (rtos (getvar 'userr2) 2) ">: "))))
(setq ask (getvar 'userr2))
ask
)
); gridSpacing
(defun applyRotation ( / ask)
(initget "Yes No")
(if (not (setq ask (getkword "\nRotate block(s) about their base point <N>: ")))
(setq ask "No")
ask
)
); applyRotation
; here start c:gord
(vla-startUndoMark (vla-get-activedocument (vlax-get-acad-object)))
(if (= (getvar 'userr1) 0.0)
(setvar 'userr1 (car (getvar 'gridunit)))
)
(if (and
(/= (setvar "users1" (setq bname (getBlockName))) "")
(setvar 'userr1 (setq gs (gridSpacing)))
(setq p0 (getpoint "\nStarting base point: "))
(setvar 'userr2 (setq dir (directionPath)))
(setq rot (applyRotation))
(setq ss (ssget (list '(0 . "insert") (cons '2 bname))))
(setq i -1)
)
(foreach ename (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
(setq AcDbBlkRef (vlax-ename->vla-object ename))
(setq p1 (polar p0 dir (* (setq i (1+ i)) gs)))
(vla-move AcDbBlkRef (vla-get-insertionPoint AcDbBlkRef) (vlax-3d-point (trans p1 0 1)))
(if (eq rot "Yes")
(vla-rotate AcDbblkRef (vla-get-insertionPoint AcDbBlkRef) dir)
)
(vlax-release-object AcDbBlkRef)
)
); if
(vla-endundoMark (vla-get-activedocument (vlax-get-acad-object)))
(princ)
); gord