问题描述: 

用户有功能涉及到需要新建文档初始化一些标注样式,但是发现设置"_ARCHTICK"建筑箭头样式无效等问题,原因是这些自带样式需要加载一次才能运行。


步骤指引:

下面是客户代码:

 public static ObjectId AddDimStyle( Database db, string styleName)
        {
            //打开标注样式表
            DimStyleTable dst = (DimStyleTable)db.DimStyleTableId.GetObject(OpenMode.ForRead);
            if (!dst.Has(styleName))//如果不存在名为styleName的标注样式,则新建一个标注样式
            {
                //定义一个新的标注样式表记录
                DimStyleTableRecord dstr = new DimStyleTableRecord();
                dstr.Name = styleName;//设置标注样式名
                dst.UpgradeOpen();//切换标注样式表的状态为写以添加新的标注样式
                dst.Add(dstr);//将标注样式表记录的信息添加到标注样式表中
                //把标注式表记录添加到事务处理中
                db.TransactionManager.AddNewlyCreatedDBObject(dstr, true);
                dst.DowngradeOpen();//为了安全,将标注样式表的状态切换为读
            }
            return dst[styleName];//返回新添加的标注样式表记录的ObjectId
        }
    

    [CommandMethod("HelloCS")]
        static public void HelloCS()
        {
            Database db = HostApplicationServices.WorkingDatabase;
            Document doc = Application.DocumentManager.GetDocument(db);
            ZwSoft.ZwCAD.EditorInput.Editor ed = doc.Editor;
            using (Transaction tr = db.TransactionManager.StartTransaction())
            {
                BlockTable bt = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead);
                ObjectId dimId = AddDimStyle(db,"test");

                DimStyleTableRecord dstr   = (DimStyleTableRecord)tr.GetObject(dimId, OpenMode.ForWrite);

                dstr.Dimasz = 10;//箭头大小
                dstr.Dimexe = 20;//超出尺寸线的大小
                dstr.Dimtad = 20;//文字位于标注线的上方距离
                dstr.Dimtxt = 20;//标注文字的高度
                dstr.Dimdec = 0;//小数位数
                dstr.Dimtvp = 1;//标注文字位于标注线之上


  
                if (bt.Has("_ARCHTICK"))
                {
                    dstr.Dimblk = bt["_ARCHTICK"];
                }

                db.Dimstyle = dimId;

                db.SetDimstyleData(dstr);
                tr.Commit();

            }
        }

调试发现新建的图纸if (bt.Has("_ARCHTICK"))根本不包含_ARCHTICK块定义,可以设置下系统变量的方法加载这个块定义:Application.SetSystemVariable("DIMBLK", "_ARCHTICK");

其他思路:

新建图纸初始化步骤可以手动保存在dwt模版文件中,如标注样式,文字样式,线型样式,图层信息等,这样既能减轻开发而且稳定不容易出错。



英文空间链接

★创建标注样式系统默认箭头样式加载失败怎么处理?https://confluence.zwcad.com/pages/viewpage.action?pageId=298355855
  • No labels