void Do_ElemSet_Create (void) { GS::Array<API_Guid> guids; // get the guids of a Wall, Column, Beam and Window GS::Array<API_Guid> wallList; ACAPI_Element_GetElemList (API_WallID, &wallList); if (!wallList.IsEmpty ()) guids.Push (wallList[0]); else guids.Push (APINULLGuid); GS::Array<API_Guid> columnList; ACAPI_Element_GetElemList (API_ColumnID, &columnList); if (!columnList.IsEmpty ()) guids.Push (columnList[0]); else guids.Push (APINULLGuid); GS::Array<API_Guid> beamList; ACAPI_Element_GetElemList (API_BeamID, &beamList); if (!beamList.IsEmpty ()) guids.Push (beamList[0]); else guids.Push (APINULLGuid); GS::Array<API_Guid> windowList; ACAPI_Element_GetElemList (API_WindowID, &windowList); if (!windowList.IsEmpty ()) guids.Push (windowList[0]); else guids.Push (APINULLGuid); // write a note into the user data API_UserData userData; BNZeroMemory (&userData, sizeof (userData)); userData.dataVersion = 4; userData.platformSign = GS::Act_Platform_Sign; userData.dataHdl = BMAllocateHandle (1024, ALLOCATE_CLEAR, 0); if (userData.dataHdl != NULL) sprintf (*userData.dataHdl, "Original element count: 4, guids [%s,%s,%s,%s]", APIGuidToString (guids[0]).ToCStr ().Get (), APIGuidToString (guids[1]).ToCStr ().Get (), APIGuidToString (guids[2]).ToCStr ().Get (), APIGuidToString (guids[3]).ToCStr ().Get ()); API_Guid setGuid; GSErrCode err = ACAPI_ElementSet_Create (&guids, &userData, &setGuid); if (err != NoError) { DBPrintf ("Create Element Set error: %d\n", err); } else { DBPrintf ("Created Element Set (%s)\n", APIGuidToString (setGuid).ToCStr ().Get ()); } BMKillHandle (&userData.dataHdl); } /* ElemSet_Create */
static GSErrCode CreateAText (const TextParams *textPars) { API_Element element; API_ElementMemo memo; Int32 len; API_Coord c; GSErrCode err; if (!ClickAPoint ("Click the top/left corner of the text box", &c)) return APIERR_CANCEL; BNZeroMemory (&element, sizeof (element)); BNZeroMemory (&memo, sizeof (memo)); element.header.typeID = API_TextID; err = ACAPI_Element_GetDefaults (&element, NULL); if (err != NoError) { ErrorBeep ("ACAPI_Element_GetDefaults (text)", err); return err; } element.text.pen = textPars->pen; element.text.size = textPars->size; element.text.anchor = APIAnc_LT; element.text.just = APIJust_Left; element.text.loc = c; element.text.nonBreaking = true; element.text.nLine = 1; len = Strlen32 (textPars->content); memo.textContent = BMAllocateHandle (len + 1, ALLOCATE_CLEAR, 0); err = BMError (); if (err != NoError) return err; strcpy (*memo.textContent, textPars->content); err = ACAPI_CallUndoableCommand ("Create text", [&] () -> GSErrCode { return ACAPI_Element_Create (&element, &memo); }); if (err != NoError) ErrorBeep ("ACAPI_Element_Create (text)", err); ACAPI_DisposeElemMemoHdls (&memo); return err; } // CreateAText
// ----------------------------------------------------------------------------- // Do_ElementEdit // edit the linked elements // ----------------------------------------------------------------------------- static GSErrCode Do_ElementEdit (API_Elem_Head *header) { API_Guid elemGuid = APINULLGuid; Int32 nLinks = 0; API_Guid** linkToList = NULL; API_ActTranPars actTranPars; API_EditPars editPars; GSErrCode err; BNZeroMemory (&actTranPars, sizeof (API_ActTranPars)); BNZeroMemory (&editPars, sizeof (API_EditPars)); ACAPI_Notify_GetTranParams (&actTranPars); ActTranPars_To_EditPars (&actTranPars, &editPars); elemGuid = header->guid; err = ACAPI_Element_GetLinks (elemGuid, &linkToList, &nLinks); if (linkToList == NULL || nLinks == 0) return NoError; if (err == NoError) { if (err == NoError) { API_Neig** neigHdl = reinterpret_cast<API_Neig**> (BMAllocateHandle (nLinks * sizeof (API_Neig), ALLOCATE_CLEAR, 0)); if (neigHdl == NULL) return APIERR_MEMFULL; for (GSIndex index = 0; index < nLinks; index++) { API_Elem_Head elemHead; BNZeroMemory (&elemHead, sizeof (API_Elem_Head)); elemHead.guid = (*linkToList)[index]; ACAPI_Element_GetHeader (&elemHead); ElemHead_To_Neig (&(*neigHdl)[index], &elemHead); } err = ACAPI_Element_Edit (neigHdl, nLinks, &editPars); BMKillHandle (reinterpret_cast<GSHandle*> (&neigHdl)); } } BMKillHandle (reinterpret_cast<GSHandle*> (&linkToList)); return err; } // Do_ElementEdit
void highlightElementByID(){ GSErrCode err; API_NeigID neigID; API_Element element; elementidlist eleMsg; API_StoryCmdType storyCmd; char buffer[256]; readDelimitedFrom(getClientSocket(), &eleMsg); Int32 nItem = eleMsg.guid_size(); bool add = true; //Clear all selected elements err = ACAPI_Element_Select(NULL, 0, add); API_Neig** neigHdl = reinterpret_cast<API_Neig**> (BMAllocateHandle(nItem * sizeof(API_Neig), ALLOCATE_CLEAR, 0)); API_Neig neig; for (int i = 0; i < nItem; i++){ BNZeroMemory(&element, sizeof(API_Element)); element.header.guid = APIGuidFromString(eleMsg.guid(i).c_str()); err = ACAPI_Element_Get(&element); if (err != NoError) { sprintf(buffer, ErrID_To_Name(err)); ACAPI_WriteReport(buffer, true); return; } err = ACAPI_Goodies(APIAny_ElemTypeToNeigID, (void*)element.header.typeID, &neigID); (*neigHdl)[i].neigID = neigID; (*neigHdl)[i].guid = element.header.guid; (*neigHdl)[i].flags = API_NeigFlg_Normal; (*neigHdl)[i].elemPartType = APINeigElemPart_None; } //Add the current element to the selection err = ACAPI_Element_Select(neigHdl, nItem, add); if (err != NoError) { sprintf(buffer, ErrID_To_Name(err)); ACAPI_WriteReport(buffer, true); return; } BMhKill((GSHandle*)&neigHdl); /* * In order for the GUI update, we need to create an element, and then * delete it. * By doing this we can have the selected element highlighted */ API_Element wallElement; API_ElementMemo memo; BNZeroMemory(&memo, sizeof(API_ElementMemo)); BNZeroMemory(&wallElement, sizeof(API_Element)); wallElement.header.typeID = API_WallID; wallElement.header.layer = 1; err = ACAPI_Element_GetDefaults(&wallElement, &memo); if (err != NoError) { ErrorBeep("ACAPI_Element_GetMemo", err); return; } err = ACAPI_Element_Create(&wallElement, &memo); if (err != NoError){ ErrorBeep("ACAPI_Element_Create", err); sprintf(buffer, ErrID_To_Name(err)); ACAPI_WriteReport(buffer, true); } ACAPI_DisposeElemMemoHdls(&memo); API_Elem_Head* test; test = &wallElement.header; ACAPI_Element_Delete(&test, 1); }