/////////////////////////////////////////////////////////////////////////////// // 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. /////////////////////////////////////////////////////////////////////////////// #ifndef __OD_GS_VISUALIZE_VIEW__ #define __OD_GS_VISUALIZE_VIEW__ #include "TD_PackPush.h" #include "Gs/GsBaseInclude.h" #include "Gs/GsBaseMaterialView.h" #include "GsVisualizeGeometry.h" #include "TvFactory.h" #include #include #include "RxDispatchImpl.h" #include "RxVariantValue.h" #include "DbObjectId.h" #include "GsVisualizeEntityPool.h" #include "../Kernel/Extensions/ExRender/CommonDeviceProps.h" #include "ThreadsCounter.h" #include "Gs/GsDbRootLinkage.h" #include "RxObject.h" #include "GsVisualizeVectorizer.h" #include "GsVisualizeClip.h" #include "Gi/GiSectionGeometryOutput.h" class ExGsVisualizeView : public OdGsBaseVectorizeView, public OdGsModelReactor { OdGiClipBoundary m_eyeClip; // ExGsVisualizeVectorizerPtr m_pVect; OdArray m_vectorizersAllocated; OdArray m_vectorizersUsed; protected: virtual OdGsBaseVectorizer* getVectorizer(bool bDisplay); virtual void releaseVectorizer(OdGsBaseVectorizer* pVect); ExGsVisualizeDevice* device() { return (ExGsVisualizeDevice*)OdGsBaseVectorizeView::device(); } ExGsVisualizeView(); virtual ~ExGsVisualizeView(); friend class ExGsVisualizeDevice; static OdGsViewPtr createObject() { return OdRxObjectImpl::createObject(); } /**********************************************************************/ /* To know when to set traits */ /**********************************************************************/ //void setEntityTraits(); public: /* void ownerDrawDc( const OdGePoint3d& origin, const OdGeVector3d& u, const OdGeVector3d& v, const OdGiSelfGdiDrawable* pDrawable, bool bDcAligned, bool bAllowClipping);*/ virtual void clearLinetypeCache(){} virtual OdUInt32 numVectorizers() const; void syncTvView(); static OdTvGsView::RenderMode fromGsMode( OdGsView::RenderMode ); virtual void update(); virtual bool add(OdGiDrawable* pSceneGraph, OdGsModel* pModel); //model reactors virtual bool onModified(OdGsModel *pModel, OdGiDrawable *pModified, OdGiDrawable *pParent); virtual bool onModified(OdGsModel *pModel, OdGiDrawable *pModified, OdDbStub *parentID); virtual void setLineweightEnum(int numLineweights, const OdUInt8* lineweights, const OdUInt16 *altSourceLwds = NULL); virtual void setViewportClipRegion(int numContours, const int* numVertices, const OdGePoint2d* vertices); virtual void setViewportClipRegion(int numContours, int const* numVertices, OdGsDCPoint const* vertices); virtual void setViewport3dClipping(const OdGiClipBoundary* pBoundary, const OdGiAbstractClipBoundary* pClipInfo = NULL); OdTvGsViewId getTvViewId(); OdGiSectionGeometryOutputPtr getSectionGeometryOutput() const; OdGiCuttedGeometryOutputPtr getCuttedGeometryOutput() const; void actualizeSectionTraits( const OdGiConveyorContext* pCtx, ExGsVisualizeGeometryBase* pGeom ); protected: OdTvGsViewId m_tvViewId; static int m_nViewCounter; static OdString generateViewName(); typedef std::set< OdGsModel* > ModelsSet; ModelsSet m_reactingModels; ExGsVisualizeTimer *m_pTimer; OdGiSectionGeometryOutputPtr m_pGiSectionGeometryOutput; OdGiCuttedGeometryOutputPtr m_pGiCuttedGeometryOutput; public: void setTimer( ExGsVisualizeTimer* timer ) { m_pTimer = timer; } protected: OdGiDrawablePtr openDrawable( OdDbStub* ); //data for TvView initialization enum TvViewInitialization { kNone = 0, kSetLineweightEnum = 1 << 0, kSetClipRegion = 1 << 1, kSetViewport3dClipping = 1 << 2 }; OdUInt8 m_viewIntializationFlags; OdUInt8Array m_forTvLineWeightEnum; OdUInt16Array m_forTvAltLWEnum; enum AdditionalViewFlag { kIndexedLineWeight = 1, kFrozenLayersChanged = 2, kInitializeTvView = 4, kForceDisableDefaultLight = 8, kRenderModeStored = 16 }; OdUInt8 m_additionalViewFlags; struct ClipRegionInfo { OdArray< OdUInt32 > m_vertexNums; OdArray< OdGePoint2d> m_pts; }; ClipRegionInfo m_ClipRegionInfo; OdSharedPtr m_p3dClip; bool needUpdateFrozenLayers() const { return GETBIT( m_additionalViewFlags, kFrozenLayersChanged ); } void setNeedUpdateFrozenLayers( bool bSet ) { SETBIT( m_additionalViewFlags, kFrozenLayersChanged, bSet ); } void syncFrozenLayers(); bool isInitializeTvView() const { return GETBIT( m_additionalViewFlags, kInitializeTvView ); } void setInitializeTvView( bool bSet ) { SETBIT( m_additionalViewFlags, kInitializeTvView, bSet ); } void syncVisualStyles(); void syncBackgrounds(); void syncViewportTraits(); void syncRenderModeByVisualStyle(); OdTvClipBoundary* fromDbClipBoundary(const OdGiClipBoundary* pGiBoundary, const OdGiAbstractClipBoundary* pGiClipInfo); void getTvPoint2dArrayFromGePoint2dArray(const OdGePoint2dArray& giBoundaryPoints, OdTvPoint2dArray& tvBoundaryPoints); OdTvSectionGeometryOutputPtr fromDbSectionGeometryOutput(OdGiSectionGeometryOutputPtr pGiSectionGeometryOutput) const; OdTvCuttedGeometryOutputPtr fromDbCuttedGeometryOutput(OdGiCuttedGeometryOutputPtr pGiCuttedGeometryOutput) const; OdTvColorDef getTvColorDefFromCm(const OdCmEntityColor& cmColor) const; OdTvTransparencyDef getOdTvTransparencyDefFromCmTransparency(const OdCmTransparency& transparency) const; public: bool isIndexedLineWeight() const { return GETBIT( m_additionalViewFlags, kIndexedLineWeight ); } void setIndexedLineWeight( bool bSet ) { SETBIT( m_additionalViewFlags, kIndexedLineWeight, bSet ); } //OdGsViewImpl accessors void implPropagateLayerChanges(); void implGetRootNode(); //Frozen layers support virtual void freezeLayer(OdDbStub* layerID); virtual void thawLayer(OdDbStub* layerID); virtual void clearFrozenLayers(); virtual void enableDefaultLighting(bool bEnable, DefaultLightingType lightType = kTwoLights); virtual OdGiPlanarClipBoundary* getConveurClip() const; OdGiOrthoClipperEx* clipper(); bool hasClipper() const { return !m_pClipper.isNull(); } OdTvSectionGeometryTraitsPtr fromGiSectionGeometryTraitsToTv(const OdGiSubEntityTraitsData* pGiSubEntityTraitsData, bool bEnable) const; OdUInt32 fromGiSectionGeometryTraitsFlagsToTv(OdUInt32 giFlags) const; OdGsView::RenderMode originalRenderMode() const { return m_originalRenderMode; } void savePatternCache(); void restorePatternCache(); virtual bool viewExtents( OdGeBoundBlock3d& extents ) const override; protected: void enableViewportClip(); void disableViewportClip(); OdGiPlanarClipBoundary* m_pConveurClip; OdGiOrthoClipperExPtr m_pClipper; OdGsView::RenderMode m_originalRenderMode; const OdGiFill* m_pSectionFillPatternCache = nullptr; const OdGiFill* m_pCuttedFillPatternCache = nullptr; }; // end ExGsVisualizeView #include "TD_PackPop.h" #endif // __OD_GS_VISUALIZE_VIEW__