2018-09-10
04:31 PM
- last edited on
2023-07-04
02:08 PM
by
Doreena Deng
//Quick list
GS::Array<API_Coord> myLis;
API_Coord myPt; myPt.x = 0.0; myPt.y = 0.0; myLis.Push(myPt);
myPt; myPt.x = 0.0; myPt.y = 1.0; myLis.Push(myPt);
myPt; myPt.x = 1.0; myPt.y = 1.0; myLis.Push(myPt);
myPt; myPt.x = 0.0; myPt.y = 1.0; myLis.Push(myPt);
SlabDo(myLis);
static void SlabDo(GS::Array<API_Coord>& ptList) {
API_Element elem;
API_ElementMemo mem;
BNZeroMemory(&elem, sizeof(API_Element));
BNZeroMemory(&mem, sizeof(API_ElementMemo));
elem.header.typeID = API_SlabID;
ACAPI_Element_GetDefaults(&elem, nullptr); // &mem?
int ptListSize = ptList.GetSize();
elem.slab.poly.nCoords = ptListSize + 1;
elem.slab.poly.nSubPolys = 1;
elem.slab.poly.nArcs = 0;
mem.coords = (API_Coord**)BMAllocateHandle((elem.detail.poly.nCoords + 1) * sizeof(API_Coord), ALLOCATE_CLEAR, 0); //Works but gives Wrong Poligon Error when doing Slab
mem.pends = (Int32**)BMAllocateHandle((elem.detail.poly.nSubPolys + 1) * sizeof(Int32), ALLOCATE_CLEAR, 0);
mem.parcs = reinterpret_cast<API_PolyArc**> (BMAllocateHandle(elem.slab.poly.nArcs * sizeof(API_PolyArc), ALLOCATE_CLEAR, 0)); // Gives eerro - not enougth memory
if (mem.coords == nullptr || mem.pends == nullptr || mem.parcs == nullptr) {
ACAPI_WriteReport("Not enough memory to create slab polygon data", true);
ACAPI_DisposeElemMemoHdls(&mem);
return;
}
Int32 iCoord = 1;
for (int ii=0; ii < ptListSize; ii++) {
ACAPI_WriteReport(GS::ValueToString(ii), true);
(*mem.coords)[iCoord].x = ptList[ii].x;
ACAPI_WriteReport(GS::ValueToString(ptList[ii].x), true);
(*mem.coords)[iCoord].y = ptList[ii].y;
ACAPI_WriteReport(GS::ValueToString(ptList[ii].y), true);
++iCoord;
}
(*mem.coords)[iCoord] = (*mem.coords)[1];
(*mem.pends)[0] = 0;
(*mem.pends)[1] = iCoord;
const GSErrCode err = ACAPI_Element_Create(&elem, &mem);
if (err != NoError) {
ACAPI_WriteReport(GS::ValueToString(err), true);
}
ACAPI_DisposeElemMemoHdls(&mem);
}
2018-09-11 10:59 PM
2018-09-12 12:23 PM