填写模板
产品版本:中望CAD 2026
GetSubentities一直返回null
导入任意step 或x_t实体,调用命令 选择实体面
需求背景/BUG复现步骤:
1、拿到用户选择的实体面对象
代码:
/// <summary>
/// 测试选择三维实体面功能
/// 这个命令演示如何正确获取用户选择的三维实体的面,并显示面的详细信息
/// </summary>
[CommandMethod(“TestSelectFace”)]
public void TestSelectFaceData()
{
var db = Application.DocumentManager.MdiActiveDocument.Database;
Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
try
{
ed.WriteMessage(“\n========== 开始选择面测试 ==========”);
ed.WriteMessage(“\n提示: 请用鼠标直接点击三维实体的面(不要点边缘)”);
// 步骤1: 构造过滤器 – 只允许选择3DSOLID类型的实体
TypedValue[] filList = new TypedValue[]
{
new TypedValue((int)DxfCode.Operator, “<or”),
new TypedValue((int)DxfCode.Start, “3DSOLID”),
new TypedValue((int)DxfCode.Operator, “or>”),
};
SelectionFilter filter = new SelectionFilter(filList);
ed.WriteMessage(“\n[调试] 过滤器已创建: 3DSOLID”);
// 步骤2: 设置选择选项
PromptSelectionOptions pso = new PromptSelectionOptions();
pso.MessageForAdding = “\n请点击选择三维实体的面(请直接点击在面上): “;
pso.SingleOnly = true; // 只允许选择一个对象
pso.ForceSubSelections = true; // 强制进行子实体选择
pso.SinglePickInSpace = true; // 单次点选
ed.WriteMessage(“\n[调试] 选择选项已配置: ForceSubSelections=true”);
// 步骤3: 执行选择,必须传入过滤器
ed.WriteMessage(“\n[调试] 准备调用 GetSelection…”);
var psr = ed.GetSelection(pso, filter);
ed.WriteMessage($”\n[调试] GetSelection 返回状态: {psr.Status}”);
if (psr.Status != PromptStatus.OK)
{
ed.WriteMessage(“\n操作已取消。”);
return;
}
// 步骤4: 获取选择集
SelectionSet sSet = psr.Value;
ed.WriteMessage($”\n[调试] 选择集对象数量: {sSet.Count}”);
if (sSet.Count == 0)
{
ed.WriteMessage(“\n未选择任何对象。”);
return;
}
SelectedObject sObj = sSet[0];
ed.WriteMessage($”\n[调试] 选中对象ID: {sObj.ObjectId}”);
ed.WriteMessage($”\n[调试] SelectionMethod: {sObj.SelectionMethod}”);
// 步骤5: 获取子实体信息(关键步骤)
ed.WriteMessage(“\n[调试] 准备调用 GetSubentities()…”);
SelectedSubObject[] sSubObjs = sObj.GetSubentities();
ed.WriteMessage($”\n[调试] GetSubentities() 返回结果: {(sSubObjs == null ? “NULL” : $”数组长度={sSubObjs.Length}”)}”);
return;
}
tr.Commit();
}
ed.WriteMessage(“\n测试完成!”);
}
catch (System.Exception ex)
{
ed.WriteMessage($”\n发生错误: {ex.Message}”);
ed.WriteMessage($”\n堆栈跟踪: {ex.StackTrace}”);
}
}




















