/////////////////////////////////////////////////////////////////////////////// // Copyright (C) 2002-2025, Open Design Alliance (the "Alliance"). // All rights reserved. // // This software and its documentation and related materials are owned by // the Alliance. The software may only be incorporated into application // programs owned by members of the Alliance, subject to a signed // Membership Agreement and Supplemental Software License Agreement with the // Alliance. The structure and organization of this software are the valuable // trade secrets of the Alliance and its suppliers. The software is also // protected by copyright law and international treaty provisions. Application // programs incorporating this software must include the following statement // with their copyright notices: // // This application incorporates Open Design Alliance software pursuant to a license // agreement with Open Design Alliance. // Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance. // All rights reserved. // // By use of this software, its documentation or related materials, you // acknowledge and accept the above terms. /////////////////////////////////////////////////////////////////////////////// #include "StdAfx.h" #include "OdDgCDAPropertiesModule.h" #include "DgCellHeader3dPropertyFacets.h" #include "DgCellHeader3dProperties.h" #include "DgCellHeader.h" #include "RxMember.h" #include "RxProperty.h" #include "RxAttribute.h" //================================================================================================== FIRSTDLL_EXPORT void odrxSetMemberConstructor(OdRxClass* pClass, OdRxMemberCollectionConstructorPtr pc, void* data = 0); //================================================================================================== // Implementation of class OdDgCellHeader3dFacetProvider //================================================================================================== OdRxFacetProviderPtr OdDgCellHeader3dFacetProvider::instance; //================================================================================================== OdRxFacetProviderPtr OdDgCellHeader3dFacetProvider::createObject() { instance = OdRxObjectImpl::createObject(); return instance; } //================================================================================================== void OdDgCellHeader3dFacetProvider::addProvider() { OdRxMemberQueryEngine::theEngine()->addFacetProvider(instance); } //================================================================================================== void OdDgCellHeader3dFacetProvider::removeProvider() { OdRxMemberQueryEngine::theEngine()->removeFacetProvider(instance); } //================================================================================================== void OdDgCellHeader3dFacetProvider::getFacets(const OdRxObject* pO, const OdRxMemberQueryContext* pContext, OdArray& facets) { if (!(OdDgCellHeader3d::cast(pO)).isNull()) { // Create instance for static property facet. OdRxClassPtr pCellHeader3dPropertyFacet = OdDgCellHeader3dPropertyFacet::createObject(); // Set member constructor to create static properties. ::odrxSetMemberConstructor(pCellHeader3dPropertyFacet, &OdDgCellHeader3dPropertyFacet::makeMembers, (void*)pO); // store facet instance. facets.append(pCellHeader3dPropertyFacet); // Create instance for dynamic property facet. OdRxClassPtr pCellHeader3dLinkageSizePropertyFacet = OdDgCellHeader3dLinkageSizePropertyFacet::createObject(); // Set member constructor to create dynamic properties. ::odrxSetMemberConstructor(pCellHeader3dLinkageSizePropertyFacet, &OdDgCellHeader3dLinkageSizePropertyFacet::makeMembers, (void*)pO); // store facet instance. facets.append(pCellHeader3dLinkageSizePropertyFacet); } } //================================================================================================== // Implementation of OdDgCellHeader3dPropertyFacet //================================================================================================== inline void appendCellHeader3dPropertyProperties(OdRxMemberCollectionBuilder& collectionBuilder) { OdDgCDAPropertiesModule::m_addedCellHeaderProperties.append(OdDgCellHeader3dTransformationExProperty::createObject(collectionBuilder.owner())); collectionBuilder.add(OdDgCDAPropertiesModule::m_addedCellHeaderProperties.last()); OdDgCDAPropertiesModule::m_addedCellHeaderProperties.append(OdDgCellHeader3dIsBrepProperty::createObject(collectionBuilder.owner())); collectionBuilder.add(OdDgCDAPropertiesModule::m_addedCellHeaderProperties.last()); } //================================================================================================== void OdDgCellHeader3dPropertyFacet::makeMembers(OdRxMemberCollectionBuilder& collectionBuilder, void* data) { const OdRxObject* pO = (const OdRxObject*)data; OdDgCellHeader3dPtr pCellHeader3d = OdDgCellHeader3d::cast(pO); if (pCellHeader3d.isNull()) return; appendCellHeader3dPropertyProperties(collectionBuilder); } //================================================================================================== // Implementation of OdDgCellHeader3dLinkageSizePropertyFacet //================================================================================================== inline void appendCellHeader3dLinkageSizeProperties(const OdDgCellHeader3d* pElement, OdRxMemberCollectionBuilder& collectionBuilder) { try { if (!pElement) return; OdRxObjectPtrArray arrLinkages; pElement->getLinkages(arrLinkages); for (OdUInt32 i = 0; i < arrLinkages.size(); i++) { OdString strName; strName.format(L"%d)", i + 1); strName += L" " + arrLinkages[i]->isA()->name(); collectionBuilder.add(OdDgCellHeader3dLinkageSizeProperty::createObject(strName, i, i + 1, collectionBuilder.owner())); } } catch (...) { } } //================================================================================================== void OdDgCellHeader3dLinkageSizePropertyFacet::makeMembers(OdRxMemberCollectionBuilder& collectionBuilder, void* data) { const OdRxObject* pO = (const OdRxObject*)data; OdDgCellHeader3dPtr pElement = OdDgCellHeader3d::cast(pO); if (pElement.isNull()) return; appendCellHeader3dLinkageSizeProperties(pElement, collectionBuilder); } //==================================================================================================