SebastianTheCra 发表于 2022-7-5 19:40:51

Autolisp函数产生不同的

问题的根源是辅助函数drawportsegment:

(defun drawportsegment (loc portspacing / portw porth test)
(setq
        portw 2.0
        porth 1.0)

(command "rectangle"
        (list (- (car loc) (/ portw 2.0)) (cadr loc) 0.0)
        (list (+ (car loc) (/ portw 2.0)) (- (cadr loc) porth) 0.0))
(command "line"
        (list (car loc) (- (cadr loc) porth) 0.0)
        (list (car loc) (- (cadr loc) portspacing) 0.0)
        "")
)

由于是相关信息,我编写的与drawportsegment接口的测试函数是testdps:

(defun c:testdps (/ loc portspacing)
(setq
        loc (getpoint "\nwhere?")
        portspacing 2.0)

(drawportsegment loc portspacing))

以下是该功能在屏幕上运行与在屏幕下运行的直接比较:
 
http://i.imgur.com/aJ2cq2v.png
 
我不理解为什么会生成图A,因为从代码来看,我认为总是会生成图B。
 
感谢所有帮助!

Commandobill 发表于 2022-7-5 19:55:38

(setvar 'osmode 0)

Commandobill 发表于 2022-7-5 20:11:02

解释:当对象在屏幕上时,OSNAP处于活动状态,如果您获取当前osmode并将其设置为变量,然后在程序运行时将osmode更改为0,那么它将不会捕捉到对象,然后将其恢复到原来的状态。

SebastianTheCra 发表于 2022-7-5 20:20:32

它成功了-谢谢!

Commandobill 发表于 2022-7-5 20:39:28

没问题

BIGAL 发表于 2022-7-5 20:44:27

有一个建议是,在许多情况下,osmode的更改非常常见。
 

(setq oldsnap (getvar 'osmode))
(setvar 'osmode 0)
....
your code
...
(setvar 'osmode oldsnap)
页: [1]
查看完整版本: Autolisp函数产生不同的