打开多个图形标题栏
我对如何开始这一常规有点问题我有一个布局上有多个绘图标题的绘图
这样地
注释是在纸上完成的。
我需要在同一张图纸上将这些内容分离到它自己的布局选项卡中
创建布局,本例还有3个
检查每个选项卡,删除每个选项卡中四个选项卡中的三个。
这样行吗?
这些图纸有近2000张
有什么想法吗? 这听起来像是一场噩梦。不过,你上面的方法听起来确实是“最好的”
-复制文件,然后在新文件中将每个布局再复制3次,然后删除每个布局上的所有相关区域(a、b、c、d),然后调整页面布局大小
每张图纸的纸张大小是否相同,或者图纸之间的纸张大小是否不同? 考虑在Layouts集合上使用Add方法,然后使用CopyObjects方法将适当的项放置在新创建的布局上(可能需要Move方法?),然后是(从原始布局)复制的对象的删除方法。
编辑-在采取任何操作之前,我会先制作一个无效的图形副本*(使用vl文件副本),更不用说使用保存/另存为方法了!
幸运的是,对于特定的图纸,纸张大小都是相同的
这意味着,如果B-size Tblock,则对于该单个图形,其余为B-size。
另一件事是,一些布局可能有多达10个TBlock(9个以上的布局选项卡)
我无法想象如何开始为此编写代码。曾想过使用ODBX,但又一次。我可能需要通过ssget选择一个窗口,这对ODBX来说是不可能的
哦,好吧,我会继续挖掘
谢谢Dink87522
由于所有尺寸都相同(每个图形),因此这为您的例程中预定义的尺寸、距离等提供了所需的条件过滤器。
我已经在我之前帖子中列出的函数中为您提供了一个起点。
有两种方法可以通过Visual LISP实现这一点-使用或不使用ODBX。无论如何,您首先需要一个工作函数。
这就是说,vlax for方法将需要在with选项中单步遍历布局的块对象,而ssget“_x”可以在with选项中使用。
我建议您先编写一个不使用ODBX的函数,因为这样会更简单,并且允许使用命令。
将遵守。谢谢Renderman 这是草稿:
(defun SepLayout (blkname / adoc LayoutColl pt_list NewLayoutTab space ObjToMove safObjects MoveToLayout)
(vl-load-com)
(cond ((and
(setq adoc (vla-get-activedocument (vlax-get-acad-object)))
(= (vla-get-activespace adoc) 0)
(= (vla-get-count (setq LayoutColl (vla-get-layouts adoc))) 2)
(vlax-for
objs (vla-get-paperspace adoc)
(cond
((and
(eq (vla-get-objectname objs) "AcDbBlockReference")
(eq (vla-get-name objs) blkname)
(setq pt_list
(cons
(vlax-safearray->list
(variant-value
(vlax-get-property objs 'insertionpoint)
)
)
pt_list
)
)
)
)
) T
)
(repeat (setq i (1- (length pt_list)))
(vla-add LayoutColl (setq NLNAme (strcat "NLayout " (itoa (setq i (1- i)))))
)
(setq NewLayoutTab (cons NLNAme NewLayoutTab ))
)
(foreach SpaceToMove NewLayoutTab
(setq space (vla-item LayoutColl SpaceToMove))
(ssget "_W"(car pt_list)
(mapcar '+ (car pt_list) '(36.0 24.0)));<---size of Tblock
(vlax-for x (setq ObjToMove (vla-get-activeselectionset aDoc))
(setq MoveToLayout (cons x MoveToLayout)))
(vla-delete ObjToMove)
(vla-CopyObjects ADoc
(vlax-make-variant
(vlax-safearray-fill
(vlax-make-safearray
vlax-vbObject
(cons 0 (1- (length MoveToLayout)))
)
MoveToLayout
)
)
(vla-get-block space)
)
(foreach O MoveToLayout (vla-delete O))
(setq pt_list (cdr pt_list) MoveToLayout nil)
)
)
)
)
)
键入“LayoutCutter”开始。
很好,我的朋友,我唯一要做的就是把上面的一行从“C”改成“W”
包围盒的方法是聪明的李。
现在告诉我,我的代码中缺少了什么,它没有复制视口对象
它复制除VPs之外的所有其他内容。有什么好处?(教!教!)
谢谢李
谢谢pBe,很高兴对你有用
您在SelectionSet中的所有对象上使用CopyObjects方法的方法是正确的,但是,每个布局都有一个PaperSpace视口(布局块定义中的第一项)-对与查看PaperSpace中的对象相关的视图进行编码。因此,以编程方式创建新布局时,必须创建/复制其关联的图纸空间视口。
另外,请注意,我使用CopyFrom方法也复制打印/页面设置设置。
当做
李
谢谢李,现在一切都有意义了
顺便说一句:ODBX不会在这一个工作,不是吗?那我只好将就一下剧本了
再次感谢
页:
[1]
2