cad.net 標注樣式替代的處理


原因

lisp語句:

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

當我們使用這些標注樣式變量,會令標注出現<樣式替代>,那么怎么去掉這個東西呢?

(command "-dimstyle" "S" "dim100" "" "");保存樣式

放棄<樣式替代>

[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. 如果新建一個標注樣式替代舊的,那么已有引用的會引發錯誤,你需要遍歷全圖標注設置到新標注樣式上,所以這不是很正確的思路.

(完)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM