问题描述:
用户有功能涉及到需要新建文档初始化一些标注样式,但是发现设置"_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
