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
谢谢肯特!
有没有办法在用户选择第一个点时保存“第一个角点”和“另一个角点”的变量,然后在使用[=时输入长度和宽度(动态输入打开) 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
谢谢肯特!