/////////////////////////////////////////////////////////////////////////////// // 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 "DgComplexCurveGripPoints.h" #include "DgComplexCurve.h" #include "RxObjectImpl.h" #include "Ge/GeExtents3d.h" //#include "Ge/GeCurve3d.h" OdResult OdDgComplexCurveGripPointsPE::getGripPoints(const OdDgElement* pEnt, OdGePoint3dArray& gripPoints)const { if (pEnt->isKindOf(OdDgComplexCurve::desc())) { OdDgComplexCurvePtr pCplxCurve = pEnt; OdDgElementIteratorPtr pIter = pCplxCurve->createIterator(); for(; !pIter->done(); pIter->step()) { OdDgElementPtr pElm = pIter->item().openObject(OdDg::kForRead); OdDgGripPointsPEPtr pGripPointSubitem = OdDgGripPointsPE::cast(pElm); if( !pGripPointSubitem.isNull() ) { pGripPointSubitem->getGripPoints(pElm, gripPoints); } } } return eOk; } OdResult OdDgComplexCurveGripPointsPE::moveGripPointsAt(OdDgElement* pEnt, const OdIntArray& indices, const OdGeVector3d& offset) { unsigned size = indices.size(); if (size == 0) return eOk; if (pEnt->isKindOf(OdDgComplexCurve::desc())) { OdDgComplexCurvePtr pCplxCurve = pEnt; OdDgElementIteratorPtr pIter = pCplxCurve->createIterator(); OdInt32 uStartGripIndex = 0; for (; !pIter->done(); pIter->step()) { OdDgElementPtr pElm = pIter->item().openObject(OdDg::kForWrite); OdDgGripPointsPEPtr pGripPointSubitem = OdDgGripPointsPE::cast(pElm); if (!pGripPointSubitem.isNull()) { OdGePoint3dArray arrGripPts; pGripPointSubitem->getGripPoints(pElm, arrGripPts); OdIntArray arrSubItemIndexes; for (OdUInt32 i = 0; i < indices.size(); i++) { if( (indices[i] >= uStartGripIndex) && (indices[i] < (OdInt32)(uStartGripIndex + arrGripPts.size())) ) arrSubItemIndexes.push_back(indices[i] - uStartGripIndex); } if (!arrSubItemIndexes.isEmpty()) pGripPointSubitem->moveGripPointsAt(pElm, arrSubItemIndexes, offset); uStartGripIndex += arrGripPts.size(); } } } return eOk; } OdResult OdDgComplexCurveGripPointsPE::getStretchPoints(const OdDgElement* pEnt, OdGePoint3dArray& stretchPoints) const { OdResult res = getGripPoints(pEnt, stretchPoints); if (res == eOk) { stretchPoints.resize(stretchPoints.size() - 1); } return res; } OdResult OdDgComplexCurveGripPointsPE::moveStretchPointsAt(OdDgElement* pEnt, const OdIntArray& indices, const OdGeVector3d& offset) { return moveGripPointsAt(pEnt, indices, offset); } OdResult OdDgComplexCurveGripPointsPE::getOsnapPoints(const OdDgElement* pEnt, OdDgElement::OsnapMode osnapMode, OdGsMarker gsSelectionMark, const OdGePoint3d& pickPoint, const OdGePoint3d& lastPoint, const OdGeMatrix3d& xWorldToEye, OdGePoint3dArray& snapPoints) const { if (pEnt->isKindOf(OdDgComplexCurve::desc())) { OdDgComplexCurvePtr pCplxCurve = pEnt; OdDgElementIteratorPtr pIter = pCplxCurve->createIterator(); for (; !pIter->done(); pIter->step()) { OdDgElementPtr pElm = pIter->item().openObject(OdDg::kForRead); OdDgGripPointsPEPtr pGripPointSubitem = OdDgGripPointsPE::cast(pElm); if (!pGripPointSubitem.isNull()) pGripPointSubitem->getOsnapPoints(pElm, osnapMode, gsSelectionMark, pickPoint, lastPoint, xWorldToEye, snapPoints); } } return eOk; }