• cad.net 标注样式替代的处理


    原因

    lisp语句:

    (setvar "dimtxt" 123)   ;控制标注文字高度
    

    当我们使用这些标注样式变量,会令标注出现<样式替代>,那么怎么去掉这个东西呢?

    放弃<样式替代>

    [CommandMethod("DimRestoreAndEnable")]
    public static void DimRestoreAndEnable()
    {
        Database db = HostApplicationServices.WorkingDatabase;//当前的数据库
        Editor ed = Acap.DocumentManager.MdiActiveDocument.Editor;
        ed.WriteMessage(Environment.NewLine + "****惊惊连盒-恢复标注替代样式");
    
        db.Action(tr =>
                  {               
                      var oldDimData = tr.GetObject(db.Dimstyle, OpenMode.ForRead) as DimStyleTableRecord;
                      db.SetDimstyleData(oldDimData);
                  });
    }
    

    获取<样式替代>并且设置新标注样式

    [CommandMethod("DimRestoreAndEnable")]
    public static void DimRestoreAndEnable()
    {
        Database db = HostApplicationServices.WorkingDatabase;//当前的数据库
        Editor ed = Acap.DocumentManager.MdiActiveDocument.Editor;
        ed.WriteMessage(Environment.NewLine + "****惊惊连盒-恢复标注替代样式");
    
        db.Action(tr =>
                  {                
                    var currentDimData = db.GetDimstyleData();//临时样式的数据
                    var dt = tr.GetObject(db.DimStyleTableId, OpenMode.ForRead) as DimStyleTable;
                    dt.UpgradeOpen();
                    currentDimData = currentDimData.Clone() as DimStyleTableRecord; //需要与否
                    currentDimData.Name += "我是新标注样式"; //同时存在的样式,名字冲突了并不会覆盖,后者会变成空白名字在面板上
                    dt.Add(currentDimData);
                    tr.AddNewlyCreatedDBObject(currentDimData, true);
                    db.SetDimstyleData(currentDimData);
                  });
    }
    

    应用<样式替代>到当前标注上

    [CommandMethod("DimRestoreAndEnable")]
    public static void DimRestoreAndEnable()
    {
        Database db = HostApplicationServices.WorkingDatabase;//当前的数据库
        Editor ed = Acap.DocumentManager.MdiActiveDocument.Editor;
        ed.WriteMessage(Environment.NewLine + "****惊惊连盒-恢复标注替代样式");
    
        db.Action(tr =>
                  {
                      // 临时样式的数据
                      var currentDimData = db.GetDimstyleData();
                      // 当前标注样式
                      var dim = tr.GetObject(db.Dimstyle, OpenMode.ForRead) as DimStyleTableRecord;
                      dim.UpgradeOpen();
                      var name = dim.Name;//名字这些不能删除,否则会变空白
                      dim.CopyFrom(currentDimData);//复制样式到当前
                      dim.Name = name;
                  });
    }
    

    1,我单纯认为当前标注样式是替代样式的宿主,事实上并不是,否则删除当前标注样式,替代样式也应该删掉,
    而我删掉之后,它会跑到新设定的当前标注上.
    那么这就表示了替代样式是唯一的,也可称为临时样式,它仅仅为样式变量的副本.
    而为什么有这个副本呢?
    大概是临时对象设定到真实对象时候需要有一个缓存,这个缓存是cad的操作一切的标准.

    2.如果新建一个标注样式替代旧的,那么已有引用的会引发错误,你需要遍历全图标注设置到新标注样式上,所以这不是很正确的思路.

    (完)

  • 相关阅读:
    cmd启动数据库时,出现 (无法启动此程序,因为计算机中丢失VCRUNTIME140_1.dll 尝试重新安装此程序以解决此问题 )解决方法。
    浅谈Promise语法API+封装
    浅谈JS回调地狱
    MySQL数据库安装步骤
    将MongoDB安装为Windows服务---安装MongoDB服务
    后缀.msc文件是什么?
    Mongoose类库使用教程---实现增删改查
    MongoDB可视化工具--Robo 3T 安装使用教程
    久违的锻炼
    出差(2~十四)
  • 原文地址:https://www.cnblogs.com/JJBox/p/14726877.html
Copyright © 2020-2023  润新知