2018-08-2309:23 AM - last edited on 2022-11-3010:46 AM by Daniel Kassai
My goal is hiding some elements on floor plan and in 3D-model too. As far is i know Archicad have not any special functions for change visibility of separate element(s). I tried implement it by changing elements layer index. (Moving elements to new hidden layer with storing original layer index in user data. And restoring original layer index when i need to set elements visible.
// not real code, just for example
API_Elem_Head** headers = (API_Elem_Head **)BMAllocateHandle(sizeof(API_Elem_Head) * arraySize, ALLOCATE_CLEAR, 0);
ACAPI_ELEMENT_MASK_SET(mask, API_Elem_Head, layer);
element.header.typeID = API_WallID;
element.header.layer = newLayerIndex;
//... fill headers types and guids
ACAPI_Element_ChangeParameters(headers, arraySize, &element, nullptr, &mask);
It works OK but function ACAPI_Element_ChangeParameters works very very slow! For example: for 10 000 elements it takes ~12 minutes! (Intel Core i5 750, 8Gb RAM, NVIDIA 750Ti) After that result i tried select all walls via Archicad user interface, clicked RBM and change layer there. It took about 8 minutes. Slightly better but still unusable slow.
So i have a question: is there any other way to change visibility (in 2D and 3D) for some elements?
P.S. I had use highlight with turning elements in wireframe form (ACAPI_Interface(APIIo_HighlightElementsID, &hlElems, &wireframe3D) ) - it works very fast and probably can replace layer changing but i need inverse action - turning to wireframe array of elements.
What i need:
1) With my addon user can write new special property into any element. The property stores in UserData and particulary in Properies of element.
In one step user can add the property to few elements (from one and up to few thousands).
Usualy user must process all architectural elements in the project.
2) After adding the property to array of elements we need to hide them, becuase user needs to see wich elements remaind for further processing. And processed elements should not obstruct to select unprocessed elements.
3) In any time user must have possibility to show and to hide processed elements. (If their number is few thousands, hiding through changing layer (see first post) takes a lot of time.)
Variant with highlight not convenient, because in that case i need add in array "hlElems" ALL elements of project except processed elements to show processed elements as transparent wireframe.