I have a "base plate" routine I wrote a while back that "sort of" does what you need.
You pick the "center point" and it builds a rectangle and (4) circles (holes) from that point based on user input.
So it would need to be symmetrical from the center for it to work for you.
I removed some of my original code, so it just draws the plate on a layer and places a point at the center on a no-plot layer
I see some others have posted some other solutions, (in the other forum) but maybe this can help someone.
You may want to change layer names or whatever suits your needs.
Code:
;;;;WAREPLATE.LSP, BY TED G.
(defun C:WPLT (/ p1 p2 p3 p4 p5 p6 p7 p8 p9 LR1 LR2 LR3 osm la cmde len abdia lenhalf flen flenhalf strt_point wid widhalf fwid fwidhalf xp1 xp2 xp3 xp4 xp5 xp6 xp7 yp1 yp2 yp3 yp4 yp5 yp6 yp7)
(setq cmde (getvar "cmdecho"))
(setvar "cmdecho" 0)
(setvar "pdmode" 0)
(command "-units" "4" "16" "1" "2" "" "n")
(setq strt_point (getpoint "Select start Point (center of PLT) Type a Coordinate or Pick the Point "))(terpri)
(setq len (getdist "How wide is your plate horizontally? "))(terpri)
(setq wid (getdist "How high is your plate vertically? "))(terpri)
(setq flen (getdist "Distance between holes horizontally? "))(terpri)
(setq fwid (getdist "Distance between holes vertically? "))(terpri)
(setq abdia (getdist "Diameter of AB holes? "))(terpri)
(setq lenhalf (/ len 2))
(setq widhalf (/ wid 2))
(setq flenhalf (/ flen 2))
(setq fwidhalf (/ fwid 2))
;;sets start point (center of plate), for placing point on noplot layer
(setq Xp1 (car strt_point))
(setq yp1 (cadr strt_point))
(setq p1 (list xp1 yp1 0))
;;creates points for plate corners
(setq xp2 (- xp1 lenhalf))
(setq yp2 (- yp1 widhalf))
(setq p2 (list xp2 yp2 0))
(setq xp3 (+ xp2 len))
(setq yp3 yp2)
(setq p3 (list xp3 yp3 0))
(setq xp4 xp3)
(setq yp4 (+ yp3 wid))
(setq p4 (list xp4 yp4 0))
(setq p5 (list xp2 yp4 0))
;;creates points for holes
(setq xp5 (- xp1 flenhalf))
(setq yp5 (- yp1 fwidhalf))
(setq p6 (list xp5 yp5 0))
(setq xp6 (+ xp5 flen))
(setq yp6 yp5)
(setq p7 (list xp6 yp6 0))
(setq xp7 xp6)
(setq yp7 (+ yp5 fwid))
(setq p8 (list xp7 yp7 0))
(setq p9 (list xp5 yp7 0))
(setq osm (getvar "osmode"))
(setvar 'osmode 0)
(setq la (getvar "clayer"))
(SETQ LR1 (TBLSEARCH "LAYER" "S-PLATE"))
(SETQ LR2 (TBLSEARCH "LAYER" "S-NPLT"))
(IF (= LR1 NIL)
(command "layer" "make" "S-PLATE" "color" "7" "" "lw" "0.35" "" ""))
(IF (= LR2 NIL)
(command "layer" "make" "S-NPLT" "COLOR" "1" "" "PLOT" "N" "" "lw" "0.18" "" ""))
(setvar "cmdecho" cmde)
(command "layer" "t" "S-NPLT" "S" "S-NPLT" "")
(command "point" p1 "")
(command "layer" "t" "S-PLATE" "S" "S-PLATE" "")
(command "pline" p2 p3 p4 p5 "c")
(command "circle" p6 "d" abdia "")
(command "circle" p7 "d" abdia "")
(command "circle" p8 "d" abdia "")
(command "circle" p9 "d" abdia "")
(setvar "osmode" osm)
(setvar "clayer" la)
(princ)
)
(princ "WAREPLATE.lsp Loaded, command: WPLT..see command line for prompts")