CFx SDK Documentation 2026 SP0
Loading...
Searching...
No Matches
TrVisMetafilePlayback.h
Go to the documentation of this file.
1
2// Copyright (C) 2002-2024, Open Design Alliance (the "Alliance").
3// All rights reserved.
4//
5// This software and its documentation and related materials are owned by
6// the Alliance. The software may only be incorporated into application
7// programs owned by members of the Alliance, subject to a signed
8// Membership Agreement and Supplemental Software License Agreement with the
9// Alliance. The structure and organization of this software are the valuable
10// trade secrets of the Alliance and its suppliers. The software is also
11// protected by copyright law and international treaty provisions. Application
12// programs incorporating this software must include the following statement
13// with their copyright notices:
14//
15// This application incorporates Open Design Alliance software pursuant to a license
16// agreement with Open Design Alliance.
17// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.
18// All rights reserved.
19//
20// By use of this software, its documentation or related materials, you
21// acknowledge and accept the above terms.
23// GLES2 metafile inverse converter
24
25#ifndef ODTRVISMETAFILEPLAYBACK
26#define ODTRVISMETAFILEPLAYBACK
27
28#include "TD_PackPush.h"
29
30#include "TrVisDefs.h"
31#include "TrVisMetafileStream.h"
33#include "MetafileTransformStack.h"
34#define STL_USING_SET
35#include "OdaSTL.h"
36
38
47{
48 public:
49 virtual void metafilePlayMetafile(OdTrVisDisplayId /*metafileId*/) { }
50 virtual void metafilePushTransform(const OdGeMatrix3d & /*mTransform*/) { }
51 virtual void metafilePopTransform() { }
52
53 virtual const OdGeMatrix3d *metafileOcsTransform(const OdGeMatrix3d ** /*pInverse*/ = nullptr) { return nullptr; }
54 virtual const OdTrVisTtfFontsCacheClient *metafileTtfFontsCache() { return NULL; }
55
56 virtual void metafileProcessUserEntry(OdUInt32 /*dataLength*/, const OdUInt8 * /*pData*/) { }
58 virtual const OdTrVisDisplayId *metafileBlockMetaList(OdTrVisBlockId /*blockId*/, OdUInt32 & /*numListEntries*/) { return NULL; }
59
60 virtual bool metafileSelectMarker(OdTrVisGsMarker /*gsMarker*/, const OdBaseMetafileContainer * /*pContainer*/) { return true; }
61
62 virtual bool metafilePointProc(const OdGePoint3d * /*pVertex*/) { return true; }
63 virtual bool metafilePolyPointProc(const OdGePoint3d * /*pVertex*/, const OdGsMarker * /*pSubEntMarkers*/) { return true; }
64 virtual bool metafileLineProc(const OdGePoint3d * /*pVertex*/) { return true; }
65 virtual bool metafileTriangleProc(const OdGePoint3d * /*pVertex*/) { return true; }
66 virtual bool metafileGeomVisibility(OdTrVisGeomType /*geomType*/) { return true; }
67};
68
77{
78 public:
91 protected:
93 {
94 kIgnoreSelGeom = (1 << 0), // Ignore selection-only geometry (can't be set with kIgnoreNonSelGeom)
95 kIgnoreNonSelGeom = (1 << 1), // Ignore geometry which can't be selected (can't be set with kIgnoreSelGeom)
96 kClientStream = (1 << 2), // Client-side metafile stream
97 kIgnore2d = (1 << 3), // Ignore geometry marked as 2d
98 kIgnore3d = (1 << 4) // Ignore geometry marked as 3d
99 };
100 protected:
101 // Player->Owner communication
103 // Interprocess context for nested play() calls
105 {
106 // Current selection markers
108 // Number of selection markers
110 // Selection markers activity
112 // Suppress flags
113 enum {
114 kSuppressByGeom = (1 << 0),
116 kSuppressByMf = (1 << 2)
117 };
119
120 // Default initializer
126 // Configuration flags
129 // Inclusion metafile filers
130 typedef std::set<OdTrVisMetafileId> FilterMfsMap;
132 // Marker till which the Drawable PE will perform selection itself
134 public:
136 bool bClientStream = false, PlayMode playMode = kPlayModeUndefined)
137 : m_pCallback(pCallback)
138 , m_configFlags((bClientStream) ? kClientStream : 0)
139 , m_primDrawMask(0xFFFFFFFF)
140 , m_nMarkerBorder(0)
143 {
144 }
145
147 {
148 m_pCallback = pCallback;
149 }
151 {
152 return m_pCallback;
153 }
154
163 inline PlayType playType() const
164 {
166 }
167
170 switch (playMode)
173 default: break;
174 };
175 }
176 inline PlayMode playMode() const
177 {
180 return kPlayModeUndefined;
181 }
182
184 {
186 }
188 {
189 return m_primDrawMask;
190 }
191
192 inline void setFilterMetafile(OdTrVisMetafileId mfId) { m_filterMfs.clear(); m_filterMfs.insert(mfId); }
193 inline void addFilterMetafile(OdTrVisMetafileId mfId) { m_filterMfs.insert(mfId); }
194 inline void removeFilterMetafile(OdTrVisMetafileId mfId) { m_filterMfs.erase(mfId); }
196 inline void setFilterMetafiles(const OdTrVisMetafileId *pMfIds, OdUInt32 nMfs)
197 { m_filterMfs.clear(); for (OdUInt32 nMf = 0; nMf < nMfs; nMf++) m_filterMfs.insert(pMfIds[nMf]); }
198 inline void resetFilterMetafiles() { m_filterMfs.clear(); }
200 inline bool hasFilterMetafiles() const { return !m_filterMfs.empty(); }
201 inline bool isMetafileFiltered(OdTrVisMetafileId mfId) const { return m_filterMfs.find(mfId) != m_filterMfs.end(); }
202
203 bool play(const OdBaseMetafileContainer *pContainer, bool bCheckMarks = true, bool bHighlighted = false);
204 protected:
206
207 bool canDrawablePerformSelectionItself(OdUInt64* nMarkerBorder = NULL);
208
210};
211
220{
221 protected:
222 // Conveyor communication interfaces
225 // Actual readdress callback
227 // Callback redirection
228 virtual void metafilePlayMetafile(OdTrVisDisplayId metafileId);
229 virtual void metafilePushTransform(const OdGeMatrix3d &mtx);
230 virtual void metafilePopTransform();
232 virtual void metafileProcessUserEntry(OdUInt32 dataLength, const OdUInt8 *pData);
234 virtual bool metafileSelectMarker(OdTrVisGsMarker gsMarker, const OdBaseMetafileContainer *pContainer);
235 virtual const OdTrVisDisplayId *metafileBlockMetaList(OdTrVisBlockId blockId, OdUInt32 &numListEntries);
236
237 // Internal callback implementations
238 virtual bool metafilePointProc(const OdGePoint3d *pVertex);
239 virtual bool metafilePolyPointProc(const OdGePoint3d * pVertex, const OdGsMarker * pSubEntMarkers);
240 virtual bool metafileLineProc(const OdGePoint3d *pVertex);
241 virtual bool metafileTriangleProc(const OdGePoint3d *pVertex);
243 public:
252 {
253 }
254
256 {
257 m_pActualCallback = pCallback;
258 }
260 {
261 return m_pActualCallback;
262 }
264 {
265 return m_pCtx;
266 }
267
268 void play(const OdBaseMetafileContainer *pContainer, OdGiConveyorGeometry *pGeom, OdGiConveyorContext *pCtx,
269 bool bCheckMarks = true, bool bHighlighted = false);
270};
271
272#include "TD_PackPop.h"
273
274#endif // ODTRVISMETAFILEPLAYBACK
ptrdiff_t OdGsMarker
unsigned int OdUInt32
int OdInt32
unsigned char OdUInt8
#define SETBIT_0(flags, bit)
Definition OdaDefs.h:519
#define GETBIT(flags, bit)
Definition OdaDefs.h:517
#define SETBIT_1(flags, bit)
Definition OdaDefs.h:520
OdUInt64 OdTrVisGsMarker
Definition TrVisDefs.h:87
OdTrVisId OdTrVisExtensionId
Definition TrVisDefs.h:128
OdTrVisId OdTrVisDisplayId
Definition TrVisDefs.h:114
OdTrVisId OdTrVisBlockId
Definition TrVisDefs.h:130
OdTrVisId OdTrVisMetafileId
Definition TrVisDefs.h:105
@ OdTrVisMetaRecMarkerType_Selection
@ OdTrVisMetaRecMarkerType_NTypes
@ OdTrVisMetaRecMarkerType_Metafile
OdTrVisMarkBase< OdUInt64 > OdTrVisDefProcMark
virtual const OdTrVisDisplayId * metafileBlockMetaList(OdTrVisBlockId blockId, OdUInt32 &numListEntries)
OdGiConveyorContext * context() const
OdTrVisMetafilePlaybackCallback * m_pActualCallback
virtual bool metafileTriangleProc(const OdGePoint3d *pVertex)
void setCallback(OdTrVisMetafilePlaybackCallback *pCallback)
virtual bool metafileLineProc(const OdGePoint3d *pVertex)
OdTrVisMetafileConveyorPlayback(OdTrVisMetafilePlaybackCallback *pCallback=NULL, PlayType playType=kPlayForSelection, bool bClientStream=false, PlayMode playMode=kPlayModeUndefined)
virtual void metafilePlayMetafile(OdTrVisDisplayId metafileId)
void play(const OdBaseMetafileContainer *pContainer, OdGiConveyorGeometry *pGeom, OdGiConveyorContext *pCtx, bool bCheckMarks=true, bool bHighlighted=false)
virtual bool metafileSelectMarker(OdTrVisGsMarker gsMarker, const OdBaseMetafileContainer *pContainer)
virtual bool metafileGeomVisibility(OdTrVisGeomType geomType)
virtual bool metafilePolyPointProc(const OdGePoint3d *pVertex, const OdGsMarker *pSubEntMarkers)
OdTrVisMetafilePlaybackCallback * callback() const
virtual const OdTrVisTtfFontsCacheClient * metafileTtfFontsCache()
virtual void metafilePlayExtensionObject(OdTrVisExtensionId extId)
virtual void metafilePushTransform(const OdGeMatrix3d &mtx)
virtual void metafileProcessUserEntry(OdUInt32 dataLength, const OdUInt8 *pData)
virtual bool metafilePointProc(const OdGePoint3d *pVertex)
virtual bool metafileSelectMarker(OdTrVisGsMarker, const OdBaseMetafileContainer *)
virtual void metafilePlayMetafile(OdTrVisDisplayId)
virtual void metafileProcessUserEntry(OdUInt32, const OdUInt8 *)
virtual const OdTrVisTtfFontsCacheClient * metafileTtfFontsCache()
virtual void metafilePlayExtensionObject(OdTrVisExtensionId)
virtual const OdTrVisDisplayId * metafileBlockMetaList(OdTrVisBlockId, OdUInt32 &)
virtual bool metafileLineProc(const OdGePoint3d *)
virtual bool metafilePolyPointProc(const OdGePoint3d *, const OdGsMarker *)
virtual void metafilePushTransform(const OdGeMatrix3d &)
virtual bool metafileTriangleProc(const OdGePoint3d *)
virtual bool metafileGeomVisibility(OdTrVisGeomType)
virtual const OdGeMatrix3d * metafileOcsTransform(const OdGeMatrix3d **=nullptr)
virtual bool metafilePointProc(const OdGePoint3d *)
struct OdTrVisMetafilePlayback::InprocRegisters m_inprocContext
void setCallback(OdTrVisMetafilePlaybackCallback *pCallback)
friend struct OdTrVisMetafilePlaybackMarkersIterator
std::set< OdTrVisMetafileId > FilterMfsMap
void setPrimitiveDrawMask(OdUInt32 mask)
bool isMetafileFiltered(OdTrVisMetafileId mfId) const
OdGsMarker getCurrentSelectionMarker()
bool play(const OdBaseMetafileContainer *pContainer, bool bCheckMarks=true, bool bHighlighted=false)
void setFilterMetafiles(const OdTrVisMetafileId *pMfIds, OdUInt32 nMfs)
void setPlayType(PlayType playType)
void addFilterMetafile(OdTrVisMetafileId mfId)
OdTrVisMetafilePlaybackCallback * callback() const
bool canDrawablePerformSelectionItself(OdUInt64 *nMarkerBorder=NULL)
void removeFilterMetafile(OdTrVisMetafileId mfId)
OdTrVisMetafilePlayback(OdTrVisMetafilePlaybackCallback *pCallback=NULL, PlayType playType=kPlayForSelection, bool bClientStream=false, PlayMode playMode=kPlayModeUndefined)
OdTrVisGsMarker annihilateInprocMarkers(InprocRegisters &inprocCtx, OdInt32 first, OdInt32 count)
OdTrVisMetafilePlaybackCallback * m_pCallback
void setPlayMode(PlayMode playMode)
void setFilterMetafile(OdTrVisMetafileId mfId)
GLenum GLint GLuint mask
Definition gles2_ext.h:262
GLsizei GLsizei * count
Definition gles2_ext.h:276
const OdTrVisDefProcMark * pMarks[OdTrVisMetaRecMarkerType_NTypes]
OdUInt32 nMarks[OdTrVisMetaRecMarkerType_NTypes]