如何在C# SolidWorks API中选择Bottom Plane(底部基准面)?
在C# SolidWorks API中选择底部基准面的解决方案
核心问题修正:实体类型参数错误
你当前代码的主要问题是SelectByID2的第二个参数使用了"PLANE",而SolidWorks API中基准面的正确实体类型是"DATUMPLANE"。修正后的基础代码如下:
// 确保doc是已打开的SolidWorks文档对象(如PartDoc) bool isSelected = doc.Extension.SelectByID2( "Bottom", // 基准面名称 "DATUMPLANE", // 正确的实体类型 0, 0, 0, // 选择坐标(基准面可忽略,填0即可) false, // 是否追加到选择集 0, // 选择标记 null, // 标注对象 0 // 选择选项 );
处理多语言/自定义名称问题
如果上述代码仍不生效,大概率是基准面名称因SolidWorks语言版本或自定义修改而不一致:
- 英文默认基准面名称为
"Top Plane"/"Front Plane"/"Right Plane",中文则为"上视基准面"/"前视基准面"/"右视基准面" - 若你自定义了名为
"Bottom"的基准面,需确保名称完全匹配(区分大小写)
更可靠的方式是通过特征管理器遍历获取基准面,避免硬编码名称:
ISldWorks swApp = (ISldWorks)Activator.CreateInstance(Type.GetTypeFromProgID("SldWorks.Application")); IModelDoc2 doc = swApp.ActiveDoc; IFeatureManager featMgr = doc.FeatureManager; // 遍历特征树,找到指定名称的基准面 IFeature feat = featMgr.GetFirstFeature(); while (feat != null) { if (feat.GetTypeName2() == "RefPlane" && feat.Name == "Bottom") { // 获取基准面的选择数据并选中 object selData = feat.GetSelectMark(); doc.Extension.SelectByID2(feat.Name, "DATUMPLANE", 0, 0, 0, false, 0, selData, 0); break; } feat = feat.GetNextFeature(); }
额外注意事项
- 确保代码执行时,SolidWorks文档处于激活状态,且基准面可见(未被隐藏)
- 若要选择默认的底部基准(通常对应英文的
Top Plane,即中文的上视基准面),可直接使用其默认名称匹配,或通过GetRefPlane方法获取默认基准面
内容的提问来源于stack exchange,提问作者user563147
相关产品推荐
相关产品推荐

