nopasaran 发表于 2022-7-6 11:48:17

使用lis创建布局选项卡

你好我正在寻找一个lisp,可以帮助我创建布局选项卡。
 
首先,我解释一下我的情况。我在模型选项卡中有几个类似的图形,我想将其导出到布局(每个图形都有自己的布局)。图形仅在长度上不同,因此布局必须具有不同的长度(在绘图大小上),并且高度是恒定的。
 
我想做的是有一个lisp,colud创建布局选项卡使用不同的打印大小(如果我可以选择一个),为每个选项卡。
 
请随时联系我这里或直接与任何问题或意见。
 
如有任何帮助或指导,我们将不胜感激。提前谢谢。
 
英语不是我的母语,所以我很抱歉犯了错误。

Lee Mac 发表于 2022-7-6 12:00:53

可以使用vla add方法创建新布局:
 

(defun NewLay (lay)
(vl-load-com)

(setq *adoc* (cond (*adoc*) ((vla-get-ActiveDocument
                              (vlax-get-acad-object)))))

(if (vl-catch-all-error-p
       (setq lay (vl-catch-all-apply (function vla-add)
                   (list (vla-get-layouts *adoc*) lay))))
   
   (vl-catch-all-error-message lay) lay))

 
欢迎来到CADTutor

mdbdesign 发表于 2022-7-6 12:14:20

...或者用这个。。。
 
http://www.cadtutor.net/forum/showthread.php?t=42431

Lee Mac 发表于 2022-7-6 12:19:51

谢谢Marek

Lee Mac 发表于 2022-7-6 12:32:08

这将把选定的对象深度克隆到新布局:
 

;; lay = New Layout Name(Will be Created if non-existent)

(defun CopytoLayout (lay / ss NewLay ObjLst)
(vl-load-com)
; Lee Mac~27.01.10

(setq *acad* (cond (*acad*) ((vlax-get-acad-object)))
       *adoc* (cond (*adoc*) ((vla-get-ActiveDocument *acad*))))

(cond ((not (snvalid lay)))

       ((ssget)

          (vlax-for obj (setq ss (vla-get-ActiveSelectionSet *adoc*))
            (setq ObjLst (cons Obj ObjLst)))         
          (vla-delete ss)

          (if (vl-catch-all-error-p
                (setq NewLay (vl-catch-all-apply
                               (function vla-item)
                                 (list (vla-get-Layouts *adoc*) lay))))
            
            (setq NewLay (vla-Add (vla-get-Layouts *adoc*) lay)))

          (vla-CopyObjects *adoc*
            
            (vlax-make-variant
            (vlax-safearray-fill
                (vlax-make-safearray vlax-vbObject
                  (cons 0 (1- (length ObjLst))))
               
                (reverse ObjLst)))
            
            (vla-get-Block NewLay)))))

nopasaran 发表于 2022-7-6 12:44:34

谢谢你的快速回复。
收件人:LeeMac
我还没有试过你的解决方案,因为我还不太擅长lisp,所以我会稍后再看,但谢谢你的帮助!
收件人:MDB设计
尝试了此程序。。。这是非常好的,我发现它在进一步的工作中非常有用。。。但目前我正在寻找一种解决方案,使我能够在一个窗口中选择每个特定选项卡的打印大小。例如,在此程序中,您提供的控件(例如Modify)可以像在页面设置管理器中一样更改打印大小。
 
我不确定这是否可能。。。如果是的话,如果你能给我推荐任何解决方案,我将不胜感激。
 
非常感谢您的回复。
 
另外,我是lisp编程的新手,我的知识很少,所以你可以添加一些爆炸性的东西来说明如何正确使用它。

Lee Mac 发表于 2022-7-6 12:52:07

你好
 
您可以设置新布局的打印大小,但需要使用DCL(或其衍生工具)才能从窗口中选择选项。
 
要使用我上面发布的代码,可以在AutoCAD的Visual LISP编辑器中运行它(命令行处的VLIDE),也可以直接从命令行运行它。
 
它需要一个参数,即布局名称,因此:
 

(CopytoLayout "New Layout)

 
页: [1]
查看完整版本: 使用lis创建布局选项卡