Commit | Line | Data |
---|---|---|
7edf74fd A |
1 | // File: OpenGl_PrinterContext.cxx |
2 | // Created: 20.05.11 10:00:00 | |
3 | // Author: Anton POLETAEV | |
4 | ||
5 | #include <OpenGl_PrinterContext.hxx> | |
6 | ||
7 | OpenGl_PrinterContext* OpenGl_PrinterContext::g_PrinterContext = NULL; | |
2166f0fa | 8 | GLCONTEXT OpenGl_PrinterContext::g_ContextId = NULL; |
7edf74fd A |
9 | |
10 | //======================================================================= | |
11 | //function : OpenGl_PrinterContext | |
12 | //purpose : Constructor | |
13 | //======================================================================= | |
14 | ||
15 | OpenGl_PrinterContext::OpenGl_PrinterContext (GLCONTEXT theCtx) : | |
16 | myCtx (theCtx), myProjTransform (0, 3, 0, 3), myLayerViewportX (0), | |
17 | myLayerViewportY (0), myScaleX (1.0f), myScaleY (1.0f) | |
18 | { | |
19 | // assign global instance to the current object | |
20 | if (myCtx != NULL) | |
21 | { | |
22 | g_PrinterContext = this; | |
23 | g_ContextId = myCtx; | |
24 | } | |
25 | ||
26 | // init projection matrix | |
27 | Standard_Real anInitValue = 0.0; | |
28 | myProjTransform.Init (anInitValue); | |
29 | myProjTransform (0,0) = 1.0f; | |
30 | myProjTransform (1,1) = 1.0f; | |
31 | myProjTransform (2,2) = 1.0f; | |
32 | myProjTransform (3,3) = 1.0f; | |
33 | } | |
34 | ||
35 | //======================================================================= | |
36 | //function : ~OpenGl_PrinterContext | |
37 | //purpose : Destructor | |
38 | //======================================================================= | |
39 | ||
40 | OpenGl_PrinterContext::~OpenGl_PrinterContext () | |
41 | { | |
42 | // unassign global instance | |
43 | if (g_PrinterContext == this) | |
44 | { | |
45 | g_ContextId = NULL; | |
46 | g_PrinterContext = NULL; | |
47 | } | |
48 | } | |
49 | ||
50 | //======================================================================= | |
51 | //function : GetProjTransformation | |
52 | //purpose : Get view projection transformation matrix. | |
53 | //======================================================================= | |
54 | ||
55 | void OpenGl_PrinterContext::GetProjTransformation (GLfloat theMatrix[16]) | |
56 | { | |
57 | for (int i = 0, k = 0; i < 4; i++) | |
58 | for (int j = 0; j < 4; j++, k++) | |
59 | theMatrix[k] = (GLfloat)myProjTransform (i,j); | |
60 | } | |
61 | ||
62 | //======================================================================= | |
63 | //function : SetProjTransformation | |
64 | //purpose : Set view projection transformation matrix for printing purposes. | |
65 | // theProjTransform parameter should be an 4x4 array. | |
66 | //======================================================================= | |
67 | ||
68 | bool OpenGl_PrinterContext::SetProjTransformation (TColStd_Array2OfReal& thePrj) | |
69 | { | |
70 | if (thePrj.RowLength () != 4 || thePrj.ColLength () != 4) | |
71 | return false; | |
72 | ||
73 | myProjTransform = thePrj; | |
74 | ||
75 | return true; | |
76 | } | |
77 | ||
78 | //======================================================================= | |
79 | //function : Deactivate | |
80 | //purpose : Deactivate PrinterContext object. | |
81 | // Useful when you need to redraw in usual mode the same | |
82 | // OpenGl context that you used for printing right after printing, | |
83 | // before the OpenGl_PrinterContext instance destroyed | |
84 | //======================================================================= | |
85 | ||
86 | void OpenGl_PrinterContext::Deactivate () | |
87 | { | |
88 | // unassign global instance | |
89 | if (g_PrinterContext == this) | |
90 | { | |
91 | g_ContextId = NULL; | |
92 | g_PrinterContext = NULL; | |
93 | } | |
94 | } | |
95 | ||
96 | ||
97 | //======================================================================= | |
98 | //function : GetInstance | |
99 | //purpose : Get the PrinterContext instance assigned for OpenGl context. | |
100 | // Return NULL, if there is no current printing operation and | |
101 | // there is no assigned instance for "theCtx" OpenGl context. | |
102 | //======================================================================= | |
103 | ||
104 | OpenGl_PrinterContext* OpenGl_PrinterContext::GetPrinterContext (GLCONTEXT theCtx) | |
105 | { | |
106 | if (g_ContextId == theCtx) | |
107 | return g_PrinterContext; | |
108 | else | |
109 | return NULL; | |
110 | } |