读取模板文件时出现问题
您好:我有一个应用程序创建使用vb。net 2014,它使用autocad。net api。我有一个自定义命令,当输入时,它打开一个位于用户本地驱动器上的模板,然后读取它,然后创建一个副本,并将一组数据放入其中。
无论如何,我不得不修改模板,因为我们公司想要一个新的标志。看起来应该很容易。。。。当然不是。
这是一个漫长的一周。。。。在将新徽标放入模板后,每次运行该命令时,它都会一直挂起,我甚至无法按ctrl、alt、delete键将其删除。。。不得不冷落它。哎哟所以考虑起来很费时,大约需要30分钟的时间来了解真正发生的事情。
首先,它在这条线上爆炸:
dbTemplate.ReadDwgFile(sBOM_EstimatePath &
"CO_TEMPLATE_1German.dwt", System.IO.FileShare.Read, True, Nothing)
没有消息。。。但它只是冻结,直到我必须重新启动。
我发现这与新标志无关。如果我删除这个模板中的任何内容并保存,它就是这样做的。
我猜想,虽然我正在删除,例如文本、块和其他对象,如多段线,但它在某处保留了信息?
我可以尝试从头开始创建一个新模板,但这样做时会遇到其他问题,所以我想从这里开始,看看是否有人有任何想法可以帮助我。
谢谢你的帮助。
监考人员
看看这篇文章:
http://adndevblog.typepad.com/autocad/2013/07/changing-rasterimage-name.html
可能会有帮助
我只是在我的机器上玩(使用A2010)
更改设置:
//原始代码:
//http://adndevblog.typepad.com/autocad/2012/07/getset-image-paths-in-drawing-using-net-api.html
//使用虚拟模板扭曲
[命令方法(“Proctor”,CommandFlags.Modal | CommandFlags.UsePickSet)]
public void EditImagePath()
{
布尔结果=真;
数据库db=HostApplicationServices。工作数据库;
编辑器ed=Autodesk。AutoCAD。应用程序服务。应用DocumentManager。MdiActiveDocument。编辑
PrompEntityOptions peo=新PrompEntityOptions(“\n选择图像”);
peo。SetRejectMessage(“\n所选实体必须是图像。”);
peo。AddAllowedClass(typeof(光栅图像),false);
PrompEntityResult per=ed.GetEntity(peo);
if(per.Status!=PromptStatus.OK)
回来
ObjectId imageId=per。ObjectId;
ObjectId oldriId=ObjectId。无效的
ObjectId newridId=ObjectId。无效的
尝试
{
使用(Transaction tr=db.TransactionManager.StartTransaction())
{
ObjectId dictId=光栅图像定义。GetImageDictionary(db);
如果(!dicted.IsNull)
{
DBDictionary dict=tr.GetObject(
措辞,
OpenMode。ForRead公司
)作为DBDictionary;
if(dict.Contains(“OldImageLogo”))
{
//步骤1:基于创建新的RasterImageDef
//旧光栅图像定义
oldridId=dict.GetAt(“OldImageLogo”);
光栅图像定义oldrid=tr.GetObject(
奥尔德里德,
OpenMode。ForWrite公司
)作为光栅图像定义;
RasterImageDef newrid=新RasterImageDef();
纽里德。SourceFileName=“C:\\Test\\NewImageLogo.jpg”//奥尔德里德。SourceFileName;
纽里德。ActiveFileName=“C:\\Test\\NewImageLogo.jpg”//奥尔德里德。ActiveFileName;
纽里德。Load();
dict.UpgradeOpen();
newridId=dict.SetAt(“NewImageLogo”,newrid);
tr.AddNewlyCreatedDBObject(newrid,true);
//步骤2:关联现有光栅图像
//使用新创建的RasterImageDef
光栅图像。EnableReactors(true);
ObjectId msId=db。CurrentSpaceId//SYMBOL公用事业服务。GetBlockModelSpaceId(db);
BlockTableRecord ms=tr.GetObject(
msId,
OpenMode。ForRead公司
)作为BlockTableRecord;
foreach(ms中的ObjectId id)
{
if(id.ObjectClass.IsDerivedFrom(
RX类。GetClass(typeof(光栅图像)))
{
光栅图像ri=tr.GetObject(
身份证件,
OpenMode。ForRead公司
)作为光栅图像;
if(ri.ImageDefId.Equals(oldriid))
{
ri。UpgradeOpen();
ri。AssociateRasterDef(newrid);
ri。ImageDefId=newridId;
}
}
}
//步骤3:分离并擦除旧的RasterImageDef
光栅图像。使能电抗器(假);
奥尔德里德。卸载(true);
奥尔德里德。擦除();
}
}
tr.Commit();
}
}
捕捉(System.Exception ex)
{
结果=假;
ed.WriteMessage(例如消息);
}
最后
{
如果(结果)
Autodesk。AutoCAD。应用程序服务。应用ShowAlertDialog(“手动另存为新DWT文件”);
}
}
页:
[1]