明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2414|回复: 8

[符号表] 加载自定义线形出错

[复制链接]
发表于 2010-12-8 16:43 | 显示全部楼层 |阅读模式
本人写了一段加载自定义线形文件,并给实体设置线形的代码,想实现根据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[YaoSDM], 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[YaoSDM], OpenMode.ForRead);
                        ent.Linetype = YaoSDM;
                        ent.Layer = layerName;
                        ed.WriteMessage("线型" + YaoSDM + "已实现!\n");
                    }
                    #endregion
                    db.LineWeightDisplay = true;
                    db.Ltscale = 0.5;
                    tr.Commit();
                }
        }
发表于 2010-12-8 20:00 | 显示全部楼层
建议你把线型加载到一个特定的文件,然后用db.wblockdeepclone复制到当前文件试试
 楼主| 发表于 2010-12-8 21:43 | 显示全部楼层
回复 lzh741206 的帖子

谢谢老大,发现了一个奇怪的现象。就是先把图像放大,再运行代码,就能看到效果。否则,图像太小,就实现不了。我觉得可能跟比例有关,目前还没解决办法。先试试老大的方法。
发表于 2010-12-10 11:10 | 显示全部楼层
或许应该看看线型比例
 楼主| 发表于 2010-12-10 11:15 | 显示全部楼层
回复 sieben 的帖子

线形比例做了调整,但是没有起到作用。。。。
发表于 2010-12-10 11:29 | 显示全部楼层
你提到部分变了,部分没变?两部分有什么区别?
若两个完全一样的直线,会不会一个变一个不变?
会不会第一次是上面的情况,后面就正常了?
 楼主| 发表于 2010-12-10 15:08 | 显示全部楼层
回复 sieben 的帖子

部分线形能实现,部分线形实现不了,两部分的区别除了加载的线形文件不同,别的没什么区别。若两个完全一样的直线,就是加载同一个线形文件要么都能实现,要么不能实现。会出现这样的情况,如果把图形放大很多,所有的线形都能实现,如果图形太小,部分线形就实现不了。。
发表于 2010-12-10 18:45 | 显示全部楼层
本帖最后由 sieben 于 2010-12-11 00:26 编辑

你说的图形很小时你的线型实现不了,那是不是显示成实线的样子?我猜还是线型比例的问题,图形很小时,你把线型比例也设得很小看看,比如设置成0.001,或更小,或反过来设置成很大的数值。
另外你可以对比一下你的线型文件里面线型的数值和AutoCAD的Dashed或Center线型的数值,看看会不会相差太大或太小。
发表于 2010-12-10 20:13 | 显示全部楼层
csu_yijie 贴图说明下吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-20 07:02 , Processed in 0.275069 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表