BIM Coordinator Program (INT) April 22, 2024
Find the next step in your career as a Graphisoft Certified BIM Coordinator!
Archicad C++ API
About Archicad add-on development using the C++ API.

Curtain Wall Geometry

Anonymous
Not applicable
Hello,

I need to create 3D representation of curtain wall for export. I know that curtain walls in AC consists of segments, frames, panels, junction and accessories.

Here is couple of questions:
What is easiest way get access to curtain wall geometry?
How get access to curtain wall components using API_CurtainWallID?
 
API_CurtainWallType           curtainWall; 
API_CWallSegmentType          cwSegment; 
API_CWallFrameType            cwFrame; 
API_CWallPanelType            cwPanel; 
API_CWallJunctionType         cwJunction; 
API_CWallAccessoryType        cwAccessory; 
2 REPLIES 2
Ralph Wessel
Mentor
Matti wrote:
I need to create 3D representation of curtain wall for export. I know that curtain walls in AC consists of segments, frames, panels, junction and accessories.

Here is couple of questions:
What is easiest way get access to curtain wall geometry?
How get access to curtain wall components using API_CurtainWallID?
Take a look at the documentation for ModelAccess - there are methods to access all the 3D primitives.

Alternatively, the (older) methods described in the 3D Manager documentation can be used too.
Ralph Wessel BArch
Anonymous
Not applicable
Thanks a lot!

I managed to get curtain wall geometries quite easily. The 3D_Test.c example was useful.

Why in the 3D_Test.c example (see. code) there is degenerate check for frames too? This check seems to fail always for frames. I used the check only for panels.
 
// frames 
GSSize nFrames = BMGetPtrSize (reinterpret_cast<GSPtr>(memo.cWallFrames)) / sizeof (API_CWallFrameType); 
for (idx = 0; idx < nFrames; ++idx) { 
	err = ACAPI_Database (APIDb_IsCWPanelDegenerateID, &memo.cWallFrames[idx].head.guid, &isDegenerate); 
	if (!isDegenerate) { 
		elems.Push (memo.cWallFrames[idx].head); 
	} else { 
		GS::Guid guid = APIGuid2GSGuid (memo.cWallFrames[idx].head.guid); 
		WriteReport ("Degenerate Frame: %s", (const char*) guid.ToUniString ().ToCStr ()); 
	} 
} 
 
 
// panels 
GSSize nPanels = BMGetPtrSize (reinterpret_cast<GSPtr>(memo.cWallPanels)) / sizeof (API_CWallPanelType); 
for (idx = 0; idx < nPanels; ++idx) { 
	err = ACAPI_Database (APIDb_IsCWPanelDegenerateID, &memo.cWallPanels[idx].head.guid, &isDegenerate); 
	if (!isDegenerate) { 
		elems.Push (memo.cWallPanels[idx].head); 
	} else { 
		GS::Guid guid = APIGuid2GSGuid (memo.cWallPanels[idx].head.guid); 
		WriteReport ("Degenerate Panel: %s", (const char*) guid.ToUniString ().ToCStr ()); 
	} 
} 
 
Learn and get certified!