断面図上で選択した梁・柱のセグメント形状を取得する

 

断面図上で選択した梁・柱のセグメント形状を取得する

説明

  • 全てのセグメントの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 (&sectElement);

    // 形状を取得したい柱・梁
    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;
    }

}