Returns information on the selection, and the selected elements.
GSErrCode ACAPI_Selection_Get ( API_SelectionInfo* selectionInfo, GS::Array<API_Neig>* selNeigs, bool onlyEditable, bool ignorePartialSelection = true, API_SelRelativePosID relativePosToMarquee = API_InsidePartially );
Parameters
- selectionInfo
- [out] The parameters of the current selection. The
typeID
field of theselectionInfo
gives the selection type. - selNeigs
- [out] An array containing the GUIDs of the selected elements. Can be
nullptr
if you are interested in the selection information only. - onlyEditable
- [in] Tells whether you are interested in editable elements only.
- ignorePartialSelection
- [in] Retrieves also partial element selection information or the element itself only selected as whole
(for legacy compatibility reasons, the default value of this parameter is
true
, meaning partial selection is ignored). This parameter is ignored in case of marquee based selection. - relativePosToMarquee
- [in] Retrieves elements relative to marquee
(for legacy compatibility reasons, the default value of this parameter is
API_InsidePartially
, meaning only those elements will be returned which have an intersection with the marquee area). This parameter is ignored in case of individually selected elements.
Return Values
NoError
- The function has completed with success.
APIERR_NOPLAN
- There is no open project.
APIERR_NOSEL
- There is no selection. Note that this is not a real error!
For other common API errors see the API Errors document.
Remarks
This function is used to get information about the current selection and to retrieve the selected elements. The information is returned in the selectionInfo
parameter.
If individual elements are selected the API_SelElems
identifier is returned. The number of the selected and selected and editable elements are also returned. In case of marquee based selection, the function gives back the actual polygon of the current selection in the API_SelectionInfo structure; don’t forget to dispose this handle.
The API_SelEmpty
identifier in the typeID
field of the selectionInfo
parameter means that no selection is actually used in Archicad.
In case of individually selected elements, Archicad returns all the elements which are selected. In the case of marquee based selection, only those will be returned which match the position criteria defined by relativePosToMarquee
.
Example
//------------------------------------------------------------ // Collect in inds the guids of the dimensions to work with //------------------------------------------------------------ static GSErrCode SelectDimensions (GS::Array<API_Guid>& inds) { GSErrCode err; API_SelectionInfo selectionInfo; API_Elem_Head tElemHead; GS::Array<API_Neig> selNeigs; err = ACAPI_Selection_Get (&selectionInfo, &selNeigs, true); BMKillHandle ((GSHandle *) &selectionInfo.marquee.coords); if (err == APIERR_NOSEL) err = NoError; if (selectionInfo.typeID != API_SelEmpty) { // collect indexes of selected dimensions UInt32 nSel = BMGetHandleSize ((GSHandle) selNeigs) / sizeof (API_Neig); for (const API_Neig& selNeig : selNeigs) { tElemHead.typeID = Neig_To_ElemID (selNeig.neigID); if (tElemHead.typeID != API_DimensionID) continue; if (!ACAPI_Element_Filter (selNeig.guid, APIFilt_IsEditable)) continue; tElemHead.guid = selNeig.guid; if (ACAPI_Element_GetHeader (&tElemHead) != NoError) continue; // Add dimension to the array inds.Push (tElemHead.guid); } } return err; } // SelectDimensions
Requirements
- Version: API 4.1 or later
- Header: ACAPinc.h
See Also
API_Neig, API_SelectionInfo, API_SelRelativePosID,
ACAPI_Element_Select,
Selection Manager, API Functions