(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,看看输入各种数据的顺序。然后按照那个顺序改代码


网友答:
kozmosovia 发表于 2025-10-23 15:00
手动执行一下ArrayRect,看看输入各种数据的顺序。然后按照那个顺序改代码

手动执行看了,我感觉是对的,所以找不出问题,求助大神

网友答: 你用的是假ACAD吗?指定完列数量不需要即刻设置间距还需要用spacing关键字指定?

网友答: 关闭捕捉,测试一下。

网友答:
hhh454 发表于 2025-10-24 20:15
关闭捕捉,测试一下。

应该是我的程序有问题,暂时改不了了
  • 上一篇:(已解决)拉伸程序修改
  • 下一篇:没有了