rookie37 发表于 2022-7-6 17:10:06

视口

我要开始为我的视口制作一个图层
 
谁能帮我用lisp程序来;
 
getvar oldlayer
使层“vport”颜色49不打印
生成视口//
setvar oldlayer

Lee Mac 发表于 2022-7-6 17:25:49

可能是这样:
 

(defun c:vp (/ oldlay)
   (setq oldlay (getvar "clayer"))
   (setvar "cmdecho" 0)
   (if (/= (getvar "ctab") "Model")
       (progn
         (if (not (tblsearch "LAYER" "vport"))
         (command "-layer" "M" "vport" "C" "49" "vport" "P" "N" "vport" "")
         (setvar "clayer" "vport")
         ) ; end if
         (command "-vports"
               pause
               pause
         ) ; end command
         (setvar "clayer" oldlay)
       ) ; end progn
       (alert "Viewport Cannot be Drawn in Model Space.")
   ) ; end if
   (setvar "cmdecho" 1)
   (princ)
) ; end defun

rookie37 发表于 2022-7-6 17:32:08

它工作得很好!非常感谢。

Strix 发表于 2022-7-6 17:44:13

有必要吗?
 
难道你不需要设置一个模板来开始所有的绘图吗?

rookie37 发表于 2022-7-6 17:50:36

不幸的是,是的
 
我是承包商
 
我使用了许多具有不同启动模板的autocad风格的机器

Strix 发表于 2022-7-6 17:57:12

我想我在这里有点模糊,但是你怎么加载Lisp程序呢?你会把它加载到每个客户的机器上吗?它会活在U盘上吗?
 
如果你不得不让模板具有可移植性,那么它仍然不是最简单的解决方案吗?
 
难道不可能在线存储模板,以便在任何有互联网连接的地方都可以轻松访问它吗?
 
(很抱歉问这么多问题,但建立有效的系统是我最感兴趣的:wink:)

rookie37 发表于 2022-7-6 18:04:41

如果我试着将所有的自定义项保持为一种类型,(lisp),那么就更容易记住。
 
否则,我要查找多个目录和更新文件。
 
确实,模板可能已经制作了vport层,并且可以绘制视口。但是,如果我想要另一个,我会将vport层置为当前,绘制vport,并将之前绘制的层置为当前。
 
还有很多我工作的地方已经有了一个模板,有些地方不想碰它。

Lee Mac 发表于 2022-7-6 18:18:18

模板新手的优点,
 
使用模板(以及已经创建的vport层),您仍然需要记住在绘制端口之前切换到vport层,然后在绘制其他对象之前切换回。这显然需要更多的时间,并且LISP发布更快,因为如果已经创建了vport层,它不会复制vport层。
 
解决这个问题的另一种方法是使用反应堆——我最近(在ASMI和其他人的帮助下)了解了一些。
 
下面是一个可以使用模板的反应器。
 

; Layer Director

(vl-load-com)

(vlr-command-reactor
   nil '((:vlr-commandWillstart . startCommand))
) ; end command reactor
(vlr-command-reactor
   nil '((:vlr-commandEnded . endcommand))
) ; end command reactor
(vlr-command-reactor
   nil '((:vlr-commandCancelled . cancelCommand))
) ; end command reactor

(defun startCommand (calling-reactor startcommandInfo / thecommandstart)
   (setq oldlay (getvar "clayer"))
   (setq thecommandstart (nth 0 startcommandInfo))
   (cond
       ((= thecommandstart "+VPORTS")
      (setvar "clayer" "VPORT")
       ) ; end condition
   ) ; end cond
   (princ)
) ; end startcommand

(defun endCommand (calling-reactor endcommandInfo / thecommandend)
   (setq thecommandend (nth 0 endcommandInfo))
   (cond
       ((= thecommandend "+VPORTS")
      (setvar "clayer" oldlay)
       ) ; end condition
   ) ; end cond
   (princ)
) ; end endCommand

(defun cancelCommand (calling-reactor cancelcommandInfo / thecommandcancel)
   (setq thecommandcancel (nth 0 cancelcommandInfo))
   (cond
       ((= thecommandcancel "+VPORTS")
      (setvar "clayer" oldlay)
       ) ; end condition
   ) ; end cond
   (princ)
) ; end cancelCommand
页: [1]
查看完整版本: 视口