乐筑天下

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

加载自定义线形出错

[复制链接]

6

主题

33

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
57
发表于 2010-12-8 16:43:00 | 显示全部楼层 |阅读模式
本人写了一段加载自定义线形文件,并给实体设置线形的代码,想实现根据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\ 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();
                }
        }
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2010-12-8 20:00:00 | 显示全部楼层
建议你把线型加载到一个特定的文件,然后用db.wblockdeepclone复制到当前文件试试
回复

使用道具 举报

6

主题

33

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
57
发表于 2010-12-8 21:43:00 | 显示全部楼层
回复
谢谢老大,发现了一个奇怪的现象。就是先把图像放大,再运行代码,就能看到效果。否则,图像太小,就实现不了。我觉得可能跟比例有关,目前还没解决办法。先试试老大的方法。
回复

使用道具 举报

32

主题

651

帖子

8

银币

中流砥柱

Rank: 25

铜币
779
发表于 2010-12-10 11:10:00 | 显示全部楼层
或许应该看看线型比例
回复

使用道具 举报

6

主题

33

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
57
发表于 2010-12-10 11:15:00 | 显示全部楼层
回复
线形比例做了调整,但是没有起到作用。。。。
回复

使用道具 举报

32

主题

651

帖子

8

银币

中流砥柱

Rank: 25

铜币
779
发表于 2010-12-10 11:29:00 | 显示全部楼层
你提到部分变了,部分没变?两部分有什么区别?
若两个完全一样的直线,会不会一个变一个不变?
会不会第一次是上面的情况,后面就正常了?
回复

使用道具 举报

6

主题

33

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
57
发表于 2010-12-10 15:08:00 | 显示全部楼层
回复
部分线形能实现,部分线形实现不了,两部分的区别除了加载的线形文件不同,别的没什么区别。若两个完全一样的直线,就是加载同一个线形文件要么都能实现,要么不能实现。会出现这样的情况,如果把图形放大很多,所有的线形都能实现,如果图形太小,部分线形就实现不了。。
回复

使用道具 举报

32

主题

651

帖子

8

银币

中流砥柱

Rank: 25

铜币
779
发表于 2010-12-10 18:45:00 | 显示全部楼层

你说的图形很小时你的线型实现不了,那是不是显示成实线的样子?我猜还是线型比例的问题,图形很小时,你把线型比例也设得很小看看,比如设置成0.001,或更小,或反过来设置成很大的数值。
另外你可以对比一下你的线型文件里面线型的数值和AutoCAD的Dashed或Center线型的数值,看看会不会相差太大或太小。
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2010-12-10 20:13:00 | 显示全部楼层
csu_yijie 贴图说明下吧
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-15 17:39 , Processed in 0.582697 second(s), 70 queries .

© 2020-2025 乐筑天下

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