乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 91|回复: 11

[编程交流] 打开多个图形标题栏

[复制链接]
pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-6 09:34:43 | 显示全部楼层 |阅读模式
我对如何开始这一常规有点问题
我有一个布局上有多个绘图标题的绘图
 
这样地
103448th47f7gm2hvt4lwx.png
 
注释是在纸上完成的。
我需要在同一张图纸上将这些内容分离到它自己的布局选项卡中
创建布局,本例还有3个
检查每个选项卡,删除每个选项卡中四个选项卡中的三个。
 
这样行吗?
 
这些图纸有近2000张
 
有什么想法吗?
回复

使用道具 举报

44

主题

542

帖子

502

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
220
发表于 2022-7-6 09:43:47 | 显示全部楼层
这听起来像是一场噩梦。不过,你上面的方法听起来确实是“最好的”
-复制文件,然后在新文件中将每个布局再复制3次,然后删除每个布局上的所有相关区域(a、b、c、d),然后调整页面布局大小
 
每张图纸的纸张大小是否相同,或者图纸之间的纸张大小是否不同?
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 09:47:05 | 显示全部楼层
考虑在Layouts集合上使用Add方法,然后使用CopyObjects方法将适当的项放置在新创建的布局上(可能需要Move方法?),然后是(从原始布局)复制的对象的删除方法。
 
编辑-在采取任何操作之前,我会先制作一个无效的图形副本*(使用vl文件副本),更不用说使用保存/另存为方法了!
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-6 09:52:26 | 显示全部楼层
 
幸运的是,对于特定的图纸,纸张大小都是相同的
这意味着,如果B-size Tblock,则对于该单个图形,其余为B-size。
 
另一件事是,一些布局可能有多达10个TBlock(9个以上的布局选项卡)
 
我无法想象如何开始为此编写代码。曾想过使用ODBX,但又一次。我可能需要通过ssget选择一个窗口,这对ODBX来说是不可能的
 
哦,好吧,我会继续挖掘
 
谢谢Dink87522
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 10:01:35 | 显示全部楼层
 
由于所有尺寸都相同(每个图形),因此这为您的例程中预定义的尺寸、距离等提供了所需的条件过滤器。
 
 
我已经在我之前帖子中列出的函数中为您提供了一个起点。
 
有两种方法可以通过Visual LISP实现这一点-使用或不使用ODBX。无论如何,您首先需要一个工作函数。
 
这就是说,vlax for方法将需要在with选项中单步遍历布局的块对象,而ssget“_x”可以在with选项中使用。
 
我建议您先编写一个不使用ODBX的函数,因为这样会更简单,并且允许使用命令。
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-6 10:03:11 | 显示全部楼层
 
将遵守。谢谢Renderman
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-6 10:08:34 | 显示全部楼层
这是草稿:
 
  1. (defun SepLayout (blkname / adoc LayoutColl pt_list NewLayoutTab space ObjToMove safObjects MoveToLayout)
  2. (vl-load-com)
  3. (cond ((and
  4.   (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
  5.        (= (vla-get-activespace adoc) 0)
  6.   (= (vla-get-count (setq LayoutColl (vla-get-layouts adoc))) 2)
  7.   (vlax-for
  8.      objs (vla-get-paperspace adoc)
  9.     (cond
  10.       ((and
  11.          (eq (vla-get-objectname objs) "AcDbBlockReference")
  12.          (eq (vla-get-name objs) blkname)
  13.          (setq pt_list
  14.             (cons
  15.               (vlax-safearray->list
  16.                 (variant-value
  17.                   (vlax-get-property objs 'insertionpoint)
  18.                 )
  19.               )
  20.               pt_list
  21.             )
  22.          )
  23.        )
  24.       )
  25.     ) T
  26.   )
  27. (repeat (setq i (1- (length pt_list)))
  28. (vla-add LayoutColl (setq NLNAme (strcat "NLayout " (itoa (setq i (1- i)))))
  29.           )
  30.    (setq NewLayoutTab (cons NLNAme NewLayoutTab ))
  31.   )
  32. (foreach SpaceToMove NewLayoutTab
  33.    (setq space (vla-item LayoutColl SpaceToMove))
  34.    (ssget "_W"  (car pt_list)
  35. (mapcar '+ (car pt_list) '(36.0 24.0)))[color=blue];<---size of Tblock[/color]
  36.    (vlax-for x (setq ObjToMove (vla-get-activeselectionset aDoc))
  37.            (setq MoveToLayout (cons x MoveToLayout)))
  38.    (vla-delete ObjToMove)
  39. (vla-CopyObjects ADoc
  40.           (vlax-make-variant
  41.             (vlax-safearray-fill
  42.               (vlax-make-safearray
  43.                 vlax-vbObject
  44.                 (cons 0 (1- (length MoveToLayout)))
  45.               )
  46.               MoveToLayout
  47.             )
  48.           )
  49.           (vla-get-block space)
  50.         )
  51. (foreach O MoveToLayout (vla-delete O))
  52.    (setq pt_list (cdr pt_list) MoveToLayout nil)
  53.     )
  54.    )
  55.       )
  56. )
  57. )

 
键入“LayoutCutter”开始。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:15:18 | 显示全部楼层
 
很好,我的朋友,我唯一要做的就是把上面的一行从“C”改成“W”
 
包围盒的方法是聪明的李。
 
现在告诉我,我的代码中缺少了什么,它没有复制视口对象
 
它复制除VPs之外的所有其他内容。有什么好处?(教!教!)
 
谢谢李
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-6 10:23:01 | 显示全部楼层
 
谢谢pBe,很高兴对你有用
 
 
您在SelectionSet中的所有对象上使用CopyObjects方法的方法是正确的,但是,每个布局都有一个PaperSpace视口(布局块定义中的第一项)-对与查看PaperSpace中的对象相关的视图进行编码。因此,以编程方式创建新布局时,必须创建/复制其关联的图纸空间视口。
 
另外,请注意,我使用CopyFrom方法也复制打印/页面设置设置。
 
当做
 
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:28:59 | 显示全部楼层
 
谢谢李,现在一切都有意义了
 
顺便说一句:ODBX不会在这一个工作,不是吗?那我只好将就一下剧本了
 
再次感谢
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-7 01:54 , Processed in 0.356821 second(s), 75 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表