// // OdEmf.h // #ifndef OD_EMF_H #define OD_EMF_H #include "OdWmf.h" #ifdef _MSC_VER #pragma warning (push) #endif #pragma pack(push,1) // cross-platform or #pragma pack 1 as in #include "TD_PackPush.h" /////////////////////////////////////////////////////////////////////////////// // Native EMF constants with native prefixes // Sources: https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-emf/1eec80ba-799b-4784-a9ac-91597d590ae1 // wingdi.h of MSVC enum EMR_TYPES { _EMR_HEADER = 1, // U_EMRHEADER // U_EMR_HEADER _EMR_POLYBEZIER = 2, // U_EMRPOLYBEZIER // U_EMR_POLYBEZIER _EMR_POLYGON = 3, // U_EMRPOLYGON // U_EMR_POLYGON _EMR_POLYLINE = 4, // U_EMRPOLYLINE // U_EMR_POLYLINE _EMR_POLYBEZIERTO = 5, // U_EMRPOLYBEZIERTO // U_EMR_POLYBEZIERTO _EMR_POLYLINETO = 6, // U_EMRPOLYLINETO // U_EMR_POLYLINETO _EMR_POLYPOLYLINE = 7, // U_EMRPOLYPOLYLINE // U_EMR_POLYPOLYLINE _EMR_POLYPOLYGON = 8, // U_EMRPOLYPOLYGON // U_EMR_POLYPOLYGON _EMR_SETWINDOWEXTEX = 9, // U_EMRSETWINDOWEXTEX // U_EMR_SETWINDOWEXTEX _EMR_SETWINDOWORGEX = 10, // U_EMRSETWINDOWORGEX // U_EMR_SETWINDOWORGEX _EMR_SETVIEWPORTEXTEX = 11, // U_EMRSETVIEWPORTEXTEX // U_EMR_SETVIEWPORTEXTEX _EMR_SETVIEWPORTORGEX = 12, // U_EMRSETVIEWPORTORGEX // U_EMR_SETVIEWPORTORGEX _EMR_SETBRUSHORGEX = 13, // U_EMRSETBRUSHORGEX // U_EMR_SETBRUSHORGEX _EMR_EOF = 14, // U_EMREOF // U_EMR_EOF _EMR_SETPIXELV = 15, // U_EMRSETPIXELV // U_EMR_SETPIXELV _EMR_SETMAPPERFLAGS = 16, // U_EMRSETMAPPERFLAGS // U_EMR_SETMAPPERFLAGS _EMR_SETMAPMODE = 17, // U_EMRSETMAPMODE // U_EMR_SETMAPMODE _EMR_SETBKMODE = 18, // U_EMRSETBKMODE // U_EMR_SETBKMODE _EMR_SETPOLYFILLMODE = 19, // U_EMRSETPOLYFILLMODE // U_EMR_SETPOLYFILLMODE _EMR_SETROP2 = 20, // U_EMRSETROP2 // U_EMR_SETROP2 _EMR_SETSTRETCHBLTMODE = 21, // U_EMRSETSTRETCHBLTMODE // U_EMR_SETSTRETCHBLTMODE _EMR_SETTEXTALIGN = 22, // U_EMRSETTEXTALIGN // U_EMR_SETTEXTALIGN _EMR_SETCOLORADJUSTMENT = 23, // U_EMRSETCOLORADJUSTMENT // U_EMR_SETCOLORADJUSTMENT _EMR_SETTEXTCOLOR = 24, // U_EMRSETTEXTCOLOR // U_EMR_SETTEXTCOLOR _EMR_SETBKCOLOR = 25, // U_EMRSETBKCOLOR // U_EMR_SETBKCOLOR _EMR_OFFSETCLIPRGN = 26, // U_EMROFFSETCLIPRGN // U_EMR_OFFSETCLIPRGN _EMR_MOVETOEX = 27, // U_EMRMOVETOEX // U_EMR_MOVETOEX _EMR_SETMETARGN = 28, // U_EMRSETMETARGN // U_EMR_SETMETARGN _EMR_EXCLUDECLIPRECT = 29, // U_EMREXCLUDECLIPRECT // U_EMR_EXCLUDECLIPRECT _EMR_INTERSECTCLIPRECT = 30, // U_EMRINTERSECTCLIPRECT // U_EMR_INTERSECTCLIPRECT _EMR_SCALEVIEWPORTEXTEX = 31, // U_EMRSCALEVIEWPORTEXTEX // U_EMR_SCALEVIEWPORTEXTEX _EMR_SCALEWINDOWEXTEX = 32, // U_EMRSCALEWINDOWEXTEX // U_EMR_SCALEWINDOWEXTEX _EMR_SAVEDC = 33, // U_EMRSAVEDC // U_EMR_SAVEDC _EMR_RESTOREDC = 34, // U_EMRRESTOREDC // U_EMR_RESTOREDC _EMR_SETWORLDTRANSFORM = 35, // U_EMRSETWORLDTRANSFORM // U_EMR_SETWORLDTRANSFORM _EMR_MODIFYWORLDTRANSFORM = 36, // U_EMRMODIFYWORLDTRANSFORM // U_EMR_MODIFYWORLDTRANSFORM _EMR_SELECTOBJECT = 37, // U_EMRSELECTOBJECT // U_EMR_SELECTOBJECT _EMR_CREATEPEN = 38, // U_EMRCREATEPEN // U_EMR_CREATEPEN _EMR_CREATEBRUSHINDIRECT = 39, // U_EMRCREATEBRUSHINDIRECT // U_EMR_CREATEBRUSHINDIRECT _EMR_DELETEOBJECT = 40, // U_EMRDELETEOBJECT // U_EMR_DELETEOBJECT _EMR_ANGLEARC = 41, // U_EMRANGLEARC // U_EMR_ANGLEARC _EMR_ELLIPSE = 42, // U_EMRELLIPSE // U_EMR_ELLIPSE _EMR_RECTANGLE = 43, // U_EMRRECTANGLE // U_EMR_RECTANGLE _EMR_ROUNDRECT = 44, // U_EMRROUNDRECT // U_EMR_ROUNDRECT _EMR_ARC = 45, // U_EMRARC // U_EMR_ARC _EMR_CHORD = 46, // U_EMRCHORD // U_EMR_CHORD _EMR_PIE = 47, // U_EMRPIE // U_EMR_PIE _EMR_SELECTPALETTE = 48, // U_EMRSELECTPALETTE // U_EMR_SELECTPALETTE _EMR_CREATEPALETTE = 49, // U_EMRCREATEPALETTE // U_EMR_CREATEPALETTE _EMR_SETPALETTEENTRIES = 50, // U_EMRSETPALETTEENTRIES // U_EMR_SETPALETTEENTRIES _EMR_RESIZEPALETTE = 51, // U_EMRRESIZEPALETTE // U_EMR_RESIZEPALETTE _EMR_REALIZEPALETTE = 52, // U_EMRREALIZEPALETTE // U_EMR_REALIZEPALETTE _EMR_EXTFLOODFILL = 53, // U_EMREXTFLOODFILL // U_EMR_EXTFLOODFILL _EMR_LINETO = 54, // U_EMRLINETO // U_EMR_LINETO _EMR_ARCTO = 55, // U_EMRARCTO // U_EMR_ARCTO _EMR_POLYDRAW = 56, // U_EMRPOLYDRAW // U_EMR_POLYDRAW _EMR_SETARCDIRECTION = 57, // U_EMRSETARCDIRECTION // U_EMR_SETARCDIRECTION _EMR_SETMITERLIMIT = 58, // U_EMRSETMITERLIMIT // U_EMR_SETMITERLIMIT _EMR_BEGINPATH = 59, // U_EMRBEGINPATH // U_EMR_BEGINPATH _EMR_ENDPATH = 60, // U_EMRENDPATH // U_EMR_ENDPATH _EMR_CLOSEFIGURE = 61, // U_EMRCLOSEFIGURE // U_EMR_CLOSEFIGURE _EMR_FILLPATH = 62, // U_EMRFILLPATH // U_EMR_FILLPATH _EMR_STROKEANDFILLPATH = 63, // U_EMRSTROKEANDFILLPATH // U_EMR_STROKEANDFILLPATH _EMR_STROKEPATH = 64, // U_EMRSTROKEPATH // U_EMR_STROKEPATH _EMR_FLATTENPATH = 65, // U_EMRFLATTENPATH // U_EMR_FLATTENPATH _EMR_WIDENPATH = 66, // U_EMRWIDENPATH // U_EMR_WIDENPATH _EMR_SELECTCLIPPATH = 67, // U_EMRSELECTCLIPPATH // U_EMR_SELECTCLIPPATH _EMR_ABORTPATH = 68, // U_EMRABORTPATH // U_EMR_ABORTPATH _EMR_UNDEF69 = 69, // U_EMRUNDEF69 // U_EMR_UNDEF69 _EMR_COMMENT = 70, // U_EMRCOMMENT // U_EMR_COMMENT _EMR_FILLRGN = 71, // U_EMRFILLRGN // U_EMR_FILLRGN _EMR_FRAMERGN = 72, // U_EMRFRAMERGN // U_EMR_FRAMERGN _EMR_INVERTRGN = 73, // U_EMRINVERTRGN // U_EMR_INVERTRGN _EMR_PAINTRGN = 74, // U_EMRPAINTRGN // U_EMR_PAINTRGN _EMR_EXTSELECTCLIPRGN = 75, // U_EMREXTSELECTCLIPRGN // U_EMR_EXTSELECTCLIPRGN _EMR_BITBLT = 76, // U_EMRBITBLT // U_EMR_BITBLT _EMR_STRETCHBLT = 77, // U_EMRSTRETCHBLT // U_EMR_STRETCHBLT _EMR_MASKBLT = 78, // U_EMRMASKBLT // U_EMR_MASKBLT _EMR_PLGBLT = 79, // U_EMRPLGBLT // U_EMR_PLGBLT _EMR_SETDIBITSTODEVICE = 80, // U_EMRSETDIBITSTODEVICE // U_EMR_SETDIBITSTODEVICE _EMR_STRETCHDIBITS = 81, // U_EMRSTRETCHDIBITS // U_EMR_STRETCHDIBITS _EMR_EXTCREATEFONTINDIRECTW = 82, // U_EMREXTCREATEFONTINDIRECTW // U_EMR_EXTCREATEFONTINDIRECTW _EMR_EXTTEXTOUTA = 83, // U_EMREXTTEXTOUTA // U_EMR_EXTTEXTOUTA _EMR_EXTTEXTOUTW = 84, // U_EMREXTTEXTOUTW // U_EMR_EXTTEXTOUTW _EMR_POLYBEZIER16 = 85, // U_EMRPOLYBEZIER16 // U_EMR_POLYBEZIER16 _EMR_POLYGON16 = 86, // U_EMRPOLYGON16 // U_EMR_POLYGON16 _EMR_POLYLINE16 = 87, // U_EMRPOLYLINE16 // U_EMR_POLYLINE16 _EMR_POLYBEZIERTO16 = 88, // U_EMRPOLYBEZIERTO16 // U_EMR_POLYBEZIERTO16 _EMR_POLYLINETO16 = 89, // U_EMRPOLYLINETO16 // U_EMR_POLYLINETO16 _EMR_POLYPOLYLINE16 = 90, // U_EMRPOLYPOLYLINE16 // U_EMR_POLYPOLYLINE16 _EMR_POLYPOLYGON16 = 91, // U_EMRPOLYPOLYGON16 // U_EMR_POLYPOLYGON16 _EMR_POLYDRAW16 = 92, // U_EMRPOLYDRAW16 // U_EMR_POLYDRAW16 _EMR_CREATEMONOBRUSH = 93, // U_EMRCREATEMONOBRUSH // U_EMR_CREATEMONOBRUSH _EMR_CREATEDIBPATTERNBRUSHPT = 94, // U_EMRCREATEDIBPATTERNBRUSHPT // U_EMR_CREATEDIBPATTERNBRUSHPT _EMR_EXTCREATEPEN = 95, // U_EMREXTCREATEPEN // U_EMR_EXTCREATEPEN _EMR_POLYTEXTOUTA = 96, // U_EMRPOLYTEXTOUTA // U_EMR_POLYTEXTOUTA _EMR_POLYTEXTOUTW = 97, // U_EMRPOLYTEXTOUTW // U_EMR_POLYTEXTOUTW _EMR_SETICMMODE = 98, // U_EMRSETICMMODE // U_EMR_SETICMMODE _EMR_CREATECOLORSPACE = 99, // U_EMRCREATECOLORSPACE // U_EMR_CREATECOLORSPACE _EMR_SETCOLORSPACE = 100, // U_EMRSETCOLORSPACE // U_EMR_SETCOLORSPACE _EMR_DELETECOLORSPACE = 101, // U_EMRDELETECOLORSPACE // U_EMR_DELETECOLORSPACE _EMR_GLSRECORD = 102, // U_EMRGLSRECORD // U_EMR_GLSRECORD _EMR_GLSBOUNDEDRECORD = 103, // U_EMRGLSBOUNDEDRECORD // U_EMR_GLSBOUNDEDRECORD _EMR_PIXELFORMAT = 104, // U_EMRPIXELFORMAT // U_EMR_PIXELFORMAT _EMR_DRAWESCAPE = 105, // U_EMRDRAWESCAPE // U_EMR_DRAWESCAPE _EMR_EXTESCAPE = 106, // U_EMREXTESCAPE // U_EMR_EXTESCAPE _EMR_UNDEF107 = 107, // U_EMRUNDEF107 // U_EMR_UNDEF107 _EMR_SMALLTEXTOUT = 108, // U_EMRSMALLTEXTOUT // U_EMR_SMALLTEXTOUT _EMR_FORCEUFIMAPPING = 109, // U_EMRFORCEUFIMAPPING // U_EMR_FORCEUFIMAPPING _EMR_NAMEDESCAPE = 110, // U_EMRNAMEDESCAPE // U_EMR_NAMEDESCAPE _EMR_COLORCORRECTPALETTE = 111, // U_EMRCOLORCORRECTPALETTE // U_EMR_COLORCORRECTPALETTE _EMR_SETICMPROFILEA = 112, // U_EMRSETICMPROFILEA // U_EMR_SETICMPROFILEA _EMR_SETICMPROFILEW = 113, // U_EMRSETICMPROFILEW // U_EMR_SETICMPROFILEW _EMR_ALPHABLEND = 114, // U_EMRALPHABLEND // U_EMR_ALPHABLEND _EMR_SETLAYOUT = 115, // U_EMRSETLAYOUT // U_EMR_SETLAYOUT _EMR_TRANSPARENTBLT = 116, // U_EMRTRANSPARENTBLT // U_EMR_TRANSPARENTBLT _EMR_UNDEF117 = 117, // U_EMRUNDEF117 // U_EMR_UNDEF117 _EMR_GRADIENTFILL = 118, // U_EMRGRADIENTFILL // U_EMR_GRADIENTFILL _EMR_SETLINKEDUFIS = 119, // U_EMRSETLINKEDUFIS // U_EMR_SETLINKEDUFIS _EMR_SETTEXTJUSTIFICATION = 120, // U_EMRSETTEXTJUSTIFICATION // U_EMR_SETTEXTJUSTIFICATION _EMR_COLORMATCHTOTARGETW = 121, // U_EMRCOLORMATCHTOTARGETW // U_EMR_COLORMATCHTOTARGETW _EMR_CREATECOLORSPACEW = 122, // U_EMRCREATECOLORSPACEW // U_EMR_CREATECOLORSPACEW _EMR_MIN = 1, // Minimum EMR_ value // U_EMR_MIN _EMR_MAX = 122, // Maximum EMR_ value // U_EMR_MAX _EMR_INVALID = 0xFFFFFFFF // Not any valid EMR_ value // U_EMR_INVALID }; // EMF draw properties - bit definitions for getEmfProperties() enum _EMF_DRAW_PROPERTIES { _DRAW_NOTEMPTY = 0x001, // Path has at least a MOVETO in it _DRAW_VISIBLE = 0x002, // Path has at least a LINE in it _DRAW_CLOSED = 0x004, // Path has been closed _DRAW_ONLYTO = 0x008, // Path so far contains only *TO operations _DRAW_FORCE = 0x010, // Path MUST be drawn _DRAW_ALTERS = 0x020, // Alters draw parameters (pen, brush, coordinates...) _DRAW_PATH = 0x040, // An explicit path is being used (with a BEGIN and END) _DRAW_TEXT = 0x080, // Current record forces all pending text to be drawn first _DRAW_OBJECT = 0x100, // Creates an Object (only used in WMF) _DRAW_NOFILL = 0x200 // Object is not fillable (lines and arc, only used in WMF) }; // For EMR_SETBKMODE iMode field // Microsoft name: BackgroundMode enumeration enum _EMF_BACKGROUND_MODE { _TRANSPARENT = 1, // Transparent background mode _OPAQUE = 2 // Opaque background mode }; // For EMR_SETARCDIRECTION iArcDirection field // Microsoft name: ArcDirection Enumeration enum _EMF_ARC_DIRECTION { _AD_COUNTERCLOCKWISE = 1, // Draw arc counterclockwise _AD_CLOCKWISE = 2 // Draw arc clockwise }; // Binary raster operation codes enum _EMF_ROP2_MODES { _R2_BLACK = 1, // BLACK _R2_WHITE = 16, // WHITE _R2_COPYPEN = 13 // COPYPEN - default }; // Map mode enumeration enum _EMF_MAP_MODE { _MM_TEXT = 1, // Text mapping mode _MM_LOMETRIC = 2, // Low metric mapping mode _MM_HIMETRIC = 3, // High metric mapping mode _MM_LOENGLISH = 4, // Low English mapping mode _MM_HIENGLISH = 5, // High English mapping mode _MM_TWIPS = 6, // Twips mapping mode _MM_ISOTROPIC = 7, // Isotropic mapping mode _MM_ANISOTROPIC = 8 // Anisotropic mapping mode }; // Text alignment constants enum _EMF_TEXT_ALIGN { _TA_UPDATECP = 0x01, // Update current position _TA_LEFT = 0x00, // Left align _TA_CENTER = 0x06, // Center align _TA_BOTTOM = 0x08, // Bottom align _TA_BASEBIT = 0x18 // Base line bit }; // DIB color usage enum _EMF_DIB_USAGE { _DIB_RGB_COLORS = 0 // RGB colors }; // Stock object constants enum _EMF_STOCK_OBJECTS { _STOCK_OBJECT = 0x80000000, // Stock object flag _WHITE_BRUSH = 0, // White brush _LTGRAY_BRUSH = 1, // Light gray brush _GRAY_BRUSH = 2, // Gray brush _DKGRAY_BRUSH = 3, // Dark gray brush _BLACK_BRUSH = 4, // Black brush _NULL_BRUSH = 5, // Null brush _WHITE_PEN = 6, // White pen _BLACK_PEN = 7, // Black pen _NULL_PEN = 8 // Null pen }; // World transform modification modes enum _EMF_MODIFY_WORLD_TRANSFORM { _MWT_IDENTITY = 1, // Identity transform _MWT_LEFTMULTIPLY = 2, // Left multiply _MWT_RIGHTMULTIPLY = 3 // Right multiply }; // Region constants enum _EMF_REGION_MODE { _RGN_MIN = 1, // Minimum region value _RGN_COPY = 5, // Copy region _RGN_MAX = 5 // Maximum region value }; // Size and miscellaneous constants enum _EMF_MISC_CONSTANTS { _NOOP = 0x00000042 // No operation }; // Bitmap info constants enum _EMF_BITMAP_INFO { _BI_RGB = 0x00000000, // Uncompressed RGB _BI_UNKNOWN = 0x00000009 // Unknown compression }; // Brush style constants enum _EMF_BRUSH_STYLE { _BS_SOLID = 0x00000000 // Solid brush }; // Font weight constants enum _EMF_FONT_WEIGHT { _FW_SEMIBOLD = 600, // Semi-bold weight _FW_BOLD = 700, // Bold weight _FW_EXTRABOLD = 800, // Extra bold weight _FW_HEAVY = 900 // Heavy weight }; ///////////////////////////////////////////////////////////////////////////// // General form of an EMF record. // Microsoft name: ENHMETARECORD Object // For generic cast of other _EMR_* records typedef struct { OdUInt32 iType; // Type of EMR record OdUInt32 nSize; // Size of entire record in bytes (multiple of 4). OdUInt32 dParm[1]; // Data in record } OdEmfMetaRecord; // U_ENHMETARECORD // First two fields of all EMF records, // First two fields of all EMF+ records (1 or more within an EMF comment) // Microsoft name: EMR Object typedef struct { OdUInt32 iType; // Type of EMR record OdUInt32 nSize; // Size of entire record in bytes (multiple of 4). } OdEmfObject; // U_EMR // Pair of values indicating x and y sizes. typedef struct { int32_t cx; // X size int32_t cy; // Y size } OdEmfSizeXY; // U_SIZE, U_SIZEL // Microsoft name: Xform Object typedef struct { float eM11; // Matrix element M11 float eM12; // Matrix element M12 float eM21; // Matrix element M21 float eM22; // Matrix element M22 float eDx; // X offset in logical units float eDy; // Y offset in logical units } OdEmfXForm; // U_XFORM typedef struct { OdEmfObject emr; // type & size OdWmfRectL rclBounds; // Bounding rectangle in device units OdWmfRectL rclFrame; // Bounding rectangle in 0.01 mm units OdUInt32 dSignature; // FormatSignature Enumeration (must be U_ENHMETA_SIGNATURE) OdUInt32 nVersion; // Must be U_ENHMETA_VERSION (0x00010000) OdUInt32 nBytes; // Length in bytes of the Metafile OdUInt32 nRecords; // Records in the Metafile OdUInt16 nHandles; // Number of graphics objects used in the Metafile OdUInt16 sReserved; // Must be 0 OdUInt32 nDescription; // Characters in the Description field, 0 if no description OdUInt32 offDescription; // Offset in bytes to optional UTF-16BE string Description field OdUInt32 nPalEntries; // Number of Palette entries (in U_EMR_EOF record). OdEmfSizeXY szlDevice; // Reference device size in pixels OdEmfSizeXY szlMillimeters; // Reference device size in 0.01 mm // Fields for winver >= win95 OdUInt32 cbPixelFormat; // Size in bytes of PixelFormatDescriptor, 0 if no PFD OdUInt32 offPixelFormat; // Offset in bytes to optional PixelFormatDescriptor from the start of the RECORD, 0 if no PFD OdUInt32 bOpenGL; // nonZero if OpenGL commands are included // Fields for winver >= win98 OdEmfSizeXY szlMicrometers; // Size of the display device in micrometer } OdEmfHeader; // U_EMRHEADER #define OdEmfHeaderSize sizeof(OdEmfHeader) #define OdEmfHeaderSizeMin (OdEmfHeaderSize - (3 * sizeof(OdUInt32)) - sizeof(OdEmfSizeXY)) typedef struct { OdEmfObject emr; OdEmfSizeXY szlExtent; // H & V extent in logical units } OdEmfSetWindowExt, OdEmfSetViewportExt; // U_EMRSETWINDOWEXTEX, U_EMRSETVIEWPORTEXTEX #define OdEmfSetWindowExtSize sizeof(OdEmfSetWindowExt) #define OdEmfSetViewportExtSize sizeof(OdEmfSetViewportExt) typedef struct { OdEmfObject emr; OdWmfPointL ptlOrigin; // H & V origin in logical units } OdEmfSetWindowOrg, OdEmfSetViewportOrg, OdEmfSetBrushOrg; // U_EMRSETWINDOWORGEX, U_EMRSETVIEWPORTORGEX, U_EMRSETBRUSHORGEX #define OdEmfSetWindowOrgSize sizeof(OdEmfSetWindowOrg) #define OdEmfSetViewportOrgSize sizeof(OdEmfSetViewportOrg) #define OdEmfSetBrushOrgSize sizeof(OdEmfSetBrushOrg) typedef struct { OdEmfObject emr; OdWmfPointL ptl; // Point coordinates } OdEmfMoveTo, OdEmfLineTo;// U_EMRMOVETOEX, U_EMRLINETO; //#define U_SIZE_EMRMOVETOEX (sizeof(U_EMRMOVETOEX)) //#define U_SIZE_EMRLINETO (sizeof(U_EMRLINETO )) typedef struct { OdEmfObject emr; OdEmfXForm xform; // Transform } OdEmfSetWorldTransform; // U_EMRSETWORLDTRANSFORM //#define U_SIZE_EMRSETWORLDTRANSFORM (sizeof(U_EMRSETWORLDTRANSFORM)) typedef struct { OdEmfObject emr; OdEmfXForm xform; //!< Transform OdUInt32 iMode; // ModifyWorldTransformMode Enumeration } OdEmfModifyWorldTransform; // U_EMRMODIFYWORLDTRANSFORM //#define U_SIZE_EMRMODIFYWORLDTRANSFORM (sizeof(U_EMRMODIFYWORLDTRANSFORM)) typedef struct { OdEmfObject emr; // U_EMR OdUInt32 ihObject; // Number of a stock or created object } OdEmfSelectObject, OdEmfDeleteObject; // U_EMRSELECTOBJECT, U_EMRDELETEOBJECT //#define U_SIZE_EMRDELETEOBJECT (sizeof(U_EMRDELETEOBJECT)) //#define U_SIZE_EMRSELECTOBJECT (sizeof(U_EMRSELECTOBJECT)) typedef struct { OdEmfObject emr; // U_EMR OdUInt32 iMode; // enumeration varies with type } OdEmfSetMapMode, OdEmfSetBkMode, OdEmfSetPolyFillMode, OdEmfSetRop2, OdEmfSetStretchBltMode, //U_EMRSETMAPMODE, U_EMRSETBKMODE, U_EMRSETPOLYFILLMODE, U_EMRSETROP2, U_EMRSETSTRETCHBLTMODE, OdEmfSetTextAlign, OdEmfSelectClipPath, OdEmfSetIcmMode, OdEmfSetLayout; //U_EMRSETTEXTALIGN, U_EMRSELECTCLIPPATH, U_EMRSETICMMODE, U_EMRSETLAYOUT #define OdEmfSetMapModeSize sizeof(OdEmfSetMapMode) // U_SIZE_EMRSETBKMODE U_SIZE_EMRSETPOLYFILLMODE U_SIZE_EMRSETROP2 U_SIZE_EMRSETSTRETCHBLTMODE U_SIZE_EMRSETTEXTALIGN U_SIZE_EMRSELECTCLIPPATH U_SIZE_EMRSETICMMODE U_SIZE_EMRSETLAYOUT typedef struct { OdEmfObject emr; OdWmfRectL rclBounds; //!< bounding rectangle in device units OdUInt32 cptl; //!< Number of points to draw OdWmfPointL aptl[1]; //!< array of points } OdEmfPolyBezier, OdEmfPolygon, OdEmfPolyline, // U_EMRPOLYBEZIER, U_EMRPOLYGON, U_EMRPOLYLINE OdEmfPolyBezierTo, OdEmfPolylineTo; // U_EMRPOLYBEZIERTO, U_EMRPOLYLINETO #define OdEmfPolybezierSize (sizeof(OdEmfObject) + sizeof(OdWmfRectL) + sizeof(OdUInt32)) #define OdEmfPolygonSize (sizeof(OdEmfObject) + sizeof(OdWmfRectL) + sizeof(OdUInt32)) #define OdEmfPolylineSize (sizeof(OdEmfObject) + sizeof(OdWmfRectL) + sizeof(OdUInt32)) #define OdEmfPolyBezierToSize (sizeof(OdEmfObject) + sizeof(OdWmfRectL) + sizeof(OdUInt32)) #define OdEmfPolyLineToSize (sizeof(OdEmfObject) + sizeof(OdWmfRectL) + sizeof(OdUInt32)) // After this struct the record also contains an array of points: // OdWmfPointL aptl[1]; typedef struct { OdEmfObject emr; OdWmfRectL rclBounds; // bounding rectangle in device units OdUInt32 nPolys; // Number of elements in aPolyCounts OdUInt32 cptl; // Total number of points (over all poly) OdUInt32 aPolyCounts[1]; // Number of points in each poly (sequential) } OdEmfPolyPolyline, OdEmfPolyPolygon; // U_EMRPOLYPOLYLINE, U_EMRPOLYPOLYGON #define OdEmfPolyPolylineSize (sizeof(OdEmfObject) + sizeof(OdWmfRectL) + 2 * sizeof(OdUInt32)) #define OdEmfPolyPolygonSize (sizeof(OdEmfObject) + sizeof(OdWmfRectL) + 2 * sizeof(OdUInt32)) typedef struct { OdEmfObject emr; OdUInt32 cbData; // Number of bytes in comment OdUInt8 Data[1]; // Comment } OdEmfComment; // U_EMRCOMMENT #define OdEmfCommentSize (sizeof(OdEmfObject) + sizeof(OdUInt32)) // EMF color-setting record structures typedef struct { OdEmfObject emr; // U_EMR OdUInt32 crColor; // Color value (COLORREF) } OdEmfSetBkColor, OdEmfSetTextColor; // U_EMRSETBKCOLOR, U_EMRSETTEXTCOLOR typedef struct { OdEmfObject emr; OdInt32 iRelative; } OdEmfRestoreDc; // U_EMRRESTOREDC typedef struct { OdEmfObject emr; OdUInt32 iArcDirection; } OdEmfSetArcDirection; typedef struct { OdEmfObject emr; OdWmfPointL ptl; } OdEmfOffsetClipRgn; typedef struct { OdEmfObject emr; OdWmfRectL rclClip; } OdEmfExcludeClipRect, OdEmfIntersectClipRect; typedef struct { OdEmfObject emr; OdUInt32 iMode; OdUInt32 cbRgnData; OdUInt8 RgnData[1]; } OdEmfExtSelectClipRgn; typedef struct { OdEmfObject emr; OdWmfRectL rclBounds; OdWmfPointL Dest; // Destination x, y coordinates OdWmfPointL cDest; // Destination width, height OdUInt32 dwRop; OdWmfPointL Src; // Source x, y coordinates OdUInt32 cbBmiSrc; OdUInt32 cbBitsSrc; } OdEmfBitBlt; typedef struct { OdEmfObject emr; OdWmfRectL rclBounds; OdWmfPointL Dest; // Destination x, y coordinates OdWmfPointL cDest; // Destination width, height OdUInt32 dwRop; OdWmfPointL Src; // Source x, y coordinates OdUInt32 cbBmiSrc; OdUInt32 cbBitsSrc; } OdEmfStretchBlt; typedef struct { OdEmfObject emr; OdWmfRectL rclBounds; OdWmfPointL Dest; // Destination x, y coordinates OdWmfPointL cDest; // Destination width, height OdUInt32 dwRop; OdWmfPointL Src; // Source x, y coordinates OdUInt32 cbBmiSrc; OdUInt32 cbBitsSrc; } OdEmfMaskBlt; typedef struct { OdEmfObject emr; OdWmfRectL rclBounds; OdWmfPointL Dest; // Destination x, y coordinates OdWmfPointL Src; // Source x, y coordinates OdWmfPointL cSrc; // Source width, height OdUInt32 offBmiSrc; // Offset to source bitmap info OdUInt32 cbBmiSrc; // Size of source bitmap info OdUInt32 offBitsSrc; // Offset to source bitmap bits OdUInt32 cbBitsSrc; // Size of source bitmap bits OdUInt32 iUsageSrc; // Usage for source bitmap OdUInt32 dwRop; // Raster Operation enumeration OdWmfPointL cDest; // Destination width, height } OdEmfStretchDibits; // U_EMRSTRETCHDIBITS #define OdEmfStretchDibitsSize sizeof(OdEmfStretchDibits) // (sizeof(OdEmfObject) + sizeof(OdWmfRectL) + sizeof(OdInt32) + sizeof(OdInt32) + sizeof(OdInt32) + sizeof(OdInt32) + sizeof(OdInt32) + sizeof(OdInt32) + sizeof(OdInt32) + sizeof(OdInt32) + sizeof(OdUInt32) + sizeof(OdUInt32) + sizeof(OdUInt32) + sizeof(OdUInt32) + sizeof(OdUInt32)) #define OdEmfEofSize (sizeof(OdEmfObject) + sizeof(OdUInt32)) #define OdEmfSetPixelVSize (sizeof(OdEmfObject) + sizeof(OdWmfPointL) + sizeof(OdUInt32)) #define OdEmfSetMapperFlagsSize (sizeof(OdEmfObject) + sizeof(OdUInt32)) #define OdEmfSetBkModeSize (sizeof(OdEmfObject) + sizeof(OdUInt32)) #define OdEmfSetPolyFillModeSize (sizeof(OdEmfObject) + sizeof(OdUInt32)) #define OdEmfSetRop2Size (sizeof(OdEmfObject) + sizeof(OdUInt32)) #define OdEmfSetStretchBltModeSize (sizeof(OdEmfObject) + sizeof(OdUInt32)) #define OdEmfSetTextAlignSize (sizeof(OdEmfObject) + sizeof(OdUInt32)) #define OdEmfSetColorAdjustmentSize (sizeof(OdEmfObject) + sizeof(OdUInt32) + 5 * sizeof(OdInt16) + 6 * sizeof(OdUInt16)) #define OdEmfSetTextColorSize (sizeof(OdEmfObject) + sizeof(OdUInt32)) #define OdEmfSetBkColorSize (sizeof(OdEmfObject) + sizeof(OdUInt32)) #define OdEmfOffsetClipRgnSize (sizeof(OdEmfObject) + sizeof(OdWmfPointL)) #define OdEmfMoveToExSize (sizeof(OdEmfObject) + sizeof(OdWmfPointL)) #define OdEmfSetMetaRgnSize (sizeof(OdEmfObject)) #define OdEmfExcludeClipRectSize (sizeof(OdEmfObject) + sizeof(OdWmfRectL)) #define OdEmfIntersectClipRectSize (sizeof(OdEmfObject) + sizeof(OdWmfRectL)) #define OdEmfScaleViewportExtExSize (sizeof(OdEmfObject) + 4 * sizeof(OdInt32)) #define OdEmfScaleWindowExtExSize (sizeof(OdEmfObject) + 4 * sizeof(OdInt32)) #define OdEmfSaveDcSize (sizeof(OdEmfObject)) #define OdEmfRestoreDcSize (sizeof(OdEmfObject) + sizeof(OdInt32)) #define OdEmfSetWorldTransformSize (sizeof(OdEmfObject) + sizeof(OdEmfXForm)) #define OdEmfModifyWorldTransformSize (sizeof(OdEmfObject) + sizeof(OdEmfXForm) + sizeof(OdUInt32)) #define OdEmfSelectObjectSize (sizeof(OdEmfObject) + sizeof(OdUInt32)) #define OdEmfCreatePenSize (sizeof(OdEmfObject) + sizeof(OdUInt32) + sizeof(OdUInt32) + sizeof(OdUInt32) + sizeof(OdUInt32)) #define OdEmfCreateBrushIndirectSize (sizeof(OdEmfObject) + sizeof(OdUInt32) + sizeof(OdUInt32) + sizeof(OdUInt32) + sizeof(OdUInt32)) #define OdEmfDeleteObjectSize (sizeof(OdEmfObject) + sizeof(OdUInt32)) #define OdEmfAngleArcSize (sizeof(OdEmfObject) + sizeof(OdWmfPointL) + sizeof(OdUInt32) + 2 * sizeof(float)) #define OdEmfEllipseSize (sizeof(OdEmfObject) + sizeof(OdWmfRectL)) #define OdEmfRectangleSize (sizeof(OdEmfObject) + sizeof(OdWmfRectL)) #define OdEmfRoundRectSize (sizeof(OdEmfObject) + sizeof(OdWmfRectL) + sizeof(OdEmfSizeXY)) #define OdEmfArcSize (sizeof(OdEmfObject) + sizeof(OdWmfRectL) + 2 * sizeof(OdWmfPointL)) #define OdEmfChordSize (sizeof(OdEmfObject) + sizeof(OdWmfRectL) + 2 * sizeof(OdWmfPointL)) #define OdEmfPieSize (sizeof(OdEmfObject) + sizeof(OdWmfRectL) + 2 * sizeof(OdWmfPointL)) #define OdEmfSelectPaletteSize (sizeof(OdEmfObject) + sizeof(OdUInt32)) #define OdEmfCreatePaletteSize (sizeof(OdEmfObject) + sizeof(OdUInt32) + sizeof(OdUInt16) + sizeof(OdUInt16)) #define OdEmfSetPaletteEntriesSize (sizeof(OdEmfObject) + sizeof(OdUInt32) + sizeof(OdUInt32) + sizeof(OdUInt32)) #define OdEmfResizePaletteSize (sizeof(OdEmfObject) + sizeof(OdUInt32) + sizeof(OdUInt32)) #define OdEmfRealizePaletteSize (sizeof(OdEmfObject)) #define OdEmfExtFloodFillSize (sizeof(OdEmfObject) + sizeof(OdWmfPointL) + sizeof(OdUInt32) + sizeof(OdUInt32)) #define OdEmfLineToSize (sizeof(OdEmfObject) + sizeof(OdWmfPointL)) #define OdEmfArcToSize (sizeof(OdEmfObject) + sizeof(OdWmfRectL) + 2 * sizeof(OdWmfPointL)) #define OdEmfPolyDrawSize (sizeof(OdEmfObject) + sizeof(OdWmfRectL) + sizeof(OdUInt32)) #define OdEmfSetArcDirectionSize (sizeof(OdEmfObject) + sizeof(OdUInt32)) #define OdEmfSetMiterLimitSize (sizeof(OdEmfObject) + sizeof(float)) #define OdEmfBeginPathSize (sizeof(OdEmfObject)) #define OdEmfEndPathSize (sizeof(OdEmfObject)) #define OdEmfCloseFigureSize (sizeof(OdEmfObject)) #define OdEmfFillPathSize (sizeof(OdEmfObject) + sizeof(OdWmfRectL)) #define OdEmfStrokeAndFillPathSize (sizeof(OdEmfObject) + sizeof(OdWmfRectL)) #define OdEmfStrokePathSize (sizeof(OdEmfObject) + sizeof(OdWmfRectL)) #define OdEmfFlattenPathSize (sizeof(OdEmfObject)) #define OdEmfWidenPathSize (sizeof(OdEmfObject)) #define OdEmfSelectClipPathSize (sizeof(OdEmfObject) + sizeof(OdUInt32)) #define OdEmfAbortPathSize (sizeof(OdEmfObject)) #define OdEmfUndef69Size (sizeof(OdEmfObject)) #define OdEmfFillRgnSize (sizeof(OdEmfObject) + sizeof(OdWmfRectL) + sizeof(OdUInt32) + sizeof(OdUInt32)) #define OdEmfFrameRgnSize (sizeof(OdEmfObject) + sizeof(OdWmfRectL) + sizeof(OdUInt32) + sizeof(OdUInt32) + sizeof(OdInt32) + sizeof(OdInt32)) #define OdEmfInvertRgnSize (sizeof(OdEmfObject) + sizeof(OdWmfRectL) + sizeof(OdUInt32)) #define OdEmfPaintRgnSize (sizeof(OdEmfObject) + sizeof(OdWmfRectL) + sizeof(OdUInt32)) #define OdEmfExtSelectClipRgnSize (sizeof(OdEmfObject) + sizeof(OdUInt32) + sizeof(OdUInt32)) #define OdEmfBitBltSize (sizeof(OdEmfObject) + sizeof(OdWmfRectL) + sizeof(OdWmfPointL) + sizeof(OdWmfPointL) + sizeof(OdUInt32) + sizeof(OdWmfPointL) + 4 * sizeof(OdUInt32)) #define OdEmfStretchBltSize (sizeof(OdEmfObject) + sizeof(OdWmfRectL) + sizeof(OdWmfPointL) + sizeof(OdWmfPointL) + sizeof(OdUInt32) + sizeof(OdWmfPointL) + 4 * sizeof(OdUInt32)) #define OdEmfMaskBltSize (sizeof(OdEmfObject) + sizeof(OdWmfRectL) + sizeof(OdWmfPointL) + sizeof(OdWmfPointL) + sizeof(OdUInt32) + sizeof(OdWmfPointL) + sizeof(OdUInt32) + sizeof(OdWmfPointL) + 6 * sizeof(OdUInt32)) #define OdEmfPlgBltSize (sizeof(OdEmfObject) + sizeof(OdWmfRectL) + 3 * sizeof(OdWmfPointL) + sizeof(OdWmfPointL) + sizeof(OdWmfPointL) + sizeof(OdUInt32) + sizeof(OdWmfPointL) + sizeof(OdUInt32) + 6 * sizeof(OdUInt32)) #define OdEmfSetDibitsToDeviceSize (sizeof(OdEmfObject) + sizeof(OdWmfRectL) + sizeof(OdInt32) + sizeof(OdInt32) + sizeof(OdInt32) + sizeof(OdInt32) + sizeof(OdUInt32) + sizeof(OdUInt32) + sizeof(OdUInt32) + sizeof(OdUInt32) + sizeof(OdUInt32)) #define OdEmfExtCreateFontIndirectWSize (sizeof(OdEmfObject) + sizeof(OdUInt32) + 60) #define OdEmfExtTextOutASize (sizeof(OdEmfObject) + sizeof(OdWmfRectL) + sizeof(OdUInt32) + sizeof(OdInt32) + sizeof(OdInt32) + sizeof(OdUInt32) + sizeof(OdUInt32) + sizeof(OdUInt32) + sizeof(OdUInt32)) #define OdEmfExtTextOutWSize (sizeof(OdEmfObject) + sizeof(OdWmfRectL) + sizeof(OdUInt32) + sizeof(OdInt32) + sizeof(OdInt32) + sizeof(OdUInt32) + sizeof(OdUInt32) + sizeof(OdUInt32) + sizeof(OdUInt32)) #define OdEmfPolyBezier16Size (sizeof(OdEmfObject) + sizeof(OdWmfRectL) + sizeof(OdUInt32)) #define OdEmfPolygon16Size (sizeof(OdEmfObject) + sizeof(OdWmfRectL) + sizeof(OdUInt32)) #define OdEmfPolyline16Size (sizeof(OdEmfObject) + sizeof(OdWmfRectL) + sizeof(OdUInt32)) #define OdEmfPolyBezierTo16Size (sizeof(OdEmfObject) + sizeof(OdWmfRectL) + sizeof(OdUInt32)) #define OdEmfPolylineTo16Size (sizeof(OdEmfObject) + sizeof(OdWmfRectL) + sizeof(OdUInt32)) #define OdEmfPolyPolyline16Size (sizeof(OdEmfObject) + sizeof(OdWmfRectL) + 2 * sizeof(OdUInt32)) #define OdEmfPolyPolygon16Size (sizeof(OdEmfObject) + sizeof(OdWmfRectL) + 2 * sizeof(OdUInt32)) #define OdEmfPolyDraw16Size (sizeof(OdEmfObject) + sizeof(OdWmfRectL) + sizeof(OdUInt32)) #define OdEmfCreateMonoBrushSize (sizeof(OdEmfObject) + sizeof(OdUInt32) + sizeof(OdUInt32) + sizeof(OdUInt32) + sizeof(OdUInt32) + sizeof(OdUInt32)) #define OdEmfCreateDibPatternBrushPtSize (sizeof(OdEmfObject) + sizeof(OdUInt32) + sizeof(OdUInt32) + sizeof(OdUInt32) + sizeof(OdUInt32) + sizeof(OdUInt32) + sizeof(OdUInt32)) #define OdEmfExtCreatePenSize (sizeof(OdEmfObject) + sizeof(OdUInt32) + sizeof(OdUInt32) + sizeof(OdUInt32) + sizeof(OdUInt32) + sizeof(OdUInt32) + sizeof(OdUInt32)) #define OdEmfPolyTextOutASize (sizeof(OdEmfObject) + sizeof(OdWmfRectL) + sizeof(OdUInt32) + sizeof(OdUInt32) + sizeof(OdInt32) + sizeof(OdUInt32)) #define OdEmfPolyTextOutWSize (sizeof(OdEmfObject) + sizeof(OdWmfRectL) + sizeof(OdUInt32) + sizeof(OdUInt32) + sizeof(OdInt32) + sizeof(OdUInt32)) #define OdEmfSetIcmModeSize (sizeof(OdEmfObject) + sizeof(OdUInt32)) #define OdEmfCreateColorSpaceSize (sizeof(OdEmfObject) + sizeof(OdUInt32)) #define OdEmfSetColorSpaceSize (sizeof(OdEmfObject) + sizeof(OdUInt32)) #define OdEmfDeleteColorSpaceSize (sizeof(OdEmfObject) + sizeof(OdUInt32)) #define OdEmfGlsRecordSize (sizeof(OdEmfObject) + sizeof(OdUInt32)) #define OdEmfGlsBoundedRecordSize (sizeof(OdEmfObject) + sizeof(OdWmfRectL) + sizeof(OdUInt32)) #define OdEmfPixelFormatSize (sizeof(OdEmfObject) + 40) #define OdEmfDrawEscapeSize (sizeof(OdEmfObject) + sizeof(OdInt32) + sizeof(OdInt32) + sizeof(OdInt32)) #define OdEmfExtEscapeSize (sizeof(OdEmfObject) + sizeof(OdInt32) + sizeof(OdInt32) + sizeof(OdInt32)) #define OdEmfUndef107Size (sizeof(OdEmfObject)) #define OdEmfSmallTextOutSize (sizeof(OdEmfObject) + sizeof(OdInt32) + sizeof(OdInt32) + sizeof(OdUInt32) + sizeof(OdUInt32) + sizeof(OdInt32) + sizeof(OdInt32)) #define OdEmfNamedEscapeSize (sizeof(OdEmfObject) + sizeof(OdInt32) + sizeof(OdInt32) + sizeof(OdInt32) + sizeof(OdInt32)) #define OdEmfAlphaBlendSize (sizeof(OdEmfObject) + sizeof(OdWmfRectL) + sizeof(OdInt32) + sizeof(OdInt32) + sizeof(OdInt32) + sizeof(OdInt32) + sizeof(OdUInt32) + sizeof(OdInt32) + sizeof(OdInt32) + sizeof(OdInt32) + sizeof(OdInt32) + sizeof(OdUInt32) + sizeof(OdUInt32) + sizeof(OdUInt32) + sizeof(OdUInt32) + sizeof(OdUInt32)) #define OdEmfSetLayoutSize (sizeof(OdEmfObject) + sizeof(OdUInt32)) #define OdEmfTransparentBltSize (sizeof(OdEmfObject) + sizeof(OdWmfRectL) + sizeof(OdInt32) + sizeof(OdInt32) + sizeof(OdInt32) + sizeof(OdInt32) + sizeof(OdUInt32) + sizeof(OdInt32) + sizeof(OdInt32) + sizeof(OdInt32) + sizeof(OdInt32) + sizeof(OdUInt32) + sizeof(OdUInt32) + sizeof(OdUInt32) + sizeof(OdUInt32)) #define OdEmfUndef117Size (sizeof(OdEmfObject)) #define OdEmfGradientFillSize (sizeof(OdEmfObject) + sizeof(OdWmfRectL) + sizeof(OdUInt32) + sizeof(OdUInt32) + sizeof(OdUInt32)) #define OdEmfColorMatchToTargetWSize (sizeof(OdEmfObject) + sizeof(OdUInt32) + sizeof(OdUInt32) + sizeof(OdUInt32) + sizeof(OdUInt32)) #define OdEmfCreateColorSpaceWSize (sizeof(OdEmfObject) + sizeof(OdUInt32)) /////////////////////////////////////////////////////////////////////////////// #ifndef USE_UEMF int getEmfRecordSize(const char* record, const char* blimit, OdUInt32* nSize, OdUInt32* iType, int torev); int checkEmfRecord(const char *record); int getEmfProperties(OdUInt32 type); int getEmfDibParams(const char* record, OdUInt32 offBitsSrc, OdUInt32 offBmiSrc, const char** px, const OdWmfQuad** ct, OdUInt32 *numCt, OdUInt32* width, OdUInt32* height, OdUInt32* colortype, OdUInt32* invert); int getEmfOneRecPrint(const char* contents, const char* blimit, int recnum, OdUInt32 off); /////////////////////////////////////////////////////////////////////////////// #else // USE_UEMF // redirect to use UEMF library #define getEmfRecordSize(record, blimit, nSize, iType, torev) \ U_emf_record_sizeok(record, blimit, (uint32_t*) nSize, (uint32_t*) iType, torev) #define checkEmfRecord(record) \ U_emf_record_safe(record) #define getEmfProperties(type) \ emr_properties((uint32_t) type) #define getEmfDibParams(record, offBitsSrc, offBmiSrc, px, ct, numCt, \ width, height, colortype, invert) \ get_DIB_params(record, (uint32_t) offBitsSrc, (uint32_t) offBmiSrc, \ px, (const U_RGBQUAD**) ct, (uint32_t*) numCt, \ (uint32_t*) width, (uint32_t*) height, (uint32_t*) colortype, (uint32_t*) invert) #define getEmfOneRecPrint(contents, blimit, recnum, off) \ U_emf_onerec_print(contents, blimit, recnum, (size_t) off) #endif // USE_UEMF /////////////////////////////////////////////////////////////////////////////// #ifdef _MSC_VER #pragma warning (pop) #endif #pragma pack(pop) // cross-platform or #ifdef TD_CLIENT_PACKING_VALUE #pragma pack TD_CLIENT_PACKING_VALUE #endif as in #include "TD_PackPop.h" #endif // OD_EMF_H