/////////////////////////////////////////////////////////////////////////////// // Copyright (C) 2002-2025, Open Design Alliance (the "Alliance"). // All rights reserved. // // This software and its documentation and related materials are owned by // the Alliance. The software may only be incorporated into application // programs owned by members of the Alliance, subject to a signed // Membership Agreement and Supplemental Software License Agreement with the // Alliance. The structure and organization of this software are the valuable // trade secrets of the Alliance and its suppliers. The software is also // protected by copyright law and international treaty provisions. Application // programs incorporating this software must include the following statement // with their copyright notices: // // This application incorporates Open Design Alliance software pursuant to a license // agreement with Open Design Alliance. // Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance. // All rights reserved. // // By use of this software, its documentation or related materials, you // acknowledge and accept the above terms. /////////////////////////////////////////////////////////////////////////////// // #include "StdAfx.h" #include "OdEntityUtils.h" void _exBoundary_func(OdEdCommandContext* pCmdCtx) { OdDbCommandContextPtr pDbCmdCtx(pCmdCtx); OdDbDatabase* pDb = pDbCmdCtx->database(); OdSmartPtr pIO = pDbCmdCtx->userIO(); const OdGePoint3d pickPoint = pIO->getPoint(L"Pick Point"); const bool bDetectIsland = pIO->getInt(L"Detect Island: 0 - no; 1 - yes") == 1; const BoundaryTypeEnum boundaryType = pIO->getInt(L"Boundary object type: OdDbRegion = 0 ; OdDbPolyline = 1") == 1 ? BoundaryTypeEnum::ePolylineBoundary : BoundaryTypeEnum::eRegionBoundary; const bool bSelectSet = pIO->getInt(L"Select entities set ? 0: No ; otherwise: True") != 0; OdDbEntityPtrArray selectSet; if (bSelectSet) { OdDbSelectionSetPtr pSet = pIO->select(L"Select entities to boundary set:"); if (pSet->numEntities() == 0) { pIO->putString(L"No entities selected. Command execution stopped."); return; } const auto idArr = pSet->objectIdArray(); selectSet.reserve(idArr.length()); selectSet.setGrowLength(-100); for (const auto& id : idArr) selectSet.append(id.openObject()); } double dGap = pIO->getReal(L"Gap tol: ", 0, 1.e-9); if (OdNegative(dGap, 1.e-15) || OdZero(dGap, 1.e-15)) throw OdError(OD_T("Gap tol negative or zero")); OdDbEntityPtrArray pEntRes; OdResult eRes = boundary(pDb, pickPoint, boundaryType, bDetectIsland, pEntRes, 0, bSelectSet ? &selectSet : 0, dGap); if (eRes != eOk) throw OdError(eRes); OdDbBlockTableRecordPtr pBTR = pDb->getActiveLayoutBTRId().safeOpenObject(OdDb::kForWrite); for (auto& i : pEntRes) pBTR->appendOdDbEntity(i); }