最近有高校学生问到一个问题,如何得到零件中所有可以编辑的尺寸信息。包括所有的特征以及草图尺寸。之前的博客中只是写了如何遍历特征以及图纸中的尺寸。通过查api发现,其实这个和图纸中标注的尺寸一样,直接使用:先看结果:零件:

/// <summary>
/// 遍历特征
/// </summary>
/// <param name="thisFeat"></param>
/// <param name="isTopLevel"></param>
public static void TraverseFeatures(Feature thisFeat, bool isTopLevel, bool isShowDimension = false)
{
Feature curFeat = default(Feature);
curFeat = thisFeat;
while ((curFeat != null))
{
//输出特征名称
Debug.Print(curFeat.Name);
if (isShowDimension == true) ShowDimensionForFeature(curFeat);
Feature subfeat = default(Feature);
subfeat = (Feature)curFeat.GetFirstSubFeature();
while ((subfeat != null))
{
//if (isShowDimension == true) ShowDimensionForFeature(subfeat);
TraverseFeatures(subfeat, false);
Feature nextSubFeat = default(Feature);
nextSubFeat = (Feature)subfeat.GetNextSubFeature();
subfeat = nextSubFeat;
nextSubFeat = null;
}
subfeat = null;
Feature nextFeat = default(Feature);
if (isTopLevel)
{
nextFeat = (Feature)curFeat.GetNextFeature();
}
else
{
nextFeat = null;
}
curFeat = nextFeat;
nextFeat = null;
}
}
/// <summary>
/// 遍历零件中的所有特征
/// </summary>
/// <param name="feature"></param>
public static void ShowDimensionForFeature(Feature feature)
{
var thisDisplayDim = (DisplayDimension)feature.GetFirstDisplayDimension();
while (thisDisplayDim != null)
{
var dimen = (Dimension)thisDisplayDim.GetDimension();
Debug.Print($"---特征 {feature.Name} 尺寸-->" + dimen.GetNameForSelection() + "-->" + dimen.Value);
thisDisplayDim = (DisplayDimension)feature.GetNextDisplayDimension(thisDisplayDim);
}
}
代码已经上传,请自取。