/////////////////////////////////////////////////////////////////////////////// // 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 "DgTextNodeProperties.h" //----------------------------------------------------------------------------------------------------------------------- // OdDgTextNode2d //----------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------- // property: LineSpacing //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dLineSpacingProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getLineSpacing(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dLineSpacingProperty::subSetValue(OdRxObject* pO, const OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; pObj->setLineSpacing(*rxvalue_cast(&value)); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: FirstLineIndentation //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dFirstLineIndentationProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getFirstLineIndentation(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dFirstLineIndentationProperty::subSetValue(OdRxObject* pO, const OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; pObj->setFirstLineIndentation(*rxvalue_cast(&value)); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: ParagraphIndentation //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dParagraphIndentationProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getParagraphIndentation(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dParagraphIndentationProperty::subSetValue(OdRxObject* pO, const OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; pObj->setParagraphIndentation(*rxvalue_cast(&value)); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: TabStopArray //----------------------------------------------------------------------------------------------------------------------- ODDG_DEFINE_RX_VALUE_ARRAY_ITERATOR(OdDouble); OdRxValueIteratorPtr OdDgTextNode2dTabStopArrayProperty::subNewValueIterator(const OdRxObject* pO) const { OdRxValueIteratorPtr res; res = OdRxObjectImpl::createObject(); OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (!pObj.isNull()) { OdArray arrObjects; OdDoubleArray doubleArray = pObj->getTabStopArray(); const unsigned int objCount = doubleArray.size(); for (unsigned int i = 0; i < objCount; i++) { OdDouble tabStop = doubleArray.getAt(i); arrObjects.push_back(tabStop); } ((OdRxOdDoubleValueIterator*)res.get())->init(arrObjects, 0); } return res; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dTabStopArrayProperty::subTryGetCount(const OdRxObject* pO, int& count) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; count = pObj->getTabStopArray().size(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dTabStopArrayProperty::subGetValue(const OdRxObject* pO, int index, OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; OdDoubleArray doubleArray = pObj->getTabStopArray(); OdDouble arrayValue = OdDouble(); if (!doubleArray.isEmpty()) arrayValue = doubleArray.getAt(index); value = arrayValue; return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dTabStopArrayProperty::subSetValue(OdRxObject* pO, int index, const OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; OdDoubleArray doubleArray = pObj->getTabStopArray(); doubleArray.setAt(index, *rxvalue_cast(&value)); pObj->setTabStopArray(doubleArray); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dTabStopArrayProperty::subInsertValue(OdRxObject* pO, int index, const OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; OdDoubleArray doubleArray = pObj->getTabStopArray(); doubleArray.insertAt(index, *rxvalue_cast(&value)); pObj->setTabStopArray(doubleArray); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dTabStopArrayProperty::subRemoveValue(OdRxObject* pO, int index) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; OdDoubleArray doubleArray = pObj->getTabStopArray(); doubleArray.removeAt(index); pObj->setTabStopArray(doubleArray); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: DefaultTabStep //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dDefaultTabStepProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getDefaultTabStep(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: StartSpecialSymbols //----------------------------------------------------------------------------------------------------------------------- OdRxValueIteratorPtr OdDgTextNode2dStartSpecialSymbolsProperty::subNewValueIterator(const OdRxObject* pO) const { struct OdRxOdDgSpecialSymbolValueIterator : OdRxValueIterator { OdArray m_arrData; OdUInt32 m_uCurIndex; OdRxOdDgSpecialSymbolValueIterator() { m_uCurIndex = 0; } virtual void init(const OdArray& arrData, OdUInt32 uStartIndex) { m_arrData = arrData; m_uCurIndex = uStartIndex; } virtual bool done() { if (m_arrData.isEmpty()) return true; return m_uCurIndex == m_arrData.size(); } virtual bool next() { if (m_uCurIndex < m_arrData.size()) m_uCurIndex++; return !done(); } virtual OdRxValue current() const { if (m_uCurIndex >= m_arrData.size()) throw OdError(eInvalidIndex); return m_arrData[m_uCurIndex]; } }; OdRxValueIteratorPtr res; res = OdRxObjectImpl::createObject(); OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (!pObj.isNull()) { OdArray arrObjects = pObj->getTextNodeStartSpecialSymbols(); ((OdRxOdDgSpecialSymbolValueIterator*)res.get())->init(arrObjects, 0); } return res; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dStartSpecialSymbolsProperty::subTryGetCount(const OdRxObject* pO, int& count) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; count = pObj->getTextNodeStartSpecialSymbols().size(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dStartSpecialSymbolsProperty::subGetValue(const OdRxObject* pO, int index, OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; OdArray symbolsArray = pObj->getTextNodeStartSpecialSymbols(); OdDgTextExtendedProperties::OdDgSpecialSymbol arrayValue = OdDgTextExtendedProperties::kTab; if (!symbolsArray.isEmpty()) arrayValue = symbolsArray.getAt(index); value = arrayValue; return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dStartSpecialSymbolsProperty::subSetValue(OdRxObject* pO, int index, const OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; OdArray arr = pObj->getTextNodeStartSpecialSymbols(); arr.setAt(index, *rxvalue_cast(&value)); pObj->setTextNodeStartSpecialSymbols(arr); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dStartSpecialSymbolsProperty::subInsertValue(OdRxObject* pO, int index, const OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; OdArray arr = pObj->getTextNodeStartSpecialSymbols(); arr.insertAt(index, *rxvalue_cast(&value)); pObj->setTextNodeStartSpecialSymbols(arr); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dStartSpecialSymbolsProperty::subRemoveValue(OdRxObject* pO, int index) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; OdArray arr = pObj->getTextNodeStartSpecialSymbols(); arr.removeAt(index); pObj->setTextNodeStartSpecialSymbols(arr); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: Font //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dFontProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; OdDgDatabasePtr pDb = pObj->database(); OdDgFontTablePtr pFontTable = pDb->getFontTable(); value = pFontTable->getAt(pObj->getFontEntryId()); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: MaxLength //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dMaxLengthProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getMaxLength(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dMaxLengthProperty::subSetValue(OdRxObject* pO, const OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; pObj->setMaxLength(*rxvalue_cast(&value)); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: Justification //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dJustificationProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getJustification(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dJustificationProperty::subSetValue(OdRxObject* pO, const OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; pObj->setJustification(*rxvalue_cast(&value)); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: TextNodeNumber //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dTextNodeNumberProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getTextNodeNumber(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dTextNodeNumberProperty::subSetValue(OdRxObject* pO, const OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; pObj->setTextNodeNumber(*rxvalue_cast(&value)); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: AnnotationScaleFlag //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dAnnotationScaleFlagProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getAnnotationScaleFlag(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dAnnotationScaleFlagProperty::subSetValue(OdRxObject* pO, const OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; pObj->setAnnotationScaleFlag(*rxvalue_cast(&value)); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: AnnotationScale //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dAnnotationScaleProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getAnnotationScale(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dAnnotationScaleProperty::subSetValue(OdRxObject* pO, const OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; pObj->setAnnotationScale(*rxvalue_cast(&value)); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: Rotation //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dRotationProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getRotation(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dRotationProperty::subSetValue(OdRxObject* pO, const OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; pObj->setRotation(*rxvalue_cast(&value)); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: Origin //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dOriginProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getOrigin(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dOriginProperty::subSetValue(OdRxObject* pO, const OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; pObj->setOrigin(*rxvalue_cast(&value)); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: BoundingPoints //----------------------------------------------------------------------------------------------------------------------- ODDG_DEFINE_RX_VALUE_ARRAY_ITERATOR(OdGePoint2d); OdRxValueIteratorPtr OdDgTextNode2dBoundingPointsProperty::subNewValueIterator(const OdRxObject* pO) const { OdRxValueIteratorPtr res; res = OdRxObjectImpl::createObject(); OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (!pObj.isNull()) { OdArray arrObjects; OdGePoint2dArray pointsArray; pObj->getBoundingPoints(pointsArray); const unsigned int objCount = pointsArray.size(); for (unsigned int i = 0; i < objCount; i++) { OdGePoint2d point = pointsArray.getAt(i); arrObjects.push_back(point); } ((OdRxOdGePoint2dValueIterator*)res.get())->init(arrObjects, 0); } return res; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dBoundingPointsProperty::subTryGetCount(const OdRxObject* pO, int& count) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; OdGePoint2dArray pointsArray; pObj->getBoundingPoints(pointsArray); count = pointsArray.size(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: UpsideDownFlag //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dUpsideDownFlagProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getUpsideDownFlag(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dUpsideDownFlagProperty::subSetValue(OdRxObject* pO, const OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; pObj->setUpsideDownFlag(*rxvalue_cast(&value)); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: LineSpacingType //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dLineSpacingTypeProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getLineSpacingType(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dLineSpacingTypeProperty::subSetValue(OdRxObject* pO, const OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; pObj->setLineSpacingType(*rxvalue_cast(&value)); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: StackedFractionAlign //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dStackedFractionAlignProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getStackedFractionAlign(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dStackedFractionAlignProperty::subSetValue(OdRxObject* pO, const OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; pObj->setStackedFractionAlign(*rxvalue_cast(&value)); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: StackedFractionSection //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dStackedFractionSectionProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getStackedFractionSection(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dStackedFractionSectionProperty::subSetValue(OdRxObject* pO, const OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; pObj->setStackedFractionSection(*rxvalue_cast(&value)); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: StackedFractionType //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dStackedFractionTypeProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getStackedFractionType(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dStackedFractionTypeProperty::subSetValue(OdRxObject* pO, const OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; pObj->setStackedFractionType(*rxvalue_cast(&value)); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: Slant //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dSlantProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getSlant(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dSlantProperty::subSetValue(OdRxObject* pO, const OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; pObj->setSlant(*rxvalue_cast(&value)); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: UnderlineSpacing //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dUnderlineSpacingProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getUnderlineSpacing(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dUnderlineSpacingProperty::subSetValue(OdRxObject* pO, const OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; pObj->setUnderlineSpacing(*rxvalue_cast(&value)); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: LineOffset //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dLineOffsetProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getLineOffset(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dLineOffsetProperty::subSetValue(OdRxObject* pO, const OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; pObj->setLineOffset(*rxvalue_cast(&value)); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: CodePage //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dCodePageProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getCodePage(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dCodePageProperty::subSetValue(OdRxObject* pO, const OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; pObj->setCodePage(*rxvalue_cast(&value)); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: ShxBigFont //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dShxBigFontProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; OdDgDatabasePtr pDb = pObj->database(); OdDgFontTablePtr pFontTable = pDb->getFontTable(OdDg::kForRead); OdUInt32 fontId = pObj->getShxBigFontEntryId(); value = pFontTable->getAt(fontId); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: BackgroundLineStyle //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dBackgroundLineStyleProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; OdDgDatabasePtr pDb = pObj->database(); OdDgLineStyleTablePtr pLineStyleTable = pDb->getLineStyleTable(OdDg::kForRead); OdUInt32 linestyleId = pObj->getBackgroundLineStyleEntryId(); value = pLineStyleTable->getAt(linestyleId); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: BackgroundLineWeight //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dBackgroundLineWeightProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getBackgroundLineWeight(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: BackgroundColor //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dBackgroundColorProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; OdCmEntityColor cmColor; OdUInt32 uIndex = pObj->getBackgroundColorIndex(); if (uIndex == OdDg::kColorByLevel) cmColor.setColorMethod(OdCmEntityColor::kByLayer); else if (uIndex == OdDg::kColorByCell) cmColor.setColorMethod(OdCmEntityColor::kByBlock); else if (uIndex < 256) { OdCmEntityColor::setDgnColorIndex(&uIndex, (OdInt16)uIndex); cmColor.setColor(uIndex); } else { ODCOLORREF rgbColor = pObj->getBackgroundColorIndex(); cmColor.setColorMethod(OdCmEntityColor::kByColor); cmColor.setRed(ODGETRED(rgbColor)); cmColor.setGreen(ODGETGREEN(rgbColor)); cmColor.setBlue(ODGETBLUE(rgbColor)); } value = cmColor; return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: BackgroundFillColor //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dBackgroundFillColorProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; OdCmEntityColor cmColor; OdUInt32 uIndex = pObj->getBackgroundFillColorIndex(); if (uIndex == OdDg::kColorByLevel) cmColor.setColorMethod(OdCmEntityColor::kByLayer); else if (uIndex == OdDg::kColorByCell) cmColor.setColorMethod(OdCmEntityColor::kByBlock); else if (uIndex < 256) { OdCmEntityColor::setDgnColorIndex(&uIndex, (OdInt16)uIndex); cmColor.setColor(uIndex); } else { ODCOLORREF rgbColor = pObj->getBackgroundFillColorIndex(); cmColor.setColorMethod(OdCmEntityColor::kByColor); cmColor.setRed(ODGETRED(rgbColor)); cmColor.setGreen(ODGETGREEN(rgbColor)); cmColor.setBlue(ODGETBLUE(rgbColor)); } value = cmColor; return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: BackgroundBorder //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dBackgroundBorderProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getBackgroundBorder(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: OverlineSpacing //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dOverlineSpacingProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getOverlineSpacing(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dOverlineSpacingProperty::subSetValue(OdRxObject* pO, const OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; pObj->setOverlineSpacing(*rxvalue_cast(&value)); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: TextStyle //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dTextStyleProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; OdDgDatabasePtr pDb = pObj->database(); OdDgTextStyleTablePtr pTextStyleTable = pDb->getTextStyleTable(OdDg::kForRead); OdUInt32 textStyleId = pObj->getTextStyleEntryId(); value = pTextStyleTable->getAt(textStyleId); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: UnderlineColor //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dUnderlineColorProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; OdCmEntityColor cmColor; OdUInt32 uIndex = pObj->getUnderlineColorIndex(); if (uIndex == OdDg::kColorByLevel) cmColor.setColorMethod(OdCmEntityColor::kByLayer); else if (uIndex == OdDg::kColorByCell) cmColor.setColorMethod(OdCmEntityColor::kByBlock); else if (uIndex < 256) { OdCmEntityColor::setDgnColorIndex(&uIndex, (OdInt16)uIndex); cmColor.setColor(uIndex); } else { ODCOLORREF rgbColor = pObj->getUnderlineColorIndex(); cmColor.setColorMethod(OdCmEntityColor::kByColor); cmColor.setRed(ODGETRED(rgbColor)); cmColor.setGreen(ODGETGREEN(rgbColor)); cmColor.setBlue(ODGETBLUE(rgbColor)); } value = cmColor; return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: UnderlineLineStyle //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dUnderlineLineStyleProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; OdDgDatabasePtr pDb = pObj->database(); OdDgLineStyleTablePtr pLineStyleTable = pDb->getLineStyleTable(OdDg::kForRead); OdUInt32 linestyleId = pObj->getUnderlineLineStyleEntryId(); value = pLineStyleTable->getAt(linestyleId); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: UnderlineLineWeight //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dUnderlineLineWeightProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getUnderlineLineWeight(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: OverlineColor //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dOverlineColorProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; OdCmEntityColor cmColor; OdUInt32 uIndex = pObj->getOverlineColorIndex(); if (uIndex == OdDg::kColorByLevel) cmColor.setColorMethod(OdCmEntityColor::kByLayer); else if (uIndex == OdDg::kColorByCell) cmColor.setColorMethod(OdCmEntityColor::kByBlock); else if (uIndex < 256) { OdCmEntityColor::setDgnColorIndex(&uIndex, (OdInt16)uIndex); cmColor.setColor(uIndex); } else { ODCOLORREF rgbColor = pObj->getOverlineColorIndex(); cmColor.setColorMethod(OdCmEntityColor::kByColor); cmColor.setRed(ODGETRED(rgbColor)); cmColor.setGreen(ODGETGREEN(rgbColor)); cmColor.setBlue(ODGETBLUE(rgbColor)); } value = cmColor; return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: OverlineLineStyle //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dOverlineLineStyleProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; OdDgDatabasePtr pDb = pObj->database(); OdDgLineStyleTablePtr pLineStyleTable = pDb->getLineStyleTable(OdDg::kForRead); OdUInt32 linestyleId = pObj->getOverlineLineStyleEntryId(); value = pLineStyleTable->getAt(linestyleId); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: OverlineLineWeight //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dOverlineLineWeightProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getOverlineLineWeight(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: TextnodeWordWrapLength //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dTextnodeWordWrapLengthProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getTextnodeWordWrapLength(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dTextnodeWordWrapLengthProperty::subSetValue(OdRxObject* pO, const OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; pObj->setTextnodeWordWrapLength(*rxvalue_cast(&value)); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: CrCount //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dCrCountProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getCrCount(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dCrCountProperty::subSetValue(OdRxObject* pO, const OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; pObj->setCrCount(*rxvalue_cast(&value)); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: Color //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dColorProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; OdCmEntityColor cmColor; OdUInt32 uIndex = pObj->getColorIndex(); if (uIndex == OdDg::kColorByLevel) cmColor.setColorMethod(OdCmEntityColor::kByLayer); else if (uIndex == OdDg::kColorByCell) cmColor.setColorMethod(OdCmEntityColor::kByBlock); else if (uIndex < 256) { OdCmEntityColor::setDgnColorIndex(&uIndex, (OdInt16)uIndex); cmColor.setColor(uIndex); } else { ODCOLORREF rgbColor = pObj->getColorIndex(); cmColor.setColorMethod(OdCmEntityColor::kByColor); cmColor.setRed(ODGETRED(rgbColor)); cmColor.setGreen(ODGETGREEN(rgbColor)); cmColor.setBlue(ODGETBLUE(rgbColor)); } value = cmColor; return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dColorProperty::subSetValue(OdRxObject* pO, const OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; const OdCmEntityColor* pColor = rxvalue_cast(&value); switch (pColor->colorMethod()) { case OdCmEntityColor::kByLayer: pObj->setColorIndex(OdDg::kColorByLevel); break; case OdCmEntityColor::kByBlock: pObj->setColorIndex(OdDg::kColorByCell); break; case OdCmEntityColor::kByACI: pObj->setColorIndex(pColor->colorIndex()); break; //??? case OdCmEntityColor::kByDgnIndex: pObj->setColorIndex(pColor->colorIndex()); break; case OdCmEntityColor::kByPen: pObj->setColorIndex(pColor->colorIndex()); break; //??? case OdCmEntityColor::kByColor: { ODCOLORREF curColor = ODRGB(pColor->red(), pColor->green(), pColor->blue()); pObj->setColor(curColor); } } return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: LengthMultiplier //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dLengthMultiplierProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getLengthMultiplier(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dLengthMultiplierProperty::subSetValue(OdRxObject* pO, const OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; pObj->setLengthMultiplier(*rxvalue_cast(&value)); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: HeightMultiplier //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dHeightMultiplierProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getHeightMultiplier(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dHeightMultiplierProperty::subSetValue(OdRxObject* pO, const OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; pObj->setHeightMultiplier(*rxvalue_cast(&value)); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: Italics //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dItalicsProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getItalics(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dItalicsProperty::subSetValue(OdRxObject* pO, const OdRxValue& value) const { OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; pObj->setItalics(*rxvalue_cast(&value)); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: Elements //----------------------------------------------------------------------------------------------------------------------- OdRxValueIteratorPtr OdDgTextNode2dElementsProperty::subNewValueIterator(const OdRxObject* pO) const { OdRxValueIteratorPtr res; OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (!pObj.isNull()) { res = OdRxObjectImpl::createObject(); ((OdDgElementIdValueIterator*)res.get())->m_pIter = pObj->createIterator(); ((OdDgElementIdValueIterator*)res.get())->m_bAllowNull = false; } return res; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode2dElementsProperty::subTryGetCount(const OdRxObject* pO, int& count) const { OdRxValueIteratorPtr res; const OdDgTextNode2dPtr pObj = OdDgTextNode2d::cast(pO); if (pObj.isNull()) return eNotApplicable; int N = 0; for (OdDgElementIteratorPtr it = pObj->createIterator(); !it->done(); it->step()) ++N; count = N; return eOk; } //----------------------------------------------------------------------------------------------------------------------- // OdDgTextNode3d //----------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------- // property: LineSpacing //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dLineSpacingProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getLineSpacing(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dLineSpacingProperty::subSetValue(OdRxObject* pO, const OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; pObj->setLineSpacing(*rxvalue_cast(&value)); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: FirstLineIndentation //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dFirstLineIndentationProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getFirstLineIndentation(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dFirstLineIndentationProperty::subSetValue(OdRxObject* pO, const OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; pObj->setFirstLineIndentation(*rxvalue_cast(&value)); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: ParagraphIndentation //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dParagraphIndentationProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getParagraphIndentation(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dParagraphIndentationProperty::subSetValue(OdRxObject* pO, const OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; pObj->setParagraphIndentation(*rxvalue_cast(&value)); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: TabStopArray //----------------------------------------------------------------------------------------------------------------------- OdRxValueIteratorPtr OdDgTextNode3dTabStopArrayProperty::subNewValueIterator(const OdRxObject* pO) const { OdRxValueIteratorPtr res; res = OdRxObjectImpl::createObject(); OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (!pObj.isNull()) { OdArray arrObjects; OdDoubleArray doubleArray = pObj->getTabStopArray(); const unsigned int objCount = doubleArray.size(); for (unsigned int i = 0; i < objCount; i++) { OdDouble tabStop = doubleArray.getAt(i); arrObjects.push_back(tabStop); } ((OdRxOdDoubleValueIterator*)res.get())->init(arrObjects, 0); } return res; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dTabStopArrayProperty::subTryGetCount(const OdRxObject* pO, int& count) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; count = pObj->getTabStopArray().size(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dTabStopArrayProperty::subGetValue(const OdRxObject* pO, int index, OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; OdDoubleArray doubleArray = pObj->getTabStopArray(); OdDouble arrayValue = OdDouble(); if (!doubleArray.isEmpty()) arrayValue = doubleArray.getAt(index); value = arrayValue; return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dTabStopArrayProperty::subSetValue(OdRxObject* pO, int index, const OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; OdDoubleArray doubleArray = pObj->getTabStopArray(); doubleArray.setAt(index, *rxvalue_cast(&value)); pObj->setTabStopArray(doubleArray); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dTabStopArrayProperty::subInsertValue(OdRxObject* pO, int index, const OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; OdDoubleArray doubleArray = pObj->getTabStopArray(); doubleArray.insertAt(index, *rxvalue_cast(&value)); pObj->setTabStopArray(doubleArray); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dTabStopArrayProperty::subRemoveValue(OdRxObject* pO, int index) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; OdDoubleArray doubleArray = pObj->getTabStopArray(); doubleArray.removeAt(index); pObj->setTabStopArray(doubleArray); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: DefaultTabStep //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dDefaultTabStepProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getDefaultTabStep(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: StartSpecialSymbols //----------------------------------------------------------------------------------------------------------------------- OdRxValueIteratorPtr OdDgTextNode3dStartSpecialSymbolsProperty::subNewValueIterator(const OdRxObject* pO) const { struct OdRxOdDgSpecialSymbolValueIterator : OdRxValueIterator { OdArray m_arrData; OdUInt32 m_uCurIndex; OdRxOdDgSpecialSymbolValueIterator() { m_uCurIndex = 0; } virtual void init(const OdArray& arrData, OdUInt32 uStartIndex) { m_arrData = arrData; m_uCurIndex = uStartIndex; } virtual bool done() { if (m_arrData.isEmpty()) return true; return m_uCurIndex == m_arrData.size(); } virtual bool next() { if (m_uCurIndex < m_arrData.size()) m_uCurIndex++; return !done(); } virtual OdRxValue current() const { if (m_uCurIndex >= m_arrData.size()) throw OdError(eInvalidIndex); return m_arrData[m_uCurIndex]; } }; OdRxValueIteratorPtr res; res = OdRxObjectImpl::createObject(); OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (!pObj.isNull()) { OdArray arrObjects = pObj->getTextNodeStartSpecialSymbols(); ((OdRxOdDgSpecialSymbolValueIterator*)res.get())->init(arrObjects, 0); } return res; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dStartSpecialSymbolsProperty::subTryGetCount(const OdRxObject* pO, int& count) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; count = pObj->getTextNodeStartSpecialSymbols().size(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dStartSpecialSymbolsProperty::subGetValue(const OdRxObject* pO, int index, OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; OdArray symbolsArray = pObj->getTextNodeStartSpecialSymbols(); OdDgTextExtendedProperties::OdDgSpecialSymbol arrayValue = OdDgTextExtendedProperties::kTab; if (!symbolsArray.isEmpty()) arrayValue = symbolsArray.getAt(index); value = arrayValue; return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dStartSpecialSymbolsProperty::subSetValue(OdRxObject* pO, int index, const OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; OdArray arr = pObj->getTextNodeStartSpecialSymbols(); arr.setAt(index, *rxvalue_cast(&value)); pObj->setTextNodeStartSpecialSymbols(arr); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dStartSpecialSymbolsProperty::subInsertValue(OdRxObject* pO, int index, const OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; OdArray arr = pObj->getTextNodeStartSpecialSymbols(); arr.insertAt(index, *rxvalue_cast(&value)); pObj->setTextNodeStartSpecialSymbols(arr); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dStartSpecialSymbolsProperty::subRemoveValue(OdRxObject* pO, int index) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; OdArray arr = pObj->getTextNodeStartSpecialSymbols(); arr.removeAt(index); pObj->setTextNodeStartSpecialSymbols(arr); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: Font //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dFontProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; OdDgDatabasePtr pDb = pObj->database(); OdDgFontTablePtr pFontTable = pDb->getFontTable(); OdUInt32 fontId = pObj->getFontEntryId(); value = pFontTable->getAt(fontId); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: MaxLength //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dMaxLengthProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getMaxLength(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dMaxLengthProperty::subSetValue(OdRxObject* pO, const OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; pObj->setMaxLength(*rxvalue_cast(&value)); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: Justification //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dJustificationProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getJustification(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dJustificationProperty::subSetValue(OdRxObject* pO, const OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; pObj->setJustification(*rxvalue_cast(&value)); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: TextNodeNumber //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dTextNodeNumberProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getTextNodeNumber(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dTextNodeNumberProperty::subSetValue(OdRxObject* pO, const OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; pObj->setTextNodeNumber(*rxvalue_cast(&value)); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: AnnotationScaleFlag //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dAnnotationScaleFlagProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getAnnotationScaleFlag(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dAnnotationScaleFlagProperty::subSetValue(OdRxObject* pO, const OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; pObj->setAnnotationScaleFlag(*rxvalue_cast(&value)); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: AnnotationScale //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dAnnotationScaleProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getAnnotationScale(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dAnnotationScaleProperty::subSetValue(OdRxObject* pO, const OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; pObj->setAnnotationScale(*rxvalue_cast(&value)); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: Rotation //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dRotationProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getRotation(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dRotationProperty::subSetValue(OdRxObject* pO, const OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; pObj->setRotation(*rxvalue_cast(&value)); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: Origin //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dOriginProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getOrigin(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dOriginProperty::subSetValue(OdRxObject* pO, const OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; pObj->setOrigin(*rxvalue_cast(&value)); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: BoundingPoints //----------------------------------------------------------------------------------------------------------------------- ODDG_DEFINE_RX_VALUE_ARRAY_ITERATOR(OdGePoint3d); OdRxValueIteratorPtr OdDgTextNode3dBoundingPointsProperty::subNewValueIterator(const OdRxObject* pO) const { OdRxValueIteratorPtr res; res = OdRxObjectImpl::createObject(); OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (!pObj.isNull()) { OdArray arrObjects; OdGePoint3dArray pointsArray; pObj->getBoundingPoints(pointsArray); const unsigned int objCount = pointsArray.size(); for (unsigned int i = 0; i < objCount; i++) { OdGePoint3d point = pointsArray.getAt(i); arrObjects.push_back(point); } ((OdRxOdGePoint3dValueIterator*)res.get())->init(arrObjects, 0); } return res; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dBoundingPointsProperty::subTryGetCount(const OdRxObject* pO, int& count) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; OdGePoint3dArray pointsArray; pObj->getBoundingPoints(pointsArray); count = pointsArray.size(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: UpsideDownFlag //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dUpsideDownFlagProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getUpsideDownFlag(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dUpsideDownFlagProperty::subSetValue(OdRxObject* pO, const OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; pObj->setUpsideDownFlag(*rxvalue_cast(&value)); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: LineSpacingType //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dLineSpacingTypeProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getLineSpacingType(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dLineSpacingTypeProperty::subSetValue(OdRxObject* pO, const OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; pObj->setLineSpacingType(*rxvalue_cast(&value)); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: StackedFractionAlign //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dStackedFractionAlignProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getStackedFractionAlign(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dStackedFractionAlignProperty::subSetValue(OdRxObject* pO, const OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; pObj->setStackedFractionAlign(*rxvalue_cast(&value)); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: StackedFractionSection //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dStackedFractionSectionProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getStackedFractionSection(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dStackedFractionSectionProperty::subSetValue(OdRxObject* pO, const OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; pObj->setStackedFractionSection(*rxvalue_cast(&value)); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: StackedFractionType //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dStackedFractionTypeProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getStackedFractionType(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dStackedFractionTypeProperty::subSetValue(OdRxObject* pO, const OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; pObj->setStackedFractionType(*rxvalue_cast(&value)); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: Slant //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dSlantProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getSlant(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dSlantProperty::subSetValue(OdRxObject* pO, const OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; pObj->setSlant(*rxvalue_cast(&value)); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: UnderlineSpacing //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dUnderlineSpacingProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getUnderlineSpacing(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dUnderlineSpacingProperty::subSetValue(OdRxObject* pO, const OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; pObj->setUnderlineSpacing(*rxvalue_cast(&value)); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: LineOffset //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dLineOffsetProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getLineOffset(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dLineOffsetProperty::subSetValue(OdRxObject* pO, const OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; pObj->setLineOffset(*rxvalue_cast(&value)); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: CodePage //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dCodePageProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getCodePage(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dCodePageProperty::subSetValue(OdRxObject* pO, const OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; pObj->setCodePage(*rxvalue_cast(&value)); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: ShxBigFont //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dShxBigFontProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; OdDgDatabasePtr pDb = pObj->database(); OdDgFontTablePtr pFontTable = pDb->getFontTable(OdDg::kForRead); OdUInt32 fontId = pObj->getShxBigFontEntryId(); value = pFontTable->getAt(fontId); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: BackgroundLineStyle //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dBackgroundLineStyleProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; OdDgDatabasePtr pDb = pObj->database(); OdDgLineStyleTablePtr pLineStyleTable = pDb->getLineStyleTable(OdDg::kForRead); OdUInt32 linestyleId = pObj->getBackgroundLineStyleEntryId(); value = pLineStyleTable->getAt(linestyleId); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: BackgroundLineWeight //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dBackgroundLineWeightProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getBackgroundLineWeight(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: BackgroundColor //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dBackgroundColorProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; OdCmEntityColor cmColor; OdUInt32 uIndex = pObj->getBackgroundColorIndex(); if (uIndex == OdDg::kColorByLevel) cmColor.setColorMethod(OdCmEntityColor::kByLayer); else if (uIndex == OdDg::kColorByCell) cmColor.setColorMethod(OdCmEntityColor::kByBlock); else if (uIndex < 256) { OdCmEntityColor::setDgnColorIndex(&uIndex, (OdInt16)uIndex); cmColor.setColor(uIndex); } else { ODCOLORREF rgbColor = pObj->getColor(); cmColor.setColorMethod(OdCmEntityColor::kByColor); cmColor.setRed(ODGETRED(rgbColor)); cmColor.setGreen(ODGETGREEN(rgbColor)); cmColor.setBlue(ODGETBLUE(rgbColor)); } value = cmColor; return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: BackgroundFillColor //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dBackgroundFillColorProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; OdCmEntityColor cmColor; OdUInt32 uIndex = pObj->getBackgroundFillColorIndex(); if (uIndex == OdDg::kColorByLevel) cmColor.setColorMethod(OdCmEntityColor::kByLayer); else if (uIndex == OdDg::kColorByCell) cmColor.setColorMethod(OdCmEntityColor::kByBlock); else if (uIndex < 256) { OdCmEntityColor::setDgnColorIndex(&uIndex, (OdInt16)uIndex); cmColor.setColor(uIndex); } else { ODCOLORREF rgbColor = pObj->getColor(); cmColor.setColorMethod(OdCmEntityColor::kByColor); cmColor.setRed(ODGETRED(rgbColor)); cmColor.setGreen(ODGETGREEN(rgbColor)); cmColor.setBlue(ODGETBLUE(rgbColor)); } value = cmColor; return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: BackgroundBorder //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dBackgroundBorderProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getBackgroundBorder(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: OverlineSpacing //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dOverlineSpacingProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getOverlineSpacing(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dOverlineSpacingProperty::subSetValue(OdRxObject* pO, const OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; pObj->setOverlineSpacing(*rxvalue_cast(&value)); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: TextStyle //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dTextStyleProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; OdDgDatabasePtr pDb = pObj->database(); OdDgTextStyleTablePtr pTextStyleTable = pDb->getTextStyleTable(OdDg::kForRead); OdUInt32 textStyleId = pObj->getTextStyleEntryId(); value = pTextStyleTable->getAt(textStyleId); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: UnderlineColor //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dUnderlineColorProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; OdCmEntityColor cmColor; OdUInt32 uIndex = pObj->getUnderlineColorIndex(); if (uIndex == OdDg::kColorByLevel) cmColor.setColorMethod(OdCmEntityColor::kByLayer); else if (uIndex == OdDg::kColorByCell) cmColor.setColorMethod(OdCmEntityColor::kByBlock); else if (uIndex < 256) { OdCmEntityColor::setDgnColorIndex(&uIndex, (OdInt16)uIndex); cmColor.setColor(uIndex); } else { ODCOLORREF rgbColor = pObj->getColor(); cmColor.setColorMethod(OdCmEntityColor::kByColor); cmColor.setRed(ODGETRED(rgbColor)); cmColor.setGreen(ODGETGREEN(rgbColor)); cmColor.setBlue(ODGETBLUE(rgbColor)); } value = cmColor; return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: UnderlineLineStyle //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dUnderlineLineStyleProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; OdDgDatabasePtr pDb = pObj->database(); OdDgLineStyleTablePtr pLineStyleTable = pDb->getLineStyleTable(OdDg::kForRead); OdUInt32 linestyleId = pObj->getUnderlineLineStyleEntryId(); value = pLineStyleTable->getAt(linestyleId); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: UnderlineLineWeight //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dUnderlineLineWeightProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getUnderlineLineWeight(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: OverlineColor //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dOverlineColorProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; OdCmEntityColor cmColor; OdUInt32 uIndex = pObj->getOverlineColorIndex(); if (uIndex == OdDg::kColorByLevel) cmColor.setColorMethod(OdCmEntityColor::kByLayer); else if (uIndex == OdDg::kColorByCell) cmColor.setColorMethod(OdCmEntityColor::kByBlock); else if (uIndex < 256) { OdCmEntityColor::setDgnColorIndex(&uIndex, (OdInt16)uIndex); cmColor.setColor(uIndex); } else { ODCOLORREF rgbColor = pObj->getColor(); cmColor.setColorMethod(OdCmEntityColor::kByColor); cmColor.setRed(ODGETRED(rgbColor)); cmColor.setGreen(ODGETGREEN(rgbColor)); cmColor.setBlue(ODGETBLUE(rgbColor)); } value = cmColor; return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: OverlineLineStyle //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dOverlineLineStyleProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; OdDgDatabasePtr pDb = pObj->database(); OdDgLineStyleTablePtr pLineStyleTable = pDb->getLineStyleTable(OdDg::kForRead); OdUInt32 linestyleId = pObj->getOverlineLineStyleEntryId(); value = pLineStyleTable->getAt(linestyleId); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: OverlineLineWeight //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dOverlineLineWeightProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getOverlineLineWeight(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: TextnodeWordWrapLength //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dTextnodeWordWrapLengthProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getTextnodeWordWrapLength(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dTextnodeWordWrapLengthProperty::subSetValue(OdRxObject* pO, const OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; pObj->setTextnodeWordWrapLength(*rxvalue_cast(&value)); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: CrCount //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dCrCountProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getCrCount(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dCrCountProperty::subSetValue(OdRxObject* pO, const OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; pObj->setCrCount(*rxvalue_cast(&value)); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: Color //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dColorProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; OdCmEntityColor cmColor; OdUInt32 uIndex = pObj->getColorIndex(); if (uIndex == OdDg::kColorByLevel) cmColor.setColorMethod(OdCmEntityColor::kByLayer); else if (uIndex == OdDg::kColorByCell) cmColor.setColorMethod(OdCmEntityColor::kByBlock); else if (uIndex < 256) { OdCmEntityColor::setDgnColorIndex(&uIndex, (OdInt16)uIndex); cmColor.setColor(uIndex); } else { ODCOLORREF rgbColor = pObj->getColor(); cmColor.setColorMethod(OdCmEntityColor::kByColor); cmColor.setRed(ODGETRED(rgbColor)); cmColor.setGreen(ODGETGREEN(rgbColor)); cmColor.setBlue(ODGETBLUE(rgbColor)); } value = cmColor; return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dColorProperty::subSetValue(OdRxObject* pO, const OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; const OdCmEntityColor* pColor = rxvalue_cast(&value); switch (pColor->colorMethod()) { case OdCmEntityColor::kByLayer: pObj->setColorIndex(OdDg::kColorByLevel); break; case OdCmEntityColor::kByBlock: pObj->setColorIndex(OdDg::kColorByCell); break; case OdCmEntityColor::kByACI: pObj->setColorIndex(pColor->colorIndex()); break; //??? case OdCmEntityColor::kByDgnIndex: pObj->setColorIndex(pColor->colorIndex()); break; case OdCmEntityColor::kByPen: pObj->setColorIndex(pColor->colorIndex()); break; //??? case OdCmEntityColor::kByColor: { ODCOLORREF curColor = ODRGB(pColor->red(), pColor->green(), pColor->blue()); pObj->setColor(curColor); } } return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: LengthMultiplier //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dLengthMultiplierProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getLengthMultiplier(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dLengthMultiplierProperty::subSetValue(OdRxObject* pO, const OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; pObj->setLengthMultiplier(*rxvalue_cast(&value)); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: HeightMultiplier //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dHeightMultiplierProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getHeightMultiplier(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dHeightMultiplierProperty::subSetValue(OdRxObject* pO, const OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; pObj->setHeightMultiplier(*rxvalue_cast(&value)); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: Italics //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dItalicsProperty::subGetValue(const OdRxObject* pO, OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; value = pObj->getItalics(); return eOk; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dItalicsProperty::subSetValue(OdRxObject* pO, const OdRxValue& value) const { OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; pObj->setItalics(*rxvalue_cast(&value)); return eOk; } //----------------------------------------------------------------------------------------------------------------------- // property: Elements //----------------------------------------------------------------------------------------------------------------------- OdRxValueIteratorPtr OdDgTextNode3dElementsProperty::subNewValueIterator(const OdRxObject* pO) const { OdRxValueIteratorPtr res; OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (!pObj.isNull()) { res = OdRxObjectImpl::createObject(); ((OdDgElementIdValueIterator*)res.get())->m_pIter = pObj->createIterator(); ((OdDgElementIdValueIterator*)res.get())->m_bAllowNull = false; } return res; } //----------------------------------------------------------------------------------------------------------------------- OdResult OdDgTextNode3dElementsProperty::subTryGetCount(const OdRxObject* pO, int& count) const { OdRxValueIteratorPtr res; const OdDgTextNode3dPtr pObj = OdDgTextNode3d::cast(pO); if (pObj.isNull()) return eNotApplicable; int N = 0; for (OdDgElementIteratorPtr it = pObj->createIterator(); !it->done(); it->step()) ++N; count = N; return eOk; } //-----------------------------------------------------------------------------------------------------------------------