惜惜2 发表于 3 天前

请帮忙修改一下

(defun c:AAA (/ pt1 pt2 old_layer old_linetype old_color ss rect_ent diagonal_ent1 diagonal_ent2)
    (setq old_layer (getvar "clayer"))
    (setq old_linetype (getvar "celtype"))
    (setq old_color (getvar "cecolor"))
    (setvar "orthomode" 0)
    (setq pt1 (getpoint "\n请指定矩形的第一个对角点: "))
    (if pt1
      (setq pt2 (getpoint pt1 "\n请指定矩形的第二个对角点: "))
    )
    (if (and pt1 pt2)
      (progn
            (setq rect_ent (entlast))
            (command "line" pt1 pt2 "")
            (setq diagonal_ent1 (entlast))
            (command "line" (list (car pt1) (cadr pt2)) (list (car pt2) (cadr pt1)) "")
            (setq diagonal_ent2 (entlast))
            (setq ss (ssadd))
            (setq ename (ssget "C" pt1 pt2))
            (if ename
                (progn
                  (setq i 0)
                  (while (< i (sslength ename))
                        (setq ent (ssname ename i))
                        (if (not (or (= ent rect_ent) (= ent diagonal_ent1) (= ent diagonal_ent2)))
                            (ssadd ent ss)
                        )
                        (setq i (1+ i))
                  )
                  (if (> (sslength ss) 0)
                        (command "erase" ss "")
                  )
                )
            )

            (command "-layer" "s" "0" "")
            (command "color" "1")
            (command "rectang" pt1 pt2)
            (command "line" pt1 pt2 "")
            (command "line" (list (car pt1) (cadr pt2)) (list (car pt2) (cadr pt1)) "")
      )
      (alert "未成功指定矩形的对角点,请重新运行命令。")
    )
    (command "-layer" "s" old_layer "")
    (command "linetype" "s" old_linetype "")
    (command "color" old_color)

    (princ)   运行的时候有时候存在删除不完整是怎么回事
)

你有种再说一遍 发表于 3 天前

本帖最后由 你有种再说一遍 于 2025-4-16 21:20 编辑

因为选择集范围需要在可视区域,
低版本可以zoom "e" 再进行范围选择.
高版本2018有系统变量SELECTIONOFFSCREEN控制可视范围以外.


选择对角点是getCorner.

如果低版本不想zoom "e",需要改用C#或者ARX写四叉树.
十万图元插入到四叉树也只是几十毫秒而已.

寒潮大冬瓜 发表于 前天 00:28

能顺利画出矩形和对角线!

gzcsun 发表于 前天 18:37

运行的时候有时候存在删除不完整.
应该是你程序中删除有问题。
(defun c:AAA (/ pt1 pt2 old_layer old_linetype old_color ss rect_ent diagonal_ent1 diagonal_ent2)
        (setq old_layer (getvar "clayer"))
        (setq old_linetype (getvar "celtype"))
        (setq old_color (getvar "cecolor"))
        (setvar "orthomode" 0)
        (setq pt1 (getpoint "\n请指定矩形的第一个对角点: "))
        (if pt1
                (setq pt2 (getpoint pt1 "\n请指定矩形的第二个对角点: "))
        )
        (if (and pt1 pt2)
                (progn
                        (setq ss (ssget "C" pt1 pt2))
                        (if ss
                                (progn
                                        (command "erase" ss "")
                                        (command "-layer" "s" "0" "")
                                        (command "color" "1")
                                        (command "rectang" pt1 pt2)
                                        (command "line" pt1 pt2 "")
                                        (command "line" (list (car pt1) (cadr pt2)) (list (car pt2) (cadr pt1)) "")
                                )
                        )
                )
                (alert "未成功指定矩形的对角点,请重新运行命令。")
        )
        (command "-layer" "s" old_layer "")
        (command "linetype" "s" old_linetype "")
        (command "color" old_color)
        (princ)
)

惜惜2 发表于 昨天 21:52

gzcsun 发表于 2025-4-17 18:37
运行的时候有时候存在删除不完整.
应该是你程序中删除有问题。
(defun c:AAA (/ pt1 pt2 old_layer old_l ...

好的,谢谢

惜惜2 发表于 昨天 21:53

你有种再说一遍 发表于 2025-4-16 21:15
因为选择集范围需要在可视区域,
低版本可以zoom "e" 再进行范围选择.
高版本2018有系统变量SELECTIONOFFS ...

谢谢大佬的指点
页: [1]
查看完整版本: 请帮忙修改一下