cancel
Showing results for 
Search instead for 
Did you mean: 
cancel
Showing results for 
Search instead for 
Did you mean: 
Developer forum

Drawing polyLines

Anonymous
Not applicable
I'm getting the error APIERR_REFUSEDCMD (-2130312312) when I try to create a polyline. The code below is much simplified and with extra comments...Am I missing something?

void	DrawPoly(void){
	API_ElementMemo		memo;
	API_ElementMemo*	pMemo = &memo;
	API_Element			newPoly;
	API_Element*		pNewPoly = &newPoly;
	GSErrCode			err;

	BNZeroMemory(pNewPoly,sizeof(API_Element));
	BNZeroMemory(pMemo,sizeof(API_ElementMemo));

	pNewPoly->header.typeID = API_PolyLineID;
	pNewPoly->header.layer = 1;
	pNewPoly->header.floorInd = 1;

	pNewPoly->polyLine.poly.nArcs = 0;     //no arcs
	pNewPoly->polyLine.poly.nSubPolys = 1; //no holes
	pNewPoly->polyLine.poly.nCoords = 4;   //a closed triangle

	//allocate space for 3points + final point to close shape + space for storing max vertID = 5
	pMemo->vertexIDs = (unsigned long **) BMAllocateHandle(sizeof(long) * (5), ALLOCATE_CLEAR, 0);
	(*pMemo->vertexIDs)[0] = 3; //max vertexID

	//allocate space for pends. no holes, so the 4th vert is the only endpoint.
	pMemo->pends = (long **) BMAllocateHandle(sizeof(long) * 2, ALLOCATE_CLEAR, 0);
	(*pMemo->pends)[0] = 0; //required
	(*pMemo->pends)[1] = 4; //4th vert closes the shape

	//allocate space for the coord array. 4 vertices + the dummy coord.
	pMemo->coords = (API_Coord **) BMAllocateHandle(sizeof(API_Coord) * 5, ALLOCATE_CLEAR, 0);
	(*pMemo->coords)[0].x = -1.0;  //polylines start with a "dummy" coord of -1,0
	(*pMemo->coords)[0].y = 0.0;
	//setup complete....add vertices.

	//1st point: 1,1
	(*pMemo->coords)[1].x = 1;
	(*pMemo->coords)[1].y = 1;
	(*pMemo->vertexIDs)[1] = 1;

	//2nd point: 2,1
	(*pMemo->coords)[2].x = 2;
	(*pMemo->coords)[2].y = 1;
	(*pMemo->vertexIDs)[2] = 2;

	//3rd point: 1,2
	(*pMemo->coords)[3].x = 1;
	(*pMemo->coords)[3].y = 2;
	(*pMemo->vertexIDs)[3] = 3;

	//4th point. Same as point 1.
	(*pMemo->coords)[4].x = 1;
	(*pMemo->coords)[4].y = 1;
	(*pMemo->vertexIDs)[4] = 1;

	err = ACAPI_Element_Create(pNewPoly,pMemo);
	//handle return code...
	ACAPI_DisposeElemMemoHdls(pMemo);
}
2 REPLIES 2

Anonymous
Not applicable
Found the problem, updating for posterity's sake.

I was searching my computer for other mentions of that error. The function ACAPI_Element_Link mentioned that the error I got is caused (in that case) by not having an undoable session open. I had used the undoable session in a earlier version of my code, but left it out "temporarily" when I rewrote the function..... Apparently I corrected my other problem(s), just needed that undo session.

Anonymous
Not applicable
Hi Ramblin,
thank you for your excellent code!
Yours faithfully,
Pal.

Still looking?

Browse more topics

Back to forum

See latest solutions

Accepted solutions

Start a new discussion!