乐筑天下

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

关闭绘图时设置默认图层

[复制链接]

50

主题

114

帖子

2

银币

后起之秀

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

铜币
314
发表于 2018-9-26 11:02:24 | 显示全部楼层 |阅读模式
大家好,我做错了什么,但我不知道是什么!我想要做的是在几个关闭的文档上设置一个默认层(在这个例子中是层0)。它没有把好的层,但在功能区,该层是空白的(见图片)。下面是我的代码:    private void btntraiter 2 _ Click(object sender,EventArgs e)。
{。
bool Ok2Continue = true。

for(int I = 0;我。
{。
Database db =新数据库(false,true);。
使用(数据库)。
{。
字符串文件名= dwgLst,GetKey(i),ToString();。

尝试{ db,ReadDwgFile(文件名,文件共享。ReadWrite,false,“”;}。

catch (Autodesk,AutoCAD . runtime . exception ex){ ok 2 continue = false;}。

if (Ok2Continue)。
{。
使用(事务tr = db,transaction manager . start transaction())。
{。
listLayerID = listDWGLayerID[fileName];。
ObjectId id = ObjectId,Null。
if (listLayerID,contains key(" 0 "))id = listLayerID[" 0 "];。
dbClayer = id。
trcommit();。
}。
}。

尝试{ db,另存为(文件名,真,数据库。原始版本,db。security参数);}。
捕捉{ MessageBox,Show("Error "," Error ");}。
}。
dbdispose();。
}。
}。
我已经用调试模式进行了检查,以确保我应用了有效的层id,它确实如此。它应该可以工作,因为一切都很好,但后来我做了一些改变,现在它不能工作了!它甚至适用于所有其他属性,如textstyle、leaderstyle、dimstyle...感谢您的宝贵帮助!。

ydsp2kiswrm.png

ydsp2kiswrm.png

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

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

使用道具 举报

15

主题

687

帖子

169

银币

中流砥柱

Rank: 25

铜币
582
发表于 2018-9-26 11:11:04 | 显示全部楼层
您好,
看起来您没有提交事务。
回复

使用道具 举报

50

主题

114

帖子

2

银币

后起之秀

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

铜币
314
发表于 2018-9-26 11:58:45 | 显示全部楼层
我的错误,代码很长,所以我做了一个简短的版本,我忘了保留那行。 我确实提交了交易。我将更正我的原始帖子。
回复

使用道具 举报

85

主题

404

帖子

7

银币

中流砥柱

Rank: 25

铜币
751
发表于 2018-9-26 12:45:46 | 显示全部楼层
如果使用 mdiActiveDocument 中的 TransactionManager 而不是 Database 对象,它是否有效?
Application.DocumentManager.MdiActiveDocument.TransactionManager.StartTransaction()
回复

使用道具 举报

15

主题

687

帖子

169

银币

中流砥柱

Rank: 25

铜币
582
发表于 2018-9-26 13:17:43 | 显示全部楼层
尝试在每个循环中更改工作数据库,私有空btnTraiter2_Click(对象发送者,EventArgs e)。
{。
//存储当前工作数据库。
var电流工作Db=HostApplicationServices.WorkingDatabase;。

对于(int i=0; i。
{。
使用(数据库db=新数据库(false, true))。
{。
string fileName=dwgLst.GetKey(i). ToString();。

尝试。
{。
db.ReadDwgFile(fileName,FileOpenMode.OpenForReadAndAllShare, false, "");。

使用(事务tr=db.TransactionManager.StartTransaction())。
{。
listLayerID=listDWGLayerID[fileName];。
ObjectId id=ObjectId.Null;。
if(listLayerID.ContainsKey("0"))id=listLayerID["0"];。
//将侧数据库设置为工作数据库。
HostApplicationServices.WorkingDatabase=db;。
db.Clayer=id;。
tr.Commit();。
}。

db.SaveAs(fileName, true,db.OriginalFileVersion,db.SecurityParameters);。
} // 。

捕获{MessageBox.Show("错误","错误"); }。
}。

//恢复工作数据库。
HostApplicationServices.WorkingDatabase/div>。
}。
}PS:我从您的代码中删除了一些无用的说明。
回复

使用道具 举报

50

主题

114

帖子

2

银币

后起之秀

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

铜币
314
发表于 2018-9-26 13:37:04 | 显示全部楼层
嗨,阿图克,
感谢您的回答。它仍然做同样的事情。
嗨,吉尔,
感谢您的回答。 我收到错误。
回复

使用道具 举报

15

主题

687

帖子

169

银币

中流砥柱

Rank: 25

铜币
582
发表于 2018-9-26 13:51:49 | 显示全部楼层
看起来您正在为每个文件使用ObjectIds(listLayerID)列表,这是不可靠的,可能是您收到此错误的原因。
ObjectIds是会话中的唯一标识符,但它们在会话之间是不持久的(它们在创建数据库时被构建为唯一的)。
您应该改用层名称并获取新创建的ObjectId:db.layerTable[layerName]。
回复

使用道具 举报

85

主题

404

帖子

7

银币

中流砥柱

Rank: 25

铜币
751
发表于 2018-9-26 14:43:54 | 显示全部楼层
我也很困惑,为什么你创建一个新的数据库,检查它的readall/share,然后在设置图层时切换到工作数据库。为什么不一直使用工作数据库呢?下面是我用来在活动数据库中设置层的代码   /// 。
///将层设置为当前层,如果它不存在则创建它。
/// 。
/// 层的名称,。
/// 颜色,。
/// 是否要打印创建的层。
/// 如果layername有效,则为True,否则为false  。
public static bool set layer(string layer name,short color=7,bool print=true)。
{。
if(IsValidSymbolName(layer name))。
{。
ObjectId layID = ObjectId,Null。
使用(事务tr = Active,document . transaction manager . start transaction())。
{。
layer table layer table =(layer table)tr,GetObject(活动,Database.LayerTableId,OpenMode。for read);。
如果(!分层表,Has(layerName))。
{。
LayerTableRecord new layer = new LayerTableRecord 。
{。
Name = layerName,。
Color = Color,FromColorIndex(ColorMethod,ByAci,color),。
isplotable = print 。
};。
图层表,upgrade open();。
layID=layerTable,add(new layer);。
trAddNewlyCreatedDBObject(new layer,true);。
}。
否则。
{。
layID = layer table[layer name];。
}。
LayerTableRecord层记录= (LayerTableRecord) tr,GetObject((layer table[layer name]),OpenMode。for write);。
if (layerRecord,IsFrozen)。
{。
层记录,IsFrozen = false。
} 。
尝试一下。
{。
激活,Database . Clayer = layID。
}。
catch(系统,例外e)。
{。
AID _应用程序,handle error(e);。
}。
trcommit();。
}。
}。
否则。
{。
激活,write message(" \ n无效的层名:"+层名");。
}。
返回IsValidSymbolName(layer name);。
}。
活动时,文档是mdiActiveDocument。
回复

使用道具 举报

50

主题

114

帖子

2

银币

后起之秀

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

铜币
314
发表于 2018-9-26 14:58:34 | 显示全部楼层
吉尔,容易多了,现在工作正常!谢谢!
Atook,我不习惯与亲密的dwg一起工作,我认为这是要走的路。 感谢您的代码和帮助!
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-2-4 08:44 , Processed in 0.228447 second(s), 84 queries .

© 2020-2025 乐筑天下

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