AutoLISP:使用 AutoCAD“矩形”命令时将用户选择的两个点保存到变量中

AutoLISP: Saving user chosen two points into variables when using the AutoCAD “rectangle” command

有没有办法在用户选择第一个点时保存“第一个角点”和“另一个角点”的变量,然后在使用[=时输入长度和宽度(动态输入打开) 27=]“矩形”命令?

示例:

Command: RECTANGLE
Specify first corner point or [Chamfer/Elevation/Fillet/Thickness/Width]:
Specify other corner point or [Area/Dimensions/Rotation]: @20',15' 

我想用 “矩形” 命令替换下面的内容,以便用户可以输入他们需要的长度和宽度。用户希望长度和宽度为整数(例如:13、15、20、23 等),这可以通过使用矩形命令来完成。现在他们必须先画一个他们想要的整数矩形。然后使用例程并捕捉到角落。希望把所有的都结合在一个例行程序中。

我现在拥有的:

 (setq firstpick (getpoint "\nEnter first corner: "))
(setq secondpick (getcorner firstpick "\nEnter cross corner: "))
; Get all four corners of user drawn rectangle
(setq pt1 firstpick)
(setq pt3 secondpick)
(setq pt2 (list (car pt1) (cadr pt3)))
(setq pt4 (list (car pt3) (cadr pt1)))
; Get the Area drawn and save in variable “myrecarea”
 (setq mylength (distance pt1 pt2)); length
(setq mywidth (distance pt1 pt4)); width
(setq myrecarea (* mylength mywidth)); Get area of rectangle (length x width)

我想替换为使用“矩形”命令(如果可能),以便用户可以输入长度和宽度。不确定如何用矩形命令替换,提取那些角点并保存为变量...

(setq firstpick (command "rectangle"))(?)
(setq secondpick (?)
; Get all four corners of user drawn rectangle
(setq pt1 firstpick)
(setq pt3 secondpick)
(setq pt2 (list (car pt1) (cadr pt3)))
(setq pt4 (list (car pt3) (cadr pt1)))
; Get the Area drawn and save in variable “myrecarea”
 (setq mylength (distance pt1 pt2)); length
(setq mywidth (distance pt1 pt4)); width
(setq myrecarea (* mylength mywidth)); Get area of rectangle (length x width)

*区域大小决定了稍后在例程中绘制的内容...

最后一个问题, 是否可以将例程中绘制的所有内容保存在一个块中?不确定如果例程 运行 在单个绘图中多次不覆盖原始块,块命名将如何工作。

对于矩形部分,我尝试了下面由 Kent1Cooper 编写的代码,它似乎可以满足我的需要。

(defun C:RSCP () ; = Rectangle, Save Corner Points
  (command-s "_.rectang"); [must be without Fillet or Chamfer options]
  (setq
    pt1 (vlax-curve-getPointAtParam (entlast) 0)
    pt2 (vlax-curve-getPointAtParam (entlast) 1)
    pt3 (vlax-curve-getPointAtParam (entlast) 2)
    pt4 (vlax-curve-getPointAtParam (entlast) 3)
  ); setq
  (princ)
); defun

谢谢肯特!