加载自定义线形出错
本人写了一段加载自定义线形文件,并给实体设置线形的代码,想实现根据YaoSDM设置线形的功能。自定义的线形都在CAD中加载并测试了,都没有问题(据此,我推断自定义的线形文件没问题)。代码运行后,一部分实体实现了线形设置(据此,我推断代码应该是没错的),另一部分却没有变化。我一行一行地对代码进行了跟踪调试,也没有问题,可是线形就是没有实现想要的效果。请各路高手给指导一二吧。代码如下:
//线型文件符号化
public void setLineType(ObjectId id, string YaoSDM,string layerName)
{
Database db = HostApplicationServices.WorkingDatabase;
Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
using (Transaction tr = db.TransactionManager.StartTransaction())
{
Entity ent = (Entity)tr.GetObject(id, OpenMode.ForWrite);
LinetypeTable ltt = tr.GetObject(db.LinetypeTableId, OpenMode.ForRead) as LinetypeTable;
#region 加载线型文件
if (!ltt.Has(YaoSDM))
{
try
{
db.LoadLineTypeFile(YaoSDM, @"E:\Referrence\CAD\填充图案和线形\线形文件\测绘线形及相关形文件\myline.lin");
LinetypeTableRecord lttr = (LinetypeTableRecord)tr.GetObject(ltt, OpenMode.ForRead);
//ent.Linetype = YaoSDM;
ent.LinetypeId = lttr.ObjectId;
ent.Layer = layerName;
ed.WriteMessage("线型" + YaoSDM + "已实现!\n");
}
catch
{
ed.WriteMessage("要素代码" + YaoSDM + "的线型不存在!\n");
//YaoSDM = "CENTER";
//if (!ltt.Has(YaoSDM))
//db.LoadLineTypeFile(YaoSDM, @"C:\Program Files\AutoCAD 2008\Support\acadiso.lin");
}
}
else
{
LinetypeTableRecord lttr = (LinetypeTableRecord)tr.GetObject(ltt, OpenMode.ForRead);
ent.Linetype = YaoSDM;
ent.Layer = layerName;
ed.WriteMessage("线型" + YaoSDM + "已实现!\n");
}
#endregion
db.LineWeightDisplay = true;
db.Ltscale = 0.5;
tr.Commit();
}
}
建议你把线型加载到一个特定的文件,然后用db.wblockdeepclone复制到当前文件试试 回复 lzh741206 的帖子
谢谢老大,发现了一个奇怪的现象。就是先把图像放大,再运行代码,就能看到效果。否则,图像太小,就实现不了。我觉得可能跟比例有关,目前还没解决办法。先试试老大的方法。 或许应该看看线型比例 回复 sieben 的帖子
线形比例做了调整,但是没有起到作用。。。。 你提到部分变了,部分没变?两部分有什么区别?
若两个完全一样的直线,会不会一个变一个不变?
会不会第一次是上面的情况,后面就正常了? 回复 sieben 的帖子
部分线形能实现,部分线形实现不了,两部分的区别除了加载的线形文件不同,别的没什么区别。若两个完全一样的直线,就是加载同一个线形文件要么都能实现,要么不能实现。会出现这样的情况,如果把图形放大很多,所有的线形都能实现,如果图形太小,部分线形就实现不了。。 本帖最后由 sieben 于 2010-12-11 00:26 编辑
你说的图形很小时你的线型实现不了,那是不是显示成实线的样子?我猜还是线型比例的问题,图形很小时,你把线型比例也设得很小看看,比如设置成0.001,或更小,或反过来设置成很大的数值。
另外你可以对比一下你的线型文件里面线型的数值和AutoCAD的Dashed或Center线型的数值,看看会不会相差太大或太小。 csu_yijie 贴图说明下吧
页:
[1]