We value your input! Please participate in Archicad 28 Home Screen and Tooltips/Quick Tutorials survey
2019-03-07 05:58 PM - last edited on 2022-10-04 04:35 PM by Daniel Kassai
// ***************************************************************************** // Source code for the Geometry Test Add-On // API Development Kit 21; Mac/Win // // Namespaces: Contact person: // -None- // // [SG compatible] - Yes // ***************************************************************************** #include "APIEnvir.h" #define _Geometry_Test_TRANSL_ // ---------------------------------- Includes --------------------------------- //#include <stdio> #include <string> #include "ACAPinc.h" // also includes APIdefs.h #include "APICommon.h" #include "basicgeometry.h" // ---------------------------------- Types ------------------------------------ // ---------------------------------- Variables -------------------------------- // ---------------------------------- Prototypes ------------------------------- bool GetZoneElement(API_Guid &OutGuid) { API_SelectionInfo selectionInfo; // Get selection API_Neig **selNeig; // Get selection GSErrCode err; UInt32 nSel; UInt32 k = 0; err = ACAPI_Selection_Get(&selectionInfo, &selNeig, true); BMKillHandle((GSHandle *)&selectionInfo.marquee.coords); if (err != NoError && err != APIERR_NOSEL) { ErrorBeep("ACAPI_Selection_GetInfo", err); BMKillHandle((GSHandle *)& selNeig); return false; } if (selectionInfo.typeID != API_SelEmpty) { nSel = BMGetHandleSize((GSHandle)selNeig) / sizeof(API_Neig); for (UInt32 i = 0; i < nSel && err == NoError; i++) { if (!ACAPI_Element_Filter((*selNeig).guid, APIFilt_IsEditable)) continue; OutGuid = (*selNeig).guid; WriteReport("Guid select: %s", static_cast<const char *> (APIGuid2GSGuid(OutGuid).ToUniString().ToCStr())); ++k; } } if (k == 0) WriteReport("No select %ld", k); BMKillHandle((GSHandle *)&selNeig); return k > 0 ? true : false; } GSErrCode ModifyZonePos(const API_Guid& guid) { API_Element element; API_ElementMemo memo; GSErrCode err; BNZeroMemory(&element, sizeof(API_Element)); BNZeroMemory(&memo, sizeof(API_ElementMemo)); // get actual zone element.header.guid = guid; err = ACAPI_Element_Get(&element); if (err == NoError) err = ACAPI_Element_GetMemo(element.header.guid, &memo); if (err != NoError) return err; // delete original zone, before create a new zone, if not want get alert API_Elem_Head** heads = (API_Elem_Head**)BMhAllClear(sizeof(API_Elem_Head)); (*heads)[0].guid = guid; // 0 -1 zones ACAPI_Element_Delete(heads, 1); BMhKill((GSHandle*)&heads); // modify pos and create a new zone WriteReport("Create %s: %s", (ElemID_To_Name (element.header.typeID)).ToCStr().Get(), static_cast<const char *> (APIGuid2GSGuid(guid).ToUniString().ToCStr())); err = ACAPI_Element_Create (&element, &memo); ACAPI_DisposeElemMemoHdls(&memo); return err; } // ============================================================================= // // Main functions // // ============================================================================= static void Do_Test (void) { ACAPI_CallUndoableCommand ("Geometry Test -- Create elements", [&] () -> GSErrCode { GSErrCode err; API_Guid guid; GetZoneElement (guid); err = ModifyZonePos(guid); return err; }); return; } /* Do_Test */ // ----------------------------------------------------------------------------- // Entry points to handle Archicad events // // ----------------------------------------------------------------------------- GSErrCode __ACENV_CALL MenuCommandHandler (const API_MenuParams *params) { switch (params->menuItemRef.itemIndex) { case 1: Do_Test (); break; } return NoError; } // DoCommand // ============================================================================= // // Required functions // // ============================================================================= //------------------------------------------------------ // Dependency definitions //------------------------------------------------------ API_AddonType __ACENV_CALL CheckEnvironment (API_EnvirParams* envir) { RSGetIndString (&envir->addOnInfo.name, 32000, 1, ACAPI_GetOwnResModule ()); RSGetIndString (&envir->addOnInfo.description, 32000, 2, ACAPI_GetOwnResModule ()); return APIAddon_Normal; } /* CheckEnvironment */ //------------------------------------------------------ // Interface definitions //------------------------------------------------------ GSErrCode __ACENV_CALL RegisterInterface (void) { ACAPI_Register_Menu (32500, 0, MenuCode_UserDef, MenuFlag_Default); return NoError; } /* RegisterInterface */ //------------------------------------------------------ // Called when the Add-On has been loaded into memory // to perform an operation //------------------------------------------------------ GSErrCode __ACENV_CALL Initialize (void) { GSErrCode err = ACAPI_Install_MenuHandler (32500, MenuCommandHandler); if (err != NoError) DBPrintf ("Geometry_Test:: Initialize() ACAPI_Install_MenuHandler failed\n"); return err; } /* Initialize */ // ----------------------------------------------------------------------------- // FreeData // called when the Add-On is going to be unloaded // ----------------------------------------------------------------------------- GSErrCode __ACENV_CALL FreeData (void) { return NoError; } // FreeData
Solved! Go to Solution.
2019-03-20 05:34 PM
2019-03-20 05:34 PM
2019-04-20 06:57 PM