how do i create mesh hole?
Anonymous
Not applicable
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
2006-01-11
10:17 AM
- last edited on
2023-08-07
11:32 AM
by
Doreena Deng
2006-01-11
10:17 AM
i know how to create hole in slab or roof..
but mesh is impossible.. why? is there a any solution or method to create mesh hole with API.
thanks
i'm developing archicad 9...
next line is sample code..
static void Do_Poly_NewHole (void)
{
ACAPI_OpenUndoableSession ("Do_Poly_NewHole");
API_GetPointType pointInfo;
API_GetPolyType polyInfo;
API_ElementMemo memo, insMemo;
API_RoofSide roofSide;
API_ElemTypeID typeID;
long iFrom, iTo, i, index;
GSErrCode err;
// if (!ClickAnElem ("Click a polygon to insert a new hole into", API_ZombieElemID, &neig, &typeID, NULL, NULL)) {
if (!ClickAnElem ("Click a polygon to insert a new hole into", API_ZombieElemID, NULL, &typeID, &index, NULL)) {
WriteReport_Alert ("No element was clicked");
return;
}
if (typeID != API_SlabID && typeID != API_RoofID && typeID != API_MeshID) {
WriteReport_Alert ("Only slab or roof nodes/edges are excepted");
return;
}
BNZeroMemory (&pointInfo, sizeof (API_GetPointType));
BNZeroMemory (&polyInfo, sizeof (API_GetPolyType));
strcpy (pointInfo.prompt, "Click the first node of the hole");
err = ACAPI_Interface (APIIo_GetPointID, &pointInfo, NULL);
if (err == NoError) {
strcpy (polyInfo.prompt, "Enter the polygon nodes");
polyInfo.startCoord = pointInfo.pos;
err = ACAPI_Interface (APIIo_GetPolyID, &polyInfo, NULL);
}
if (err != NoError) {
BMKillHandle ((GSHandle *) &polyInfo.coords);
BMKillHandle ((GSHandle *) &polyInfo.parcs);
return;
}
err = ACAPI_Element_GetMemo (typeID, index, &memo);
if (err != NoError) {
BMKillHandle ((GSHandle *) &polyInfo.coords);
BMKillHandle ((GSHandle *) &polyInfo.parcs);
return;
}
BNZeroMemory (&insMemo, sizeof (API_ElementMemo));
insMemo.coords = polyInfo.coords;
insMemo.parcs = polyInfo.parcs;
polyInfo.coords = NULL;
polyInfo.parcs = NULL;
err = ACAPI_Goodies (APIAny_InsertSubPolyID, &memo, &insMemo);
if (err == NoError) {
switch (typeID) {
case API_MeshID:
break;
case API_SlabID:
break; // nothing to do
case API_RoofID:
if (memo.roofSides != NULL && *memo.roofSides != NULL) {
BNZeroMemory (&roofSide, sizeof (roofSide));
iFrom = BMGetHandleSize ((GSHandle) memo.roofSides) / sizeof (API_RoofSide) + 1;
iTo = BMGetHandleSize ((GSHandle) memo.coords) / sizeof (API_Coord);
for (i = iFrom; i <= iTo; i++)
InsertStructToHandle ((GSHandle) memo.roofSides, i - 1, (GSPtr) &roofSide, sizeof (roofSide));
}
break;
default:
ACAPI_DisposeElemMemoHdls (&insMemo);
ACAPI_DisposeElemMemoHdls (&memo);
return; // should never get here
}
err = ACAPI_Element_ChangeMemo (typeID, &index, APIMemoMask_Polygon, &memo);
if (err != NoError)
ShowMessageBox ("ACAPI_Element_ChangeMemo : %d", err);
} else
ShowMessageBox ("APIAny_InsertSubPolyID : %d", err);
ACAPI_DisposeElemMemoHdls (&insMemo);
ACAPI_DisposeElemMemoHdls (&memo);
ACAPI_CloseUndoableSession ();
return;
} // Do_Poly_NewHole
but mesh is impossible.. why? is there a any solution or method to create mesh hole with API.
thanks
i'm developing archicad 9...
next line is sample code..
static void Do_Poly_NewHole (void)
{
ACAPI_OpenUndoableSession ("Do_Poly_NewHole");
API_GetPointType pointInfo;
API_GetPolyType polyInfo;
API_ElementMemo memo, insMemo;
API_RoofSide roofSide;
API_ElemTypeID typeID;
long iFrom, iTo, i, index;
GSErrCode err;
// if (!ClickAnElem ("Click a polygon to insert a new hole into", API_ZombieElemID, &neig, &typeID, NULL, NULL)) {
if (!ClickAnElem ("Click a polygon to insert a new hole into", API_ZombieElemID, NULL, &typeID, &index, NULL)) {
WriteReport_Alert ("No element was clicked");
return;
}
if (typeID != API_SlabID && typeID != API_RoofID && typeID != API_MeshID) {
WriteReport_Alert ("Only slab or roof nodes/edges are excepted");
return;
}
BNZeroMemory (&pointInfo, sizeof (API_GetPointType));
BNZeroMemory (&polyInfo, sizeof (API_GetPolyType));
strcpy (pointInfo.prompt, "Click the first node of the hole");
err = ACAPI_Interface (APIIo_GetPointID, &pointInfo, NULL);
if (err == NoError) {
strcpy (polyInfo.prompt, "Enter the polygon nodes");
polyInfo.startCoord = pointInfo.pos;
err = ACAPI_Interface (APIIo_GetPolyID, &polyInfo, NULL);
}
if (err != NoError) {
BMKillHandle ((GSHandle *) &polyInfo.coords);
BMKillHandle ((GSHandle *) &polyInfo.parcs);
return;
}
err = ACAPI_Element_GetMemo (typeID, index, &memo);
if (err != NoError) {
BMKillHandle ((GSHandle *) &polyInfo.coords);
BMKillHandle ((GSHandle *) &polyInfo.parcs);
return;
}
BNZeroMemory (&insMemo, sizeof (API_ElementMemo));
insMemo.coords = polyInfo.coords;
insMemo.parcs = polyInfo.parcs;
polyInfo.coords = NULL;
polyInfo.parcs = NULL;
err = ACAPI_Goodies (APIAny_InsertSubPolyID, &memo, &insMemo);
if (err == NoError) {
switch (typeID) {
case API_MeshID:
break;
case API_SlabID:
break; // nothing to do
case API_RoofID:
if (memo.roofSides != NULL && *memo.roofSides != NULL) {
BNZeroMemory (&roofSide, sizeof (roofSide));
iFrom = BMGetHandleSize ((GSHandle) memo.roofSides) / sizeof (API_RoofSide) + 1;
iTo = BMGetHandleSize ((GSHandle) memo.coords) / sizeof (API_Coord);
for (i = iFrom; i <= iTo; i++)
InsertStructToHandle ((GSHandle) memo.roofSides, i - 1, (GSPtr) &roofSide, sizeof (roofSide));
}
break;
default:
ACAPI_DisposeElemMemoHdls (&insMemo);
ACAPI_DisposeElemMemoHdls (&memo);
return; // should never get here
}
err = ACAPI_Element_ChangeMemo (typeID, &index, APIMemoMask_Polygon, &memo);
if (err != NoError)
ShowMessageBox ("ACAPI_Element_ChangeMemo : %d", err);
} else
ShowMessageBox ("APIAny_InsertSubPolyID : %d", err);
ACAPI_DisposeElemMemoHdls (&insMemo);
ACAPI_DisposeElemMemoHdls (&memo);
ACAPI_CloseUndoableSession ();
return;
} // Do_Poly_NewHole
Labels:
- Labels:
-
Add-On (C++)
1 REPLY 1
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
2006-01-11 01:28 PM
2006-01-11
01:28 PM
futurewave wrote:I haven't checked to confirm this, but off the top of my head it seems the problem is that you aren't populating the 'meshPolyZ' information for the new hole in the mesh. This contains the z coordinates of the hole vertices.
i know how to create hole in slab or roof..
but mesh is impossible.. why? is there a any solution or method to create mesh hole with API.
Ralph Wessel BArch
Central Innovation
Central Innovation