/////////////////////////////////////////////////////////////////////////////// // 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 "DgMultilineProperties.h" //----------------------------------------------------------------------------------------------------------------------- // class: OdDgMultiline //----------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------- // property: OriginCapAngle //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgMultilineOriginCapAngleProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgMultilinePtr pObj = OdDgMultiline::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getOriginCapAngle(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgMultilineOriginCapAngleProperty::subSetValue(OdRxObject* pO, const OdRxValue& value) const { OdDgMultilinePtr pObj = OdDgMultiline::cast(pO); if (pObj.isNull()) return eNotApplicable; pObj->setOriginCapAngle(*rxvalue_cast(&value)); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: EndCapAngle //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgMultilineEndCapAngleProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgMultilinePtr pObj = OdDgMultiline::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getEndCapAngle(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgMultilineEndCapAngleProperty::subSetValue(OdRxObject* pO, const OdRxValue& value) const { OdDgMultilinePtr pObj = OdDgMultiline::cast(pO); if (pObj.isNull()) return eNotApplicable; pObj->setEndCapAngle(*rxvalue_cast(&value)); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: OriginCap //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgMultilineOriginCapProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgMultilinePtr pObj = OdDgMultiline::cast(pO); if (pObj.isNull()) return eNotApplicable; OdDgMultilineSymbology symb; pObj->getOriginCap(symb); value = symb; return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgMultilineOriginCapProperty::subSetValue(OdRxObject* pO, const OdRxValue& value) const { OdDgMultilinePtr pObj = OdDgMultiline::cast(pO); if (pObj.isNull()) return eNotApplicable; pObj->setOriginCap(*rxvalue_cast(&value)); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: MiddleCap //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgMultilineMiddleCapProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgMultilinePtr pObj = OdDgMultiline::cast(pO); if (pObj.isNull()) return eNotApplicable; OdDgMultilineSymbology symb; pObj->getMiddleCap(symb); value = symb; return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgMultilineMiddleCapProperty::subSetValue(OdRxObject* pO, const OdRxValue& value) const { OdDgMultilinePtr pObj = OdDgMultiline::cast(pO); if (pObj.isNull()) return eNotApplicable; pObj->setMiddleCap(*rxvalue_cast(&value)); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: EndCap //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgMultilineEndCapProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgMultilinePtr pObj = OdDgMultiline::cast(pO); if (pObj.isNull()) return eNotApplicable; OdDgMultilineSymbology symb; pObj->getEndCap(symb); value = symb; return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgMultilineEndCapProperty::subSetValue(OdRxObject* pO, const OdRxValue& value) const { OdDgMultilinePtr pObj = OdDgMultiline::cast(pO); if (pObj.isNull()) return eNotApplicable; pObj->setEndCap(*rxvalue_cast(&value)); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: ZVector //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgMultilineZVectorProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgMultilinePtr pObj = OdDgMultiline::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getZVector(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgMultilineZVectorProperty::subSetValue(OdRxObject* pO, const OdRxValue& value) const { OdDgMultilinePtr pObj = OdDgMultiline::cast(pO); if (pObj.isNull()) return eNotApplicable; pObj->setZVector(*rxvalue_cast(&value)); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: ClosedFlag //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgMultilineClosedFlagProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgMultilinePtr pObj = OdDgMultiline::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getClosedFlag(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgMultilineClosedFlagProperty::subSetValue(OdRxObject* pO, const OdRxValue& value) const { OdDgMultilinePtr pObj = OdDgMultiline::cast(pO); if (pObj.isNull()) return eNotApplicable; pObj->setClosedFlag(*rxvalue_cast(&value)); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: FreezeGroup //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgMultilineFreezeGroupProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgMultilinePtr pObj = OdDgMultiline::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getFreezeGroup(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: OffsetIsValidFlag //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgMultilineOffsetIsValidFlagProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgMultilinePtr pObj = OdDgMultiline::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getOffsetIsValidFlag(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgMultilineOffsetIsValidFlagProperty::subSetValue(OdRxObject* pO, const OdRxValue& value) const { OdDgMultilinePtr pObj = OdDgMultiline::cast(pO); if (pObj.isNull()) return eNotApplicable; pObj->setOffsetIsValidFlag(*rxvalue_cast(&value)); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: OffsetMode //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgMultilineOffsetModeProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgMultilinePtr pObj = OdDgMultiline::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getOffsetMode(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgMultilineOffsetModeProperty::subSetValue(OdRxObject* pO, const OdRxValue& value) const { OdDgMultilinePtr pObj = OdDgMultiline::cast(pO); if (pObj.isNull()) return eNotApplicable; pObj->setOffsetMode(*rxvalue_cast(&value)); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: MultilineStyle //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgMultilineMultilineStyleProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgMultilinePtr pObj = OdDgMultiline::cast(pO); if (pObj.isNull()) return eNotApplicable; OdDgDatabasePtr pDb = pObj->database(); OdDgMultilineStyleTablePtr pMultilineStyleTable = pDb->getMultilineStyleTable(OdDg::kForWrite); OdUInt64 id = pObj->getMultilineStyleId(); OdDgElementId elm = pMultilineStyleTable->getAt((OdUInt32)id); value = elm; return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: LineStyleModifiers //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgMultilineLineStyleModifiersProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgMultilinePtr pObj = OdDgMultiline::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getLineStyleModifiers(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgMultilineLineStyleModifiersProperty::subSetValue(OdRxObject* pO, const OdRxValue& value) const { OdDgMultilinePtr pObj = OdDgMultiline::cast(pO); if (pObj.isNull()) return eNotApplicable; pObj->setLineStyleModifiers(*rxvalue_cast(&value)); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: LineStyleScale //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgMultilineLineStyleScaleProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgMultilinePtr pObj = OdDgMultiline::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getLineStyleScale(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgMultilineLineStyleScaleProperty::subSetValue(OdRxObject* pO, const OdRxValue& value) const { OdDgMultilinePtr pObj = OdDgMultiline::cast(pO); if (pObj.isNull()) return eNotApplicable; pObj->setLineStyleScale(*rxvalue_cast(&value)); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: Profiles //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgMultilineProfilesProperty::subTryGetCount(const OdRxObject* pO, int& count) const { OdDgMultilinePtr pObj = OdDgMultiline::cast(pO); if (pObj.isNull()) return eNotApplicable; count = pObj->getProfilesCount(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- ODDG_DEFINE_RX_VALUE_ARRAY_ITERATOR(OdDgMultilineProfile); OdRxValueIteratorPtr OdDgMultilineProfilesProperty::subNewValueIterator(const OdRxObject* pO) const { OdRxValueIteratorPtr res; res = OdRxObjectImpl::createObject(); OdDgMultilinePtr pObj = OdDgMultiline::cast(pO); if (!pObj.isNull()) { OdArray arrData; for (OdUInt32 i = 0; i < pObj->getProfilesCount(); i++) { OdDgMultilineProfile multilineProfile; pObj->getProfile(i, multilineProfile); arrData.push_back(multilineProfile); } ((OdRxOdDgMultilineProfileValueIterator*)res.get())->init(arrData, 0); } return res; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgMultilineProfilesProperty::subGetValue(const OdRxObject* pO, int index, OdRxValue& value) const { OdDgMultilinePtr pObj = OdDgMultiline::cast(pO); if (pObj.isNull()) return eNotApplicable; OdDgMultilineProfile multilineProfile; pObj->getProfile(index, multilineProfile); value = multilineProfile; return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgMultilineProfilesProperty::subSetValue(OdRxObject* pO, int index, const OdRxValue& value) const { OdDgMultilinePtr pObj = OdDgMultiline::cast(pO); if (pObj.isNull()) return eNotApplicable; return eNotImplementedYet; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgMultilineProfilesProperty::subInsertValue(OdRxObject* pO, int index, const OdRxValue& value) const { OdDgMultilinePtr pObj = OdDgMultiline::cast(pO); if (pObj.isNull()) return eNotApplicable; OdDgMultilineProfile multilineProfile = *rxvalue_cast(&value); pObj->addProfile(multilineProfile); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgMultilineProfilesProperty::subRemoveValue(OdRxObject* pO, int index) const { OdDgMultilinePtr pObj = OdDgMultiline::cast(pO); if (pObj.isNull()) return eNotApplicable; return eNotImplementedYet; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgMultilineProfilesProperty::subChildren(OdArray& children) const { children.append(OdRxSubPropertyOfIndexedProperty::createObject(L"Distance", OdRxValueType::Desc::value(), this)); children.append(OdRxSubPropertyOfIndexedProperty::createObject(L"Symbology", OdRxValueType::Desc::value(), this)); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: HatchPatterns //----------------------------------------------------------------------------------------------------------------------- ODDG_DEFINE_RX_VALUE_ARRAY_ITERATOR(OdRxObjectPtr); OdRxValueIteratorPtr OdDgMultilineHatchPatternsProperty::subNewValueIterator(const OdRxObject* pO) const { OdRxValueIteratorPtr res; OdDgMultilinePtr pObj = OdDgMultiline::cast(pO); if (pObj.isNull()) return res; res = OdRxObjectImpl::createObject(); if (!pObj.isNull()) { OdArray arrHatchPatterns; for (OdUInt32 i = 0; i < pObj->getHatchPatternCount(); i++) { OdDgHatchPatternPtr pHatchPattern = pObj->getHatchPattern(i, false); if (pHatchPattern.isNull()) continue; arrHatchPatterns.push_back(pHatchPattern); } ((OdRxOdRxObjectPtrValueIterator*)res.get())->init(arrHatchPatterns, 0); } return res; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgMultilineHatchPatternsProperty::subTryGetCount(const OdRxObject* pO, int& count) const { OdDgMultilinePtr pObj = OdDgMultiline::cast(pO); if (pObj.isNull()) return eNotApplicable; count = pObj->getHatchPatternCount(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgMultilineHatchPatternsProperty::subGetValue(const OdRxObject* pO, int index, OdRxValue& value) const { OdDgMultilinePtr pObj = OdDgMultiline::cast(pO); if (pObj.isNull()) return eNotApplicable; if (index < 0 || (OdUInt32)index >= pObj->getHatchPatternCount()) return eInvalidIndex; OdRxObjectPtr pRet = pObj->getHatchPattern((OdUInt32)index, false); value = pRet; return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgMultilineHatchPatternsProperty::subSetValue(OdRxObject* pO, int index, const OdRxValue& value) const { return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgMultilineHatchPatternsProperty::subInsertValue(OdRxObject* pO, int index, const OdRxValue& value) const { OdDgMultilinePtr pObj = OdDgMultiline::cast(pO); if (pObj.isNull()) return eNotApplicable; OdRxObjectPtr pHatchPattern = *rxvalue_cast(&value); OdDgHatchPatternPtr pHatch = pHatchPattern; pObj->addHatchPattern(pHatch); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgMultilineHatchPatternsProperty::subRemoveValue(OdRxObject* pO, int index) const { OdDgMultilinePtr pObj = OdDgMultiline::cast(pO); if (pObj.isNull()) return eNotApplicable; if (index < 0 || (OdUInt32)index >= pObj->getHatchPatternCount()) return eInvalidIndex; pObj->deleteHatchPattern((OdUInt32)index); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgMultilineHatchPatternsProperty::subChildren(OdArray& children) const { return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: Points //----------------------------------------------------------------------------------------------------------------------- ODDG_DEFINE_RX_VALUE_ARRAY_ITERATOR(OdDgMultilinePoint); OdRxValueIteratorPtr OdDgMultilinePointsProperty::subNewValueIterator(const OdRxObject* pO) const { OdRxValueIteratorPtr res; res = OdRxObjectImpl::createObject(); OdDgMultilinePtr pObj = OdDgMultiline::cast(pO); if (!pObj.isNull()) { OdArray arrObjects; for (OdUInt32 i = 0; i < pObj->getPointsCount(); i++) { OdDgMultilinePoint point; pObj->getPoint(i, point); arrObjects.push_back(point); } ((OdRxOdDgMultilinePointValueIterator*)res.get())->init(arrObjects, 0); } return res; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgMultilinePointsProperty::subTryGetCount(const OdRxObject* pO, int& count) const { OdDgMultilinePtr pObj = OdDgMultiline::cast(pO); if (pObj.isNull()) return eNotApplicable; count = pObj->getPointsCount(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgMultilinePointsProperty::subGetValue(const OdRxObject* pO, int index, OdRxValue& value) const { OdDgMultilinePtr pObj = OdDgMultiline::cast(pO); if (pObj.isNull()) return eNotApplicable; OdDgMultilinePoint point; if (pObj->getPointsCount()) pObj->getPoint(index, point); value = point; return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgMultilinePointsProperty::subSetValue(OdRxObject* pO, int index, const OdRxValue& value) const { OdDgMultilinePtr pObj = OdDgMultiline::cast(pO); if (pObj.isNull()) return eNotApplicable; OdDgMultilinePoint point = *rxvalue_cast(&value); pObj->setPoint(index, point); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgMultilinePointsProperty::subInsertValue(OdRxObject* pO, int index, const OdRxValue& value) const { OdDgMultilinePtr pObj = OdDgMultiline::cast(pO); if (pObj.isNull()) return eNotApplicable; OdDgMultilinePoint point = *rxvalue_cast(&value); pObj->addPoint(point); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgMultilinePointsProperty::subRemoveValue(OdRxObject* pO, int index) const { OdDgMultilinePtr pObj = OdDgMultiline::cast(pO); if (pObj.isNull()) return eNotApplicable; return eNotImplementedYet; } //-----------------------------------------------------------------------------------------------------------------------