如圖乐设,在Solidworks工程圖中會用到很多表讼庇,包括普通的表,明細(xì)表等近尚。本文我們先學(xué)習(xí)普通的表對象TableAnnotation以及表特征GeneralTableFeature的相關(guān)使用蠕啄。
GeneralTableFeature是表的特征體現(xiàn),TableAnnotation則是表特征的一個具體的表戈锻。本文將通過表的插入歼跟,獲取等操作,學(xué)習(xí)表類對象的一些常規(guī)使用方法格遭。
示例1 表格的插入
表格的插入主要使用了工程圖文檔對象的DrawingDoc::InsertTableAnnotation2方法哈街。本例中將插入一個使用模板的表格和一個自定義的表格
實(shí)例代碼
public static void InsertTable(ModelDoc2 SwDoc,string TempPath)
{
double x = 600 / 1000.0;
double y1 = 200 / 1000.0;
double y2 = 100 / 1000.0;
Sheet SwSheet = ((DrawingDoc)SwDoc).GetCurrentSheet();
double[] sheetprop = SwSheet.GetProperties2();
double scale = sheetprop[2] / sheetprop[3];
//使用表模板
SwDoc.SketchManager.CreateLine(0,0,0,x*1.0/ scale, y1 * 1.0 / scale, 0);
TableAnnotation SwTable1=((DrawingDoc)SwDoc).InsertTableAnnotation2(false, x, y1, (int)swBOMConfigurationAnchorType_e.swBOMConfigurationAnchor_TopRight, TempPath, 4, 6);
SwTable1.Title = "模板表格標(biāo)題";
SwTable1.GeneralTableFeature.GetFeature().Name = "示例模板表格";
//自定義表
SwDoc.SketchManager.CreateLine(0, 0, 0, x * 1.0 / scale, y2 * 1.0 / scale, 0);
TableAnnotation SwTable2 = ((DrawingDoc)SwDoc).InsertTableAnnotation2(false, x, y2, (int)swBOMConfigurationAnchorType_e.swBOMConfigurationAnchor_TopLeft,"", 4, 6);
SwTable2.Title = "自定義表格標(biāo)題";
SwTable2.GeneralTableFeature.GetFeature().Name = "示例自定義表格";
SwTable2.Text2[2, 3,true] = "測試文本";
}
實(shí)例效果
實(shí)例解析
DrawingDoc::InsertTableAnnotation2參數(shù)解讀
從實(shí)例的效果圖與分析可以看到,決定表格的位置拒迅,不僅和參數(shù)有關(guān)骚秦,也與表格的錨點(diǎn)設(shè)置類型有關(guān)。
通過TableAnnotation實(shí)例的屬性和方法璧微,我們可以對單元格進(jìn)行賦值作箍,插入行列等常規(guī)表格自動化操作。
實(shí)例2 獲取表格
本例將通過TableAnnotation前硫,GeneralTableFeature的方法屬性胞得,來獲取上例中插入的表格及獲取相關(guān)消息。
代碼實(shí)例
public static void GetTable(ModelDoc2 SwDoc,string TableName)
{
Feature SwTableFeat = ((DrawingDoc)SwDoc).FeatureByName(TableName);
if (SwTableFeat != null)
{
StringBuilder Sb = new StringBuilder("");
GeneralTableFeature gtf = SwTableFeat.GetSpecificFeature2();
TableAnnotation SwTabe = gtf.GetTableAnnotations()[0];
Sb.Append("表標(biāo)題:"+SwTabe.Title+"\r\n");
Sb.Append("內(nèi)容:" + SwTabe.Text2[2, 3,true]);
System.Windows.MessageBox.Show(Sb.ToString().Trim());
}
}
實(shí)例效果
實(shí)例分析
當(dāng)我們需要獲得表格中的信息時开瞭,可以通過特征獲取方式先獲得表特征對象GeneralTableFeature實(shí)例懒震,然后通過該特征獲得所需要操作的表對象TableAnnotation實(shí)例。這里不妨讀者先思考下GeneralTableFeature與TableAnnotation的關(guān)系嗤详。
實(shí)例3 表的拆分與合并
在實(shí)例2中个扰,我們看到我們需要先獲得GeneralTableFeature對象,再間接獲得TableAnnotation對象葱色。為什么TableAnnotation不能代表一個特征呢递宅?我們先來看下本實(shí)例,本實(shí)例對表進(jìn)行了行拆分和行合并苍狰。
實(shí)例代碼
public static void SetTable(ModelDoc2 SwDoc, string TableName)
{
Feature SwTableFeat = ((DrawingDoc)SwDoc).FeatureByName(TableName);
if (SwTableFeat != null)
{
StringBuilder Sb = new StringBuilder("");
GeneralTableFeature gtf = SwTableFeat.GetSpecificFeature2();
TableAnnotation SwTabe = gtf.GetTableAnnotations()[0];
#region 表格拆分
System.Windows.MessageBox.Show("分割前表數(shù)量:"+ gtf.GetTableAnnotationCount().ToString());
SwTabe.Split((int)swTableSplitLocations_e.swTableSplit_AfterRow, 1);
System.Windows.MessageBox.Show("分割后表數(shù)量:" + gtf.GetTableAnnotationCount().ToString());
SwTabe.Merge((int)swTableMergeLocations_e.swTableMerge_All);
System.Windows.MessageBox.Show("合并后表數(shù)量:" + gtf.GetTableAnnotationCount().ToString());
#endregion
}
}
實(shí)例效果
實(shí)例分析
從表格拆分后办龄,我們可以很明顯地看到,一個表格的特征GeneralTableFeature對應(yīng)了多個表格TableAnnotation實(shí)例淋昭。從這里我們可以進(jìn)一步理解GeneralTableFeature與TableAnnotation的區(qū)別俐填。
如下圖為本文的示例程序,源碼可上我的Github下載翔忽。操作步驟可見文章《公眾號源碼Github分享庫》 英融, 實(shí)例序號23