從特征樹上可以看到拙毫,每個帶引用的視圖上都引用了一個模型實例缀蹄,這個模型實例可以是一個零件缺前,也可以是一個裝配體。
如下圖所示,同樣一個模型或裝配體能同時被好幾個視圖以不同的實例號進行引用肆良。這樣我們就能對不同的視圖中相同的部件進行一些不同的設(shè)置夭谤,如線型設(shè)置朗儒,隱藏顯示部件等醉锄。
本文我們就來介紹下這個被視圖引用的模型對象DrawingComponent开呐。
DrawingComponent對象可以看作是零部件筐付,裝配體與工程圖進行數(shù)據(jù)交互的橋梁沮尿。故可以通過工程圖中的DrawingComponent間接地直接獲得對應(yīng)零件或裝配體的文檔對象蛹找,進而獲取更詳細的零部件數(shù)據(jù)庸疾。
實例1:獲取DrawingComponent實例
獲取DrawingComponent最直接的方式就是通過視圖對象View實例獲得。
代碼示例:
public static void GetViewComp(ModelDoc2 SwDoc, string ViewName)
{
Feature SwFeat = ((DrawingDoc)SwDoc).FeatureByName(ViewName);
View SwView = SwFeat.GetSpecificFeature2();
DrawingComponent SwDrawComp = SwView.RootDrawingComponent;
StringBuilder Sb = new StringBuilder("");
Sb.Append("視圖部件名:" + SwDrawComp.Name + "\r\n");
Sb.Append("所屬視圖名:" + SwDrawComp.View.Name + "\r\n");
Sb.Append("部件名:" + SwDrawComp.Component.Name2 + "\r\n");
Sb.Append("子部件數(shù)量:" + SwDrawComp.GetChildrenCount().ToString().Trim() + "\r\n");//直接關(guān)聯(lián)的頂層部件
System.Windows.MessageBox.Show(Sb.ToString().Trim());
}
執(zhí)行效果:
實例分析:
主要通過View.RootDrawingComponent屬性鲤桥,獲得視圖的根模型對象
實例2:獲取DrawingComponent對應(yīng)的模型信息
代碼示例:
public static void GetViewCompInfo(ModelDoc2 SwDoc, string ViewName, string DocCuspName)
{
Feature SwFeat = ((DrawingDoc)SwDoc).FeatureByName(ViewName);
View SwView = SwFeat.GetSpecificFeature2();
DrawingComponent SwDrawComp = SwView.RootDrawingComponent;
StringBuilder Sb = new StringBuilder("");
Component2 SwComp = SwDrawComp.Component;
ModelDoc2 CompDoc = SwComp.GetModelDoc2();
Sb.Append(SwDrawComp.Name + ":" + CompDoc.Extension.CustomPropertyManager[""].Get(DocCuspName).ToString().Trim() + "\r\n");
object[] ObjDrawComps = SwDrawComp.GetChildren();
foreach (object ObjDrawComp in ObjDrawComps)
{
SwComp = ((DrawingComponent)ObjDrawComp).Component;
CompDoc = SwComp.GetModelDoc2();
Sb.Append(((DrawingComponent)ObjDrawComp).Name + ":" + CompDoc.Extension.CustomPropertyManager[""].Get(DocCuspName).ToString().Trim() + "\r\n");
}
System.Windows.MessageBox.Show(Sb.ToString().Trim());
}
執(zhí)行效果:
實例分析:
主要通過DrawingComponent.Component屬性獲得Component對象,并進而得到零部件的文檔對象ModelDoc2
實例3:設(shè)置視圖中部件的線型表達
由于DrawingComponent是一個視圖引用的實例猪狈,故通過其屬性即可直接設(shè)置部件在對應(yīng)視圖中的線型雇庙,顯示隱藏等信息
代碼示例:
//選中特征樹中的部件
public static void SetViewCompLine(ModelDoc2 SwDoc)
{
SelectionMgr SwSelMrg = SwDoc.SelectionManager;
DrawingComponent SwDrawComp = SwSelMrg.GetSelectedObjectsComponent4(1, 0);//需要選中特征樹中的部件,不能在視圖中直接選中部件
if (SwDrawComp == null)
{
System.Windows.MessageBox.Show("請在特征樹中選中部件!");
return;
}
SwDrawComp.Style = (int)swLineStyles_e.swLineCENTER;
SwDrawComp.Width = (int)swLineWeights_e.swLW_THICK6;
System.Windows.MessageBox.Show("部件" + SwDrawComp.Name + ",線性設(shè)置成功!");
}
執(zhí)行效果:
如下圖為本文的示例程序匈挖,源碼可上我的Github下載儡循。操作步驟可見文章《公眾號源碼Github分享庫》 择膝, 實例序號22