乐筑天下

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

删除所有布局

[复制链接]

129

主题

422

帖子

5

银币

中流砥柱

Rank: 25

铜币
936
发表于 2016-8-31 23:50:52 | 显示全部楼层 |阅读模式
在下面找到了这段代码:http://forums.autodesk.com/t5/net/erasing-layouts/td-p/2669032它看起来很简单,我看不出它有什么严重的问题,但希望其他人输入。如果您有以这种方式删除绘图中所有布局的经验,您介意提供输入吗?[命令方法("EraseAllLayout")]。
公共静态无效擦除所有布局(){。

文档文档=Application.DocumentManager.MdiActiveDocument;。
数据库db=doc.Database;。
编辑doc.Editor。

使用(事务tr=db.TransactionManager.StartTransaction ()) {。

ACAD_LAYOUT字典。
DBDicpedia layoutDict=tr.GetObject(db.LayoutDictionaryId,OpenMode.ForRead)作为DBDicpedia;。

//迭代字典条目,。
foreach(layoutDict中的DBDictionaryEntry de){。
字符串布局名称=de.Key;。
if(layoutName!="Model"){。
LayoutManager.Current.DeleteLayout(layoutName);//删除布局,。
}。
}。
}。

ed.Regen (); // 更新AutoCAD GUI以关联更改,。
}。

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2016-9-1 05:40:30 | 显示全部楼层
除了不能删除所有布局外,看起来还可以。您必须至少保留一个图纸空间布局
我所做的是添加一个带有“-template”的布局,并将其用作模板布局,然后将其克隆为新布局,然后使用if中的条件将其过滤出循环,而不是删除它
类似这样:
迭代字典条目。
foreach(布局中的DBDictionaryEntry de)
{
字符串layoutName=de.Key
如果(layoutName!=“Model”&&!layoutnam.包含(“-template”)
{
LayoutManager.Current。删除布局(layoutName);//删除布局。
}
}

回复

使用道具 举报

24

主题

1265

帖子

1028

银币

后起之秀

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

铜币
362
发表于 2016-9-1 08:23:25 | 显示全部楼层
不要忘记提交事务。
回复

使用道具 举报

jon

2

主题

6

帖子

2

银币

初来乍到

Rank: 1

铜币
14
发表于 2016-9-1 17:07:34 | 显示全部楼层

我知道这里的上下文是.NET,但是如果你做这样的事情,它将删除所有布局,然后创建一个新的“Layout1”作为默认布局。即使您在运行布局时处于布局中。
  1. (foreach item (layoutlist) (vl-cmdf "._layout" "_delete" item))

回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2019-6-13 07:42:32 | 显示全部楼层
当通过ReadDwgFile()方法对外部DWG执行LayoutManager操作时,我得到了一些非常奇怪的行为。对我有效的解决方案是在执行操作之前和之后将活动布局设置为modelspace。希望这能节省一些时间。据我所知,这一定是LayoutManager本身的一个错误,可能与缓存的视口或regen有关,因为只要我在打开的DWG上使用它,代码就可以完美地工作
示例:
  1. //My code is looping through all the layouts in a DWG looking for one specific layout that I know the name of.
  2. //All the other layouts are to be deleted.
  3. DBDictionary layouts;
  4. Database externalDatabase = new Database(false, true);
  5. externalDatabase.ReadDwgFile(@"C:\Users\MyUser\Drawing.dwg", FileOpenMode.OpenForReadAndAllShare, true, "");
  6. HostApplicationServices.WorkingDatabase = externalDatabase;
  7. ObjectId modelSpaceId = LayoutManager.Current.GetLayoutId("Model");
  8. using (var transaction = externalDatabase.TransactionManager.StartTransaction())
  9. {
  10.     //In the method I use I have to set OpenMode.ForWrite
  11.     //but in most cases I guess OpenMode.ForRead would be enough
  12.     layouts = (DBDictionary)transaction.GetObject(externalDatabase.LayoutDictionaryId, OpenMode.ForWrite);
  13.     transaction.Commit();
  14.     transaction.Dispose();
  15. }
  16. foreach (DBDictionaryEntry layout in layouts)
  17. {
  18.     if (String.Equals(layout.Key, "Model"))
  19.     {
  20.         continue;
  21.     }
  22.     else if (String.Equals(layout.Key, "Name Of Layout To Keep"))
  23.     {
  24.         continue;
  25.     }
  26.     else
  27.     {
  28.         LayoutManager.Current.SetCurrentLayoutId(modelSpaceId);
  29.         LayoutManager.Current.DeleteLayout(layout.Key);
  30.         LayoutManager.Current.SetCurrentLayoutId(modelSpaceId);
  31.     }
  32. }
  33. //Don't forget to switch HostApplicationServices.WorkingDatabase back to the original database

当我寻找与我有相同问题的人时,我在谷歌上发现了这条线索,因此如果其他人发现了这一线索,我认为在这里发布解决方案比创建自己的线索更为简洁。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-2-4 06:48 , Processed in 0.152681 second(s), 62 queries .

© 2020-2025 乐筑天下

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