(defun c:DrawProjectedArray (/ width height angle projected_height insert_pt rect_obj rows cols row_spacing col_spacing)
; 获取用户输入的矩形尺寸(提供默认值)
(setq width (getreal (strcat "\n请输入矩形宽度 <" (rtos 1303.0) ">: ")))
(if (not width) (setq width 1303.0))
(setq height (getreal (strcat "\n请输入矩形高度 <" (rtos 2465.0) ">: ")))
(if (not height) (setq height 2465.0))
; 获取用户输入的倾斜角度(提供默认值)
(setq angle (getreal "\n请输入倾斜角度 <5.0>: "))
(if (not angle) (setq angle 5.0))
; 计算投影后的高度
(setq projected_height (* height (cos (* angle (/ pi 180.0)))))
; 获取阵列参数
(setq rows (getint "\n请输入行数 <8>: "))
(if (not rows) (setq rows 8))
(setq cols (getint "\n请输入列数 <7>: "))
(if (not cols) (setq cols 7))
; 获取用户输入的行间距和列间距
(setq row_spacing (getreal (strcat "\n请输入行间距 <" (rtos (+ projected_height 6.0)) ">: ")))
(if (not row_spacing) (setq row_spacing (+ projected_height 6.0)))
(setq col_spacing (getreal (strcat "\n请输入列间距 <" (rtos (+ width 6.0)) ">: ")))
(if (not col_spacing) (setq col_spacing (+ width 6.0)))
; 显示计算结果
(princ (strcat "\n原始尺寸: " (rtos width) " * " (rtos height) " mm"))
(princ (strcat "\n投影尺寸: " (rtos width) " * " (rtos projected_height 2 0) " mm"))
(princ (strcat "\n阵列设置: " (itoa rows) "行 * " (itoa cols) "列"))
(princ (strcat "\n行间距: " (rtos row_spacing) "mm"))
(princ (strcat "\n列间距: " (rtos col_spacing) "mm"))
; 获取用户输入的插入点
(setq insert_pt (getpoint "\n指定插入点: "))
(if insert_pt
(progn
; 绘制投影矩形
(command "_.rectang"
insert_pt
(list (+ (car insert_pt) width)
(+ (cadr insert_pt) projected_height)))
; 选择刚刚绘制的矩形
(setq rect_obj (entlast))
; 使用ARRAYRECT命令创建关联矩形阵列
; 明确指定阵列的方向
(command "_.arrayrect"
rect_obj
""
; 列方向
"_Columns" cols
"_Spacing" col_spacing
"_Axis" "X" ; 明确指定列方向为X轴
; 行方向
"_Rows" rows
"_Spacing" row_spacing
"_Axis" "Y" ; 明确指定行方向为Y轴
; 层方向
"_Levels" 1
"_Spacing" 1
; 完成阵列
""
)
(princ "\n关联矩形阵列创建完成!")
(princ "\n提示:您可以通过夹点动态修改行数、列数和间距。")
)
(princ "\n未指定插入点,操作取消。")
)
(princ)
)
(princ "\n输入 DrawProjectedArray 开始绘制投影矩形阵列")
(princ)
网友答: 手动执行一下ArrayRect,看看输入各种数据的顺序。然后按照那个顺序改代码
网友答:
手动执行看了,我感觉是对的,所以找不出问题,求助大神网友答: 你用的是假ACAD吗?指定完列数量不需要即刻设置间距还需要用spacing关键字指定?网友答: 关闭捕捉,测试一下。网友答:
应该是我的程序有问题,暂时改不了了
; 获取用户输入的矩形尺寸(提供默认值)
(setq width (getreal (strcat "\n请输入矩形宽度 <" (rtos 1303.0) ">: ")))
(if (not width) (setq width 1303.0))
(setq height (getreal (strcat "\n请输入矩形高度 <" (rtos 2465.0) ">: ")))
(if (not height) (setq height 2465.0))
; 获取用户输入的倾斜角度(提供默认值)
(setq angle (getreal "\n请输入倾斜角度 <5.0>: "))
(if (not angle) (setq angle 5.0))
; 计算投影后的高度
(setq projected_height (* height (cos (* angle (/ pi 180.0)))))
; 获取阵列参数
(setq rows (getint "\n请输入行数 <8>: "))
(if (not rows) (setq rows 8))
(setq cols (getint "\n请输入列数 <7>: "))
(if (not cols) (setq cols 7))
; 获取用户输入的行间距和列间距
(setq row_spacing (getreal (strcat "\n请输入行间距 <" (rtos (+ projected_height 6.0)) ">: ")))
(if (not row_spacing) (setq row_spacing (+ projected_height 6.0)))
(setq col_spacing (getreal (strcat "\n请输入列间距 <" (rtos (+ width 6.0)) ">: ")))
(if (not col_spacing) (setq col_spacing (+ width 6.0)))
; 显示计算结果
(princ (strcat "\n原始尺寸: " (rtos width) " * " (rtos height) " mm"))
(princ (strcat "\n投影尺寸: " (rtos width) " * " (rtos projected_height 2 0) " mm"))
(princ (strcat "\n阵列设置: " (itoa rows) "行 * " (itoa cols) "列"))
(princ (strcat "\n行间距: " (rtos row_spacing) "mm"))
(princ (strcat "\n列间距: " (rtos col_spacing) "mm"))
; 获取用户输入的插入点
(setq insert_pt (getpoint "\n指定插入点: "))
(if insert_pt
(progn
; 绘制投影矩形
(command "_.rectang"
insert_pt
(list (+ (car insert_pt) width)
(+ (cadr insert_pt) projected_height)))
; 选择刚刚绘制的矩形
(setq rect_obj (entlast))
; 使用ARRAYRECT命令创建关联矩形阵列
; 明确指定阵列的方向
(command "_.arrayrect"
rect_obj
""
; 列方向
"_Columns" cols
"_Spacing" col_spacing
"_Axis" "X" ; 明确指定列方向为X轴
; 行方向
"_Rows" rows
"_Spacing" row_spacing
"_Axis" "Y" ; 明确指定行方向为Y轴
; 层方向
"_Levels" 1
"_Spacing" 1
; 完成阵列
""
)
(princ "\n关联矩形阵列创建完成!")
(princ "\n提示:您可以通过夹点动态修改行数、列数和间距。")
)
(princ "\n未指定插入点,操作取消。")
)
(princ)
)
(princ "\n输入 DrawProjectedArray 开始绘制投影矩形阵列")
(princ)
网友答: 手动执行一下ArrayRect,看看输入各种数据的顺序。然后按照那个顺序改代码
网友答:
kozmosovia 发表于 2025-10-23 15:00
手动执行一下ArrayRect,看看输入各种数据的顺序。然后按照那个顺序改代码
手动执行看了,我感觉是对的,所以找不出问题,求助大神网友答: 你用的是假ACAD吗?指定完列数量不需要即刻设置间距还需要用spacing关键字指定?网友答: 关闭捕捉,测试一下。网友答:
hhh454 发表于 2025-10-24 20:15
关闭捕捉,测试一下。
应该是我的程序有问题,暂时改不了了