原因
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;
});
}
-
起初我單純認為當前標注樣式是替代樣式的宿主,事實上並不是,否則刪除當前標注樣式,替代樣式也應該刪掉,
而我刪掉之后,它會跑到新設定的當前標注上.
那么這就表示了替代樣式是唯一的,也可稱為臨時樣式,它僅僅為樣式變量的副本.
而為什么有這個副本呢?
大概是臨時對象設定到真實對象時候需要有一個緩存,這個緩存是cad的操作一切的標准. -
如果新建一個標注樣式替代舊的,那么已有引用的會引發錯誤,你需要遍歷全圖標注設置到新標注樣式上,所以這不是很正確的思路.
(完)
