MJLM 发表于 2022-7-5 13:16:32

帮助-尝试制作functi

我正在努力使我的lisp例程透明化。该例程仅通过将视图窗口调整两个点来调用顶部方向。
 

(defun test (/ cp wcp1 wcp2 ss)                                                                                                                        ; top orientation

        (setq cp (getvar "viewctr"))
        (setq wcp1 (list (- (car cp) 5) (- (cadr cp) 5) (caddr cp)))
        (setq wcp2 (list (+ (car cp) 5) (+ (cadr cp) 5) (caddr cp)))

        (setq ss (ssget "_C" wcp1 wcp2))
        (command "_.view" "top")

        (command "_.zoom" "O" ss "")
       
(princ)
)
我发现这个方法可以使它透明
 
但是经过一些研究,我意识到(如果我错了,请纠正我),只要在例程中调用“命令”调用,这就不可能是透明的。到底有没有可能让它变得透明?如果没有,我如何修改代码以摆脱对该特定代码的“命令”调用?
 
谢谢你的建议。

Grrr 发表于 2022-7-5 13:21:06

你好
在说任何与你的问题相关的话之前。。。你知道t是一个受保护的符号,在vanilla lisp中代表true吗?

MJLM 发表于 2022-7-5 13:24:21

是的,我知道,但不管怎样,这没有什么区别。让我们把“t”改为“test”。

David Bethel 发表于 2022-7-5 13:30:21

你试过了吗
 
好吧,透明度只适用于命令功能。

MJLM 发表于 2022-7-5 13:31:08

是的,我试过了。这没什么区别。整个想法

vlax-add-cmd 是使例程作为标准Autocad命令功能运行。
 
那么,我应该停止梦想我的函数的透明度吗?

David Bethel 发表于 2022-7-5 13:34:50

https://www.cadtutor.net/forum/topic/6354-is-it-possible/
 
可能会有帮助
 

lido 发表于 2022-7-5 13:39:20

1.将(defun test(/…)重命名为(defun c:test(/…)。。。。
2、用途:
命令:line
命令:(c:测试)
.....

hanhphuc 发表于 2022-7-5 13:41:23

 
 
您好,我的建议是使用activeX方法

(vl-load-com)
(setq *acDoc* (vla-get-activedocument (vlax-get-acad-object)))

(defun test (/ wc ss vw)
(if (and (setq wc        (mapcar ''((f) (mapcar f (getvar "viewctr") '(5. 5. 0.))) '(- +))
             ss        (apply 'ssget (cons "_C" wc))
             )
       (setq vw (vla-get-activeviewport *acdoc*))
       )
(progn (vlax-put vw 'direction '(0. 0. 1.))
       (vla-put-activeviewport *acdoc* vw)
       (apply 'vla-zoomwindow (cons (vlax-get-acad-object) (mapcar 'vlax-3d-point wc)))
       )
    )
(princ)
)

(vlax-add-cmd "test" 'test "test" 1)

;reference: Dev.Documentation
;ACRX_CMD_MODAL (0) Command cannot be invoked while another command is active.
;ACRX_CMD_TRANSPARENT (1) Command can be invoked while another command is active.
;ACRX_CMD_USEPICKSET (2) When the pickfirst set is retrieved it is cleared within AutoCAD.
;                           Command will be able to retrieve the pickfirst set. Command cannot retrieve or set grips.
;ACRX_CMD_REDRAW (4)
您是否在发出透明命令时添加了前缀“引号”(撇号)?
 
 

 
 
 
我记得类似于ortho 45的“透明”,但没有使用“vlax add cmd”,只是通过调用要包含括号的符号的函数
示例:(测试)(dd)等。。
 
 

MJLM 发表于 2022-7-5 13:48:15

嗯,正如我所想,通过取消“命令”调用,它起到了作用。感谢您提供activeX版本。
 
不过有一个小问题
 
最后的
(apply 'vla-zoomwindow (cons (vlax-get-acad-object) (mapcar 'vlax-3d-point wc)))效果不好。它会缩放到另一个区域,比如向上移动。知道吗?

hanhphuc 发表于 2022-7-5 13:48:36

 
抱歉,最小测试

(setq wc (mapcar ''((f) (mapcar f (getvar "viewctr") '(5. 5. 0.))) '(+ -)))第一个角点应低于上角点,即:将此“(+-)更改为“(+)?
 
另外,如果你想缩放多个物体?IMO boundingbox函数可能有帮助
只要activeX建议解决了这个问题,其余的就让你自己动手
页: [1] 2
查看完整版本: 帮助-尝试制作functi