断面図上で選択した梁・柱のセグメント形状を取得する
説明
- 全てのセグメントのGUIDを確保しておく
- 断面図の全ての要素のGUIDを比較して、どの柱・梁セグメントが表示されているかを判定する
void GetSegmentShape(const API_Element& sectElement)
{
API_SelectionInfo selectionInfo;
GS::Array<API_Neig> selNeigs;
GSErrCode err = ACAPI_Selection_Get (&selectionInfo, &selNeigs, true);
BMKillHandle ((GSHandle *) &selectionInfo.marquee.coords);
API_Element sectElement = {};
sectElement.header.guid = selNeigs[0].guid;
ACAPI_Element_Get (§Element);
API_Element element = {};
element.header.guid = sectElement.sectElem.parentGuid;
ACAPI_Element_Get (&element);
API_ElementMemo memo = {};
ACAPI_Element_GetMemo (element.header.guid, &memo);
GS::Array<API_Guid> list;
ACAPI_Element_GetElemList (API_SectElemID, &list);
GS::HashSet<API_Guid> columnSegmentGuids;
for (UInt32 iSegment = 0; iSegment < element.column.nSegments; ++iSegment){
columnSegmentGuids.Add (memo.columnSegments[iSegment].head.guid);
}
for (const API_Guid& guid : list)
{
API_Element apiSect = {};
apiSect.header.guid = guid;
ACAPI_Element_Get (&apiSect);
if (columnSegmentGuids.Contains (apiSect.sectElem.parentGuid))
{
ACAPI_Element_ShapePrims (apiSect.header, DrawPrimitives);
columnSegmentGuids.Delete (apiSect.sectElem.parentGuid);
}
if (columnSegmentGuids.IsEmpty ())
break;
}
}
断面図上で選択した梁・柱のセグメント形状を取得する
説明
void GetSegmentShape(const API_Element& sectElement) { // 選択した要素を取得... API_SelectionInfo selectionInfo; GS::Array<API_Neig> selNeigs; GSErrCode err = ACAPI_Selection_Get (&selectionInfo, &selNeigs, true); BMKillHandle ((GSHandle *) &selectionInfo.marquee.coords); // 形状を取得したい断面図柱・梁 API_Element sectElement = {}; sectElement.header.guid = selNeigs[0].guid; ACAPI_Element_Get (§Element); // 形状を取得したい柱・梁 API_Element element = {}; element.header.guid = sectElement.sectElem.parentGuid; ACAPI_Element_Get (&element); API_ElementMemo memo = {}; ACAPI_Element_GetMemo (element.header.guid, &memo); // 断面図の全ての要素を取得 GS::Array<API_Guid> list; ACAPI_Element_GetElemList (API_SectElemID, &list); // 各セグメントのGUIDを格納 GS::HashSet<API_Guid> columnSegmentGuids; for (UInt32 iSegment = 0; iSegment < element.column.nSegments; ++iSegment){ columnSegmentGuids.Add (memo.columnSegments[iSegment].head.guid); } for (const API_Guid& guid : list) { API_Element apiSect = {}; apiSect.header.guid = guid; ACAPI_Element_Get (&apiSect); // 現在選択されている表示されているセグメントの形状を取得する if (columnSegmentGuids.Contains (apiSect.sectElem.parentGuid)) { ACAPI_Element_ShapePrims (apiSect.header, DrawPrimitives); columnSegmentGuids.Delete (apiSect.sectElem.parentGuid); } if (columnSegmentGuids.IsEmpty ()) break; } }