cancel
Showing results for 
Search instead for 
Did you mean: 
cancel
Showing results for 
Search instead for 
Did you mean: 
2024 Technology Preview Program

2024 Technology Preview Program:
Master powerful new features and shape the latest BIM-enabled innovations

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 ()); 
	} 
} 
 

Didn't find the answer?

Check other topics in this Forum

Back to Forum

Read the latest accepted solutions!

Accepted Solutions

Start a new conversation!