大家好,今天要讲的文章是和BOM表特性相关的API。
下面为要介绍的API:
(1)第一个为GetConfigurationCount,这个API的含义为获取此BOM表可用或在此BOM表中使用的配置数,下面是官方的具体解释:
其输入的参数值为bool值,当为true的时候,表示获取该表中当前显示的配置数,当为false的时候,表示获取该表中可用配置的总数。
返回值为此BOM表中或可用于此BOM表的配置个数。
使用API的时候可以先看一下备注:
The view associated with this BOM can contain a model with multiple configurations.
For a top-level only style BOM table, there can be several Quantity columns, each showing the results for a different configuration. For the other styles of BOM tables, only a particular configuration can be shown in the table, and that configuration can be changed. To determine the style of the BOM table, use IBomFeature::TableType.
If OnlyVisible is... | Then the value returned is... |
True | Number of configurations currently shown in the BOM table. For a top-level only style BOM table, this could be any number from 0 to the total number of configurations available. For the other styles of BOM tables, this value is always 1. |
false | Total number of configurations available. |
To get the configuration names, call IBomFeature::GetConfigurations or IBomFeature::IGetConfigurations.
Call this method before calling IBomFeature::IGetConfigurations to get the number of configurations.
(2)第二个为GetFeature,这个API的含义为获取BOM表的特征,下面是官方的具体解释:
其没有输入值,只有返回值为指向BOM表特征的指针对象。
下面是官方使用的例子:
This example shows how to get the components in each row of a BOM table annotation.
//-----------------------------------------------------------------------------
// Preconditions:
// 1. Open public_documents\samples\tutorial\assemblyvisualize\food_processor.sldasm.
// 2. Make a drawing from the assembly.
// 3. Click Insert > Tables > Bill of Materials.
// 4. Ensure that Parts only in Bom Type is selected.
// 5. Ensure that Display configurations of the same part separate items
// in Part Configuration Grouping is selected.
// 6. Click OK.
// 7. Click anywhere in the drawing to insert the BOM table.
//
// Postconditions:
// 1. Gets the Bill of Materials1 feature.
// 2. Gets the Default configuration.
// 3. Processes the BOM table for the Default configuration.
// 4. Examine the Immediate window.
//
// NOTE: Because the assembly is used elsewhere, do not save changes.
//-----------------------------------------------------------------------------
using Microsoft.VisualBasic;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using SolidWorks.Interop.sldworks;
using SolidWorks.Interop.swconst;
namespace Macro1CSharp.csproj
{
partial class SolidWorksMacro
{
public void ProcessTableAnn(SldWorks swApp, ModelDoc2 swModel, TableAnnotation swTableAnn, string ConfigName)
{
int nNumRow = 0;
int J = 0;
int I = 0;
string ItemNumber = null;
string PartNumber = null;
bool RowLocked;
double RowHeight;
Debug.Print(" Table Title: " + swTableAnn.Title);
nNumRow = swTableAnn.RowCount;
BomTableAnnotation swBOMTableAnn = default(BomTableAnnotation);
swBOMTableAnn = (BomTableAnnotation)swTableAnn;
for (J = 0; J <= nNumRow - 1; J++)
{
RowLocked = swTableAnn.GetLockRowHeight(J);
RowHeight = swTableAnn.GetRowHeight(J);
Debug.Print(" Row Number " + J + " (height = " + RowHeight + "; height locked = " + RowLocked + ")");
Debug.Print(" Component Count: " + swBOMTableAnn.GetComponentsCount2(J, ConfigName, out ItemNumber, out PartNumber));
Debug.Print(" Item Number: " + ItemNumber);
Debug.Print(" Part Number: " + PartNumber);
object[] vPtArr = null;
Component2 swComp = null;
object pt = null;
vPtArr = (object[])swBOMTableAnn.GetComponents2(J, ConfigName);
if (((vPtArr != null)))
{
for (I = 0; I <= vPtArr.GetUpperBound(0); I++)
{
pt = vPtArr[I];
swComp = (Component2)pt;
if ((swComp != null))
{
Debug.Print(" Component Name: " + swComp.Name2);
Debug.Print(" Configuration Name: " + swComp.ReferencedConfiguration);
Debug.Print(" Component Path: " + swComp.GetPathName());
}
else
{
Debug.Print(" Could not get component.");
}
}
}
}
}
public void ProcessBomFeature(SldWorks swApp, ModelDoc2 swModel, BomFeature swBomFeat)
{
Feature swFeat = default(Feature);
object[] vTableArr = null;
object vTable = null;
string[] vConfigArray = null;
object vConfig = null;
string ConfigName = null;
TableAnnotation swTable = default(TableAnnotation);
object visibility = null;
swFeat = swBomFeat.GetFeature();
vTableArr = (object[])swBomFeat.GetTableAnnotations();
foreach (TableAnnotation vTable_loopVariable in vTableArr)
{
vTable = vTable_loopVariable;
swTable = (TableAnnotation)vTable;
vConfigArray = (string[])swBomFeat.GetConfigurations(true, ref visibility);
foreach (object vConfig_loopVariable in vConfigArray)
{
vConfig = vConfig_loopVariable;
ConfigName = (string)vConfig;
Debug.Print(" Component for Configuration: " + ConfigName);
ProcessTableAnn(swApp, swModel, swTable, ConfigName);
}
}
}
public void Main()
{
ModelDoc2 swModel = default(ModelDoc2);
DrawingDoc swDraw = default(DrawingDoc);
Feature swFeat = default(Feature);
BomFeature swBomFeat = default(BomFeature);
swModel = (ModelDoc2)swApp.ActiveDoc;
swDraw = (DrawingDoc)swModel;
swFeat = (Feature)swModel.FirstFeature();
while ((swFeat != null))
{
if ("BomFeat" == swFeat.GetTypeName())
{
Debug.Print("Feature Name: " + swFeat.Name);
swBomFeat = (BomFeature)swFeat.GetSpecificFeature2();
ProcessBomFeature(swApp, swModel, swBomFeat);
}
swFeat = (Feature)swFeat.GetNextFeature();
}
}
public SldWorks swApp;
}
}
本篇文章到此结束,我们下篇文章再见。