License Delivery maintenance is expected to occur on Saturday, November 30, between 8 AM and 11 AM CET. This may cause a short 3-hours outage in which license-related tasks: license key upload, download, update, SSA validation, access to the license pool and Graphisoft ID authentication may not function properly. We apologize for any inconvenience.
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
Software Engineer Speckle Systems
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 ()); 
	} 
}