wxArt2D
canglob.cpp
Go to the documentation of this file.
1 /*! \file canvas/src/canglob.cpp
2  \author Klaas Holwerda
3 
4  Copyright: 2001-2004 (c) Klaas Holwerda
5 
6  Licence: wxWidgets Licence
7 
8  RCS-ID: $Id: canglob.cpp,v 1.205 2009/09/03 20:09:53 titato Exp $
9 */
10 
11 #include "a2dprec.h"
12 
13 #ifdef __BORLANDC__
14 #pragma hdrstop
15 #endif
16 
17 #ifndef WX_PRECOMP
18 #include "wx/wx.h"
19 #endif
20 
21 #include <math.h>
22 #include <limits.h>
23 #include <float.h>
24 #include "wx/canvas/canglob.h"
25 #include "wx/canvas/layerinf.h"
26 #include "wx/canvas/canobj.h"
27 #include "wx/canvas/canprim.h"
28 #include "wx/canvas/drawer.h"
29 #include "wx/canvas/drawing.h"
30 #include "wx/artbase/afmatrix.h"
31 #include "wx/artbase/drawer2d.h"
32 
33 #include <wx/wfstream.h>
34 
35 #include "wx/canvas/canprop.h"
36 #include "wx/canvas/wire.h"
37 
38 //----------------------------------------------------------------------------
39 // globals
40 //----------------------------------------------------------------------------
41 
42 //! default a2dPin width in pixels
43 #define PINWIDTH 9
44 //! default a2dHandle width in pixels
45 #define HANDLEWIDTH 7
46 
47 IMPLEMENT_CLASS( a2dCanvasGlobal, a2dGlobal )
48 IMPLEMENT_CLASS( a2dCanvasObjectEvent, wxEvent )
49 IMPLEMENT_CLASS( a2dHandleMouseEvent, wxEvent )
50 IMPLEMENT_CLASS( a2dCanvasObjectMouseEvent, wxEvent )
51 
52 DEFINE_EVENT_TYPE( wxEVT_CANVASOBJECT_MOUSE_EVENT )
53 DEFINE_EVENT_TYPE( wxEVT_CANVASOBJECT_ENTER_EVENT )
54 DEFINE_EVENT_TYPE( wxEVT_CANVASOBJECT_LEAVE_EVENT )
55 DEFINE_EVENT_TYPE( wxEVT_CANVASHANDLE_MOUSE_EVENT )
56 DEFINE_EVENT_TYPE( wxEVT_CANVASHANDLE_MOUSE_EVENT_ENTER )
57 DEFINE_EVENT_TYPE( wxEVT_CANVASHANDLE_MOUSE_EVENT_LEAVE )
58 DEFINE_EVENT_TYPE( wxEVT_CANVASOBJECT_RESIZE_EVENT )
59 DEFINE_EVENT_TYPE( wxEVT_CANVASOBJECT_POPUPMENU_EVENT )
60 
61 //--------------------------------------------------------------------
62 // a2dLayerGroup
63 //--------------------------------------------------------------------
64 
65 bool a2dLayerGroup::InGroup( wxUint16 layer )
66 {
67  bool hasLayer = false;
68  forEachIn( a2dLayerGroup, this )
69  {
70  wxUint16 layerOfGroup = *iter;
71  // if one of the layers in the group is wxLAYER_ALL, that means all available layers in document
72  if ( wxLAYER_ALL == layerOfGroup )
73  {
74  hasLayer = true;
75  break;
76  }
77  if ( layer == layerOfGroup )
78  hasLayer = true;
79  }
80  return hasLayer;
81 }
82 
83 //----------------------------------------------------------------------------
84 // a2dCanvasObjectEvent
85 //----------------------------------------------------------------------------
86 
87 a2dCanvasObjectEvent::a2dCanvasObjectEvent( a2dIterC* ic, wxEventType type, a2dCanvasObject* object, double x, double y, int id )
88  : wxEvent( id, type )
89 {
90  SetEventObject( ( wxObject* ) object );
91  m_x = x;
92  m_y = y;
93  m_ic = ic;
94 }
95 
97  : wxEvent( id, wxEVT_CANVASOBJECT_RESIZE_EVENT )
98 {
99  SetEventObject( ( wxObject* ) object );
100  m_box = box;
101  m_ic = NULL;
102 }
103 
105  : wxEvent( other )
106 {
107  m_x = other.m_x;
108  m_y = other.m_y;
109  m_ic = other.m_ic;
110  m_box = other.m_box;
111 }
112 
113 //----------------------------------------------------------------------------
114 // a2dCanvasObjectMouseEvent
115 //----------------------------------------------------------------------------
116 
117 a2dCanvasObjectMouseEvent::a2dCanvasObjectMouseEvent( a2dIterC* ic, a2dCanvasObject* object, a2dHit& how, double x, double y, const wxMouseEvent& event )
118  : a2dCanvasObjectEvent( ic, wxEVT_CANVASOBJECT_MOUSE_EVENT, object, x, y )
119 {
120  m_mouseevent = event;
121  m_how = how;
122 }
123 
124 a2dCanvasObjectMouseEvent::a2dCanvasObjectMouseEvent( a2dIterC* ic, a2dCanvasObject* object, wxEventType type, double x, double y, const wxMouseEvent& event )
125  : a2dCanvasObjectEvent( ic, type, object, x, y )
126 {
127  m_mouseevent = event;
128 }
129 
130 
132  : a2dCanvasObjectEvent( other )
133 {
134  m_mouseevent = other.m_mouseevent;
135  m_how = other.m_how;
136 }
137 
138 //----------------------------------------------------------------------------
139 // a2dHandleMouseEvent
140 //----------------------------------------------------------------------------
141 
142 a2dHandleMouseEvent::a2dHandleMouseEvent( a2dIterC* ic, a2dHandle* handle, double x, double y, const wxMouseEvent& event, wxEventType type )
143  : a2dCanvasObjectEvent( ic, type, ( a2dCanvasObject* ) handle, x, y )
144 {
145  m_mouseevent = event;
146 }
147 
149  : a2dCanvasObjectEvent( other )
150 {
151  m_mouseevent = other.m_mouseevent;
152 }
153 
154 //----------------------------------------------------------------------------
155 // a2dCanvasGlobal
156 //----------------------------------------------------------------------------
157 
158 A2DCANVASDLLEXP extern const a2dCursorId a2dCURSOR_NONE = wxGenNewId();
159 A2DCANVASDLLEXP extern const a2dCursorId a2dCURSOR_ARROW = wxGenNewId();
160 A2DCANVASDLLEXP extern const a2dCursorId a2dCURSOR_RIGHT_ARROW = wxGenNewId();
161 A2DCANVASDLLEXP extern const a2dCursorId a2dCURSOR_BULLSEYE = wxGenNewId();
162 A2DCANVASDLLEXP extern const a2dCursorId a2dCURSOR_CHAR = wxGenNewId();
163 A2DCANVASDLLEXP extern const a2dCursorId a2dCURSOR_CROSS = wxGenNewId();
164 A2DCANVASDLLEXP extern const a2dCursorId a2dCURSOR_HAND = wxGenNewId();
165 A2DCANVASDLLEXP extern const a2dCursorId a2dCURSOR_IBEAM = wxGenNewId();
166 A2DCANVASDLLEXP extern const a2dCursorId a2dCURSOR_LEFT_BUTTON = wxGenNewId();
167 A2DCANVASDLLEXP extern const a2dCursorId a2dCURSOR_MAGNIFIER = wxGenNewId();
168 A2DCANVASDLLEXP extern const a2dCursorId a2dCURSOR_MIDDLE_BUTTON = wxGenNewId();
169 A2DCANVASDLLEXP extern const a2dCursorId a2dCURSOR_NO_ENTRY = wxGenNewId();
170 A2DCANVASDLLEXP extern const a2dCursorId a2dCURSOR_PAINT_BRUSH = wxGenNewId();
171 A2DCANVASDLLEXP extern const a2dCursorId a2dCURSOR_PENCIL = wxGenNewId();
172 A2DCANVASDLLEXP extern const a2dCursorId a2dCURSOR_POINT_LEFT = wxGenNewId();
173 A2DCANVASDLLEXP extern const a2dCursorId a2dCURSOR_POINT_RIGHT = wxGenNewId();
174 A2DCANVASDLLEXP extern const a2dCursorId a2dCURSOR_QUESTION_ARROW = wxGenNewId();
175 A2DCANVASDLLEXP extern const a2dCursorId a2dCURSOR_RIGHT_BUTTON = wxGenNewId();
176 A2DCANVASDLLEXP extern const a2dCursorId a2dCURSOR_SIZENESW = wxGenNewId();
177 A2DCANVASDLLEXP extern const a2dCursorId a2dCURSOR_SIZENS = wxGenNewId();
178 A2DCANVASDLLEXP extern const a2dCursorId a2dCURSOR_SIZENWSE = wxGenNewId();
179 A2DCANVASDLLEXP extern const a2dCursorId a2dCURSOR_SIZEWE = wxGenNewId();
180 A2DCANVASDLLEXP extern const a2dCursorId a2dCURSOR_SIZING = wxGenNewId();
181 A2DCANVASDLLEXP extern const a2dCursorId a2dCURSOR_SPRAYCAN = wxGenNewId();
182 A2DCANVASDLLEXP extern const a2dCursorId a2dCURSOR_WAIT = wxGenNewId();
183 A2DCANVASDLLEXP extern const a2dCursorId a2dCURSOR_WATCH = wxGenNewId();
184 A2DCANVASDLLEXP extern const a2dCursorId a2dCURSOR_BLANK = wxGenNewId();
185 A2DCANVASDLLEXP extern const a2dCursorId a2dCURSOR_ARROWWAIT = wxGenNewId();
186 
187 A2DCANVASDLLEXP extern const a2dCursorId a2dCURSOR_Select = wxGenNewId();
188 A2DCANVASDLLEXP extern const a2dCursorId a2dCURSOR_Select2 = wxGenNewId();
189 A2DCANVASDLLEXP extern const a2dCursorId a2dCURSOR_Zoom = wxGenNewId();
190 A2DCANVASDLLEXP extern const a2dCursorId a2dCURSOR_Drag = wxGenNewId();
191 A2DCANVASDLLEXP extern const a2dCursorId a2dCURSOR_Move = wxGenNewId();
192 A2DCANVASDLLEXP extern const a2dCursorId a2dCURSOR_Copy = wxGenNewId();
193 A2DCANVASDLLEXP extern const a2dCursorId a2dCURSOR_DrawWire = wxGenNewId();
194 A2DCANVASDLLEXP extern const a2dCursorId a2dCURSOR_EditWire = wxGenNewId();
195 A2DCANVASDLLEXP extern const a2dCursorId a2dCURSOR_EditWireVertex = wxGenNewId();
196 A2DCANVASDLLEXP extern const a2dCursorId a2dCURSOR_EditWireDeleteVertex = wxGenNewId();
197 A2DCANVASDLLEXP extern const a2dCursorId a2dCURSOR_EditWireSegment = wxGenNewId();
198 A2DCANVASDLLEXP extern const a2dCursorId a2dCURSOR_EditWireSegmentHorizontal = wxGenNewId();
199 A2DCANVASDLLEXP extern const a2dCursorId a2dCURSOR_EditWireSegmentVertical = wxGenNewId();
200 A2DCANVASDLLEXP extern const a2dCursorId a2dCURSOR_WireSegmentInsert = wxGenNewId();
201 A2DCANVASDLLEXP extern const a2dCursorId a2dCURSOR_Edit = wxGenNewId();
202 A2DCANVASDLLEXP extern const a2dCursorId a2dCURSOR_EditVertex = wxGenNewId();
203 A2DCANVASDLLEXP extern const a2dCursorId a2dCURSOR_EditDeleteVertex = wxGenNewId();
204 A2DCANVASDLLEXP extern const a2dCursorId a2dCURSOR_EditSegment = wxGenNewId();
205 A2DCANVASDLLEXP extern const a2dCursorId a2dCURSOR_EditSegmentHorizontal = wxGenNewId();
206 A2DCANVASDLLEXP extern const a2dCursorId a2dCURSOR_EditSegmentVertical = wxGenNewId();
207 A2DCANVASDLLEXP extern const a2dCursorId a2dCURSOR_SegmentInsert = wxGenNewId();
208 
209 A2DCANVASDLLEXP extern const a2dImageId a2dBitmap_EditRectangleFill = wxGenNewId();
210 
211 A2DCANVASDLLEXP extern const a2dCursorId a2dCURSOR_HandleLeftDown = wxGenNewId();
212 A2DCANVASDLLEXP extern const a2dCursorId a2dCURSOR_HandleDrag = wxGenNewId();
213 A2DCANVASDLLEXP extern const a2dCursorId a2dCURSOR_HandleMove = wxGenNewId();
214 A2DCANVASDLLEXP extern const a2dCursorId a2dCURSOR_HandleEnter = wxGenNewId();
215 A2DCANVASDLLEXP extern const a2dCursorId a2dCURSOR_HandleLeave = wxGenNewId();
216 
217 A2DCANVASDLLEXP extern const a2dCursorId a2dCURSOR_CanvasObjectHit = wxGenNewId();
218 A2DCANVASDLLEXP extern const a2dCursorId a2dCURSOR_CanvasObjectEnter = wxGenNewId();
219 A2DCANVASDLLEXP extern const a2dCursorId a2dCURSOR_CanvasObjectLeave = wxGenNewId();
220 
221 
222 a2dArtProvider::a2dArtProvider()
223 {
224 }
225 
226 a2dArtProvider::~a2dArtProvider()
227 {
228 }
229 
230 wxCursor LoadCursorFile( const wxString& filename )
231 {
232  wxImage im;
233  if ( im.LoadFile( filename ) )
234  {
235  im.LoadFile( filename );
236  im.SetOption( wxIMAGE_OPTION_CUR_HOTSPOT_X, 16 );
237  im.SetOption( wxIMAGE_OPTION_CUR_HOTSPOT_Y, 16 );
238  return wxCursor( im );
239  }
240  else
241  {
242  wxString error;
243  error.Printf( _T( "could not load cursor from file: %s" ), filename.c_str() );
244  wxMessageBox( error, _T( "environment error" ), wxOK );
245  return wxCURSOR_ARROW;
246  }
247 }
248 
249 wxCursor& a2dArtProvider::GetCursor( a2dCursorId id )
250 {
251  if ( m_cursorsLoaded.find( id ) != m_cursorsLoaded.end() )
252  return m_cursorsLoaded[id];
253 
254  static wxCursor cursor;
255 
256  if ( id == a2dCURSOR_NONE )
257  cursor = wxCursor( wxCURSOR_NONE );
258  if ( id == a2dCURSOR_ARROW )
259  cursor = wxCursor( wxCURSOR_ARROW );
260  if ( id == a2dCURSOR_RIGHT_ARROW )
261  cursor = wxCursor( wxCURSOR_RIGHT_ARROW );
262  if ( id == a2dCURSOR_BULLSEYE )
263  cursor = wxCursor( wxCURSOR_BULLSEYE );
264  if ( id == a2dCURSOR_CHAR )
265  cursor = wxCursor( wxCURSOR_CHAR );
266  if ( id == a2dCURSOR_CROSS )
267  cursor = wxCursor( wxCURSOR_CROSS );
268  if ( id == a2dCURSOR_HAND )
269  cursor = wxCursor( wxCURSOR_HAND );
270  if ( id == a2dCURSOR_IBEAM )
271  cursor = wxCursor( wxCURSOR_IBEAM );
272  if ( id == a2dCURSOR_LEFT_BUTTON )
273  cursor = wxCursor( wxCURSOR_LEFT_BUTTON );
274  if ( id == a2dCURSOR_MAGNIFIER )
275  cursor = wxCursor( wxCURSOR_MAGNIFIER );
276  if ( id == a2dCURSOR_MIDDLE_BUTTON )
277  cursor = wxCursor( wxCURSOR_MIDDLE_BUTTON );
278  if ( id == a2dCURSOR_NO_ENTRY )
279  cursor = wxCursor( wxCURSOR_NO_ENTRY );
280  if ( id == a2dCURSOR_PAINT_BRUSH )
281  cursor = wxCursor( wxCURSOR_PAINT_BRUSH );
282  if ( id == a2dCURSOR_PENCIL )
283  cursor = wxCursor( wxCURSOR_PENCIL );
284  if ( id == a2dCURSOR_POINT_LEFT )
285  cursor = wxCursor( wxCURSOR_POINT_LEFT );
286  if ( id == a2dCURSOR_POINT_RIGHT )
287  cursor = wxCursor( wxCURSOR_POINT_RIGHT );
288  if ( id == a2dCURSOR_QUESTION_ARROW )
289  cursor = wxCursor( wxCURSOR_QUESTION_ARROW );
290  if ( id == a2dCURSOR_RIGHT_BUTTON )
291  cursor = wxCursor( wxCURSOR_RIGHT_BUTTON );
292  if ( id == a2dCURSOR_SIZENESW )
293  cursor = wxCursor( wxCURSOR_SIZENESW );
294  if ( id == a2dCURSOR_SIZENS )
295  cursor = wxCursor( wxCURSOR_SIZENS );
296  if ( id == a2dCURSOR_SIZENWSE )
297  cursor = wxCursor( wxCURSOR_SIZENWSE );
298  if ( id == a2dCURSOR_SIZEWE )
299  cursor = wxCursor( wxCURSOR_SIZEWE );
300  if ( id == a2dCURSOR_SIZING )
301  cursor = wxCursor( wxCURSOR_SIZING );
302  if ( id == a2dCURSOR_SPRAYCAN )
303  cursor = wxCursor( wxCURSOR_SPRAYCAN );
304  if ( id == a2dCURSOR_WAIT )
305  cursor = wxCursor( wxCURSOR_WAIT );
306  if ( id == a2dCURSOR_WATCH )
307  cursor = wxCursor( wxCURSOR_WATCH );
308  if ( id == a2dCURSOR_BLANK )
309  cursor = wxCursor( wxCURSOR_BLANK );
310  if ( id == a2dCURSOR_ARROWWAIT )
311  cursor = wxCursor( wxCURSOR_ARROWWAIT );
312 
313  if ( id == a2dCURSOR_Select )
314  cursor = wxCursor( wxCURSOR_CROSS );
315  if ( id == a2dCURSOR_Select2 )
316  cursor = wxCursor( wxCURSOR_CROSS );
317  if ( id == a2dCURSOR_Zoom )
318  cursor = wxCursor( wxCURSOR_MAGNIFIER );
319  if ( id == a2dCURSOR_Drag )
320  cursor = wxCursor( wxCURSOR_HAND );
321  if ( id == a2dCURSOR_Move )
322  cursor = wxCursor( wxCURSOR_HAND );
323  if ( id == a2dCURSOR_Copy )
324  cursor = wxCursor( wxCURSOR_HAND );
325  if ( id == a2dCURSOR_DrawWire )
326  cursor = wxCursor( wxCURSOR_PENCIL );
327  if ( id == a2dCURSOR_EditWire )
328  cursor = wxCursor( wxCURSOR_HAND );
329  if ( id == a2dCURSOR_EditWireVertex )
330  cursor = wxCursor( wxCURSOR_HAND );
331  if ( id == a2dCURSOR_EditWireDeleteVertex )
332  cursor = wxCursor( wxCURSOR_HAND );
333  if ( id == a2dCURSOR_EditWireSegment )
334  cursor = wxCursor( wxCURSOR_HAND );
335  if ( id == a2dCURSOR_EditWireSegmentHorizontal )
336  cursor = wxCursor( wxCURSOR_SIZENS );
337  if ( id == a2dCURSOR_EditWireSegmentVertical )
338  cursor = wxCursor( wxCURSOR_SIZEWE );
339  if ( id == a2dCURSOR_WireSegmentInsert )
340  cursor = wxCursor( wxCURSOR_CROSS );
341  if ( id == a2dCURSOR_Edit )
342  cursor = wxCursor( wxCURSOR_SIZEWE );
343  if ( id == a2dCURSOR_EditVertex )
344  cursor = wxCursor( wxCURSOR_HAND );
345  if ( id == a2dCURSOR_EditSegment )
346  cursor = wxCursor( wxCURSOR_SIZENS );
347  if ( id == a2dCURSOR_EditSegmentHorizontal )
348  cursor = wxCursor( wxCURSOR_HAND );
349  if ( id == a2dCURSOR_EditSegmentVertical )
350  cursor = wxCursor( wxCURSOR_HAND );
351  if ( id == a2dCURSOR_SegmentInsert )
352  cursor = wxCursor( wxCURSOR_HAND );
353 
354  wxString artroot = a2dGeneralGlobals->GetWxArt2DArtVar();
355  if ( artroot.IsEmpty() )
356  return cursor;
357  else
358  artroot += wxT( "cursors/" );
359 
360  if ( id == a2dCURSOR_Select )
361  cursor = wxCursor( wxCURSOR_CROSS );
362  if ( id == a2dCURSOR_Select2 )
363  cursor = wxCursor( wxCURSOR_CROSS );
364  if ( id == a2dCURSOR_Zoom )
365  cursor = wxCursor( wxCURSOR_MAGNIFIER );
366  if ( id == a2dCURSOR_Drag )
367  cursor = LoadCursorFile( artroot + wxT( "drag_cur.cur" ) );
368  if ( id == a2dCURSOR_Move )
369  cursor = LoadCursorFile( artroot + wxT( "move_cur.cur" ) );
370  if ( id == a2dCURSOR_Copy )
371  cursor = LoadCursorFile( artroot + wxT( "copy_cur.cur" ) );
372  if ( id == a2dCURSOR_DrawWire )
373  cursor = LoadCursorFile( artroot + wxT( "start_wire.cur" ) );
374  if ( id == a2dCURSOR_EditWire )
375  cursor = wxCursor( wxCURSOR_HAND );
376  if ( id == a2dCURSOR_EditWireDeleteVertex )
377  cursor = LoadCursorFile( artroot + wxT( "delete_vertex.cur" ) );
378  if ( id == a2dCURSOR_EditWireVertex )
379  cursor = LoadCursorFile( artroot + wxT( "drag_vertex.cur" ) );
380  if ( id == a2dCURSOR_EditWireSegment )
381  cursor = LoadCursorFile( artroot + wxT( "drag_seg.cur" ) );
382  if ( id == a2dCURSOR_EditWireSegmentHorizontal )
383  cursor = LoadCursorFile( artroot + wxT( "drag_seg_horz.cur" ) );
384  if ( id == a2dCURSOR_EditWireSegmentVertical )
385  cursor = LoadCursorFile( artroot + wxT( "drag_seg_vert.cur" ) );
386  if ( id == a2dCURSOR_WireSegmentInsert )
387  cursor = LoadCursorFile( artroot + wxT( "insert_seg.cur" ) );
388  if ( id == a2dCURSOR_Edit )
389  cursor = LoadCursorFile( artroot + wxT( "edit_cur.cur" ) );
390  if ( id == a2dCURSOR_EditDeleteVertex )
391  cursor = LoadCursorFile( artroot + wxT( "delete_vertex.cur" ) );
392  if ( id == a2dCURSOR_EditVertex )
393  cursor = LoadCursorFile( artroot + wxT( "edit_cur.cur" ) );
394  if ( id == a2dCURSOR_EditSegment )
395  cursor = wxCursor( wxCURSOR_SIZENS );
396  if ( id == a2dCURSOR_EditSegmentHorizontal )
397  cursor = wxCursor( wxCURSOR_HAND );
398  if ( id == a2dCURSOR_EditSegmentVertical )
399  cursor = wxCursor( wxCURSOR_HAND );
400  if ( id == a2dCURSOR_SegmentInsert )
401  cursor = wxCursor( wxCURSOR_HAND );
402 
403  if ( id == a2dCURSOR_HandleLeftDown )
404  cursor = wxCursor( wxCURSOR_CROSS );
405  if ( id == a2dCURSOR_HandleDrag )
406  cursor = wxCursor( wxCURSOR_CROSS );
407  if ( id == a2dCURSOR_HandleMove )
408  cursor = wxCursor( wxCURSOR_CROSS );
409 
410  if ( id == a2dCURSOR_HandleEnter )
411  cursor = wxCursor( wxCURSOR_CROSS );
412  if ( id == a2dCURSOR_HandleLeave )
413  cursor = wxCursor( wxCURSOR_ARROW );
414  //cursor = LoadCursorFile( artroot + wxT( "drag_vertex.cur" ) );
415 
416  if ( id == a2dCURSOR_CanvasObjectHit )
417  cursor = wxCursor( wxCURSOR_HAND );
418  //cursor = LoadCursorFile( artroot + wxT( "drag_vertex.cur" ) );
419  if ( id == a2dCURSOR_CanvasObjectEnter )
420  cursor = LoadCursorFile( artroot + wxT( "edit_cur.cur" ) );
421  if ( id == a2dCURSOR_CanvasObjectLeave )
422  cursor = wxCursor( wxCURSOR_ARROW );
423  //cursor = LoadCursorFile( artroot + wxT( "edit_cur.cur" ) );
424 
425  /* but rotation in wxWidgets is not around a point, to bad.
426  if ( id == a2dCURSOR_Move )
427  {
428  static char down_bits[] = { 255, 255, 255, 255, 31,
429  255, 255, 255, 31, 255, 255, 255, 31, 255, 255, 255,
430  31, 255, 255, 255, 31, 255, 255, 255, 31, 255, 255,
431  255, 31, 255, 255, 255, 31, 255, 255, 255, 25, 243,
432  255, 255, 19, 249, 255, 255, 7, 252, 255, 255, 15, 254,
433  255, 255, 31, 255, 255, 255, 191, 255, 255, 255, 255,
434  255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
435  255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
436  255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
437  255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
438  255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
439  255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
440  255 };
441 
442  static char down_mask[] = { 240, 1, 0, 0, 240, 1,
443  0, 0, 240, 1, 0, 0, 240, 1, 0, 0, 240, 1, 0, 0, 240, 1,
444  0, 0, 240, 1, 0, 0, 240, 1, 0, 0, 255, 31, 0, 0, 255,
445  31, 0, 0, 254, 15, 0, 0, 252, 7, 0, 0, 248, 3, 0, 0,
446  240, 1, 0, 0, 224, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0,
447  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
448  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
449  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
450  0, 0, 0, 0, 0 };
451 
452  wxBitmap down_bitmap(down_bits, 32, 32);
453  wxBitmap down_mask_bitmap(down_mask, 32, 32);
454 
455  down_bitmap.SetMask(new wxMask(down_mask_bitmap));
456  wxImage down_image = down_bitmap.ConvertToImage();
457  down_image.SetOption(wxIMAGE_OPTION_CUR_HOTSPOT_X, 0);
458  down_image.SetOption(wxIMAGE_OPTION_CUR_HOTSPOT_Y, 0);
459  //down_image = down_image.Rotate( 45, wxPoint(0,0));
460  cursor = wxCursor(down_image);
461  }
462  */
463  m_cursorsLoaded[id] = cursor;
464  return cursor;
465 }
466 
467 wxBitmap& a2dArtProvider::GetImage( a2dImageId id )
468 {
469  if ( m_imageLoaded.find( id ) != m_imageLoaded.end() )
470  return m_imageLoaded[id];
471 
472  static wxBitmap bitmap;
473 
474  if ( id == a2dBitmap_EditRectangleFill )
475  {
476  static const char* bits[] =
477  {
478  "8 8 3 1 0 0",
479  " c #000000",
480  "! c #FFFFFF",
481  "# c #FFFFFF",
482  //"# c none",
483  " # # # #",
484  "# # # # ",
485  " # # # #",
486  "# # # # ",
487  " # # # #",
488  "# # # # ",
489  " # # # #",
490  "# # # # "
491  };
492 
493  bitmap = wxBitmap( bits );
494  static const char mask_bits[] =
495  {
496  0x13, 0x00, 0x15, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x80,
497  0x00, 0x60
498  };
499  wxBitmap mask_bitmap( mask_bits, 8, 8, 1 );
500  bitmap.SetMask( new wxMask( mask_bitmap ) );
501  }
502 
503 
504  m_imageLoaded[id] = bitmap;
505  return bitmap;
506 }
507 
508 //----------------------------------------------------------------------------
509 // a2dHabitat
510 //----------------------------------------------------------------------------
511 const a2dSignal a2dHabitat::sig_changedFill = wxNewId();
512 const a2dSignal a2dHabitat::sig_changedStroke = wxNewId();
513 const a2dSignal a2dHabitat::sig_changedFont = wxNewId();
514 const a2dSignal a2dHabitat::sig_changedLayer = wxNewId();
515 const a2dSignal a2dHabitat::sig_changedTarget = wxNewId();
516 const a2dSignal a2dHabitat::sig_SetPathType = wxNewId();
517 const a2dSignal a2dHabitat::sig_SetContourWidth = wxNewId();
518 const a2dSignal a2dHabitat::sig_changedTextFill = wxNewId();
519 const a2dSignal a2dHabitat::sig_changedTextStroke = wxNewId();
520 const a2dSignal a2dHabitat::sig_changedTextFont = wxNewId();
521 
522 a2dHabitat::a2dHabitat( wxUint16 maximumLayers )
523 {
524  m_maximumLayers = maximumLayers;
525  Init();
526 }
527 
528 a2dHabitat::~a2dHabitat()
529 {}
530 
531 void a2dHabitat::Init( a2dLayers* layers )
532 {
533  m_default_acc = 1e-6;
534 
535  m_propertytext = ( a2dText* ) NULL;
536 
537  if ( ! layers )
538  {
539  m_layersetup = new a2dLayers();
540 
541  a2dLayerInfo* n;
542  n = new a2dLayerInfo( wxLAYER_DEFAULT, wxT( "layer default" ) );
543  m_layersetup->Append( n );
544  n->SetStroke( a2dStroke( wxColour( 0, 255, 255 ), 2, a2dSTROKE_SOLID ) );
545  n->SetFill( a2dFill( wxColour( 0, 0, 0 ), a2dFILL_SOLID ) );
546 
547  for ( wxUint16 i = 1; i < m_maximumLayers; i++ )
548  {
549  wxString buf;
550  buf.Printf( wxT( "layer %d" ), i );
551  a2dLayerInfo* n = new a2dLayerInfo( i, buf );
552  m_layersetup->Append( n );
553  n->SetOrder( i );
554  n->SetInMapping( i );
555  n->SetOutMapping( i );
556  }
557  m_layersetup->SetPending( true );
558  }
559  else
560  {
561  m_layersetup = wxStaticCastNull( layers->Clone( clone_deep ), a2dLayers );
562  m_layersetup->SetPending( true );
563  }
564 
565  m_SelectStroke = a2dStroke( wxColour( 255, 255, 0 ), 2, a2dSTROKE_SOLID );
567 
568  m_Select2Stroke = a2dStroke( wxColour( 255, 255, 0 ), 2, a2dSTROKE_SOLID );
570 
571  m_DefaultStroke = a2dStroke( wxColour( 0, 0, 0 ), 0, a2dSTROKE_SOLID );
573 
576 
579 
580  m_hitmargin_device = 2;
581  m_hitmargin_world = 2;
582  m_copymindistance = 5;
583  // This is related to accuracy of numbers written to text files.
584  m_coordinateepsilon = 1e-3;
585  m_reverse_order = false;
586  m_oneLine = false;
588 // a2dGeneralGlobals->SetDocviewCommandProcessor(new a2dCentralCanvasCommandProcessor);
589 
592  m_selectedOnlyA = false;
593  m_selectedOnlyB = false;
594  m_clearTarget = false;
595  m_CORRECTIONFACTOR = 500.0e-6; // correct the polygons by this number (just something)
596  m_CORRECTIONABER = 1.0e-6; // the accuracy for the rounded shapes used in correction
597  m_ROUNDFACTOR = 1.5; // when will we round the correction shape to a circle
598  m_SMOOTHABER = 0.001e-6; // accuracy when smoothing a polygon
599  m_MAXLINEMERGE = 1000.0e-6; // leave as is, segments of this length in smoothen
600  m_MARGE = 0.1e-6;
601  m_GRID = 100;
602  m_DGRID = 100;
603  m_physicalunits = 1;
604  m_userunits = 1;
605  m_radiusMin = m_poly2arcMin / m_physicalunits;
606  m_radiusMax = m_poly2arcMax / m_physicalunits;
607  m_AberPolyToArc = 1;
608  m_AberArcToPoly = 1;
609  m_AberPolyToArc = m_AberPolyToArc / m_physicalunits;
610  m_AberArcToPoly = m_AberArcToPoly / m_physicalunits;
611  m_displayaberration = 1;
612  m_arc2polyaber = 1;
613  m_poly2arcMin = 1;
614  m_poly2arcMax = 1000;
615  m_poly2arcAber = 10;
616 
617  m_RelativeStartX = 0;
618  m_RelativeStartY = 0;
619 
620  m_WINDINGRULE = true;
621  m_SmoothAber = 0.1e-6;
622  m_LinkHoles = false;
623  m_currentContourWidth = 0.0e-6;
624  m_pathtype = a2dPATH_END_SQAURE;
625 
627  m_textTemplateObject = new a2dText( _T( "" ), 0,0, m_font, 0, false );
628  m_textOwnStyle = true;
629 
630  m_spline = false;
631  m_lastX = m_lastY = 0;
632 
635 
636  m_currentfill = a2dFill( wxColour( 0, 149, 25 ), a2dFILL_HORIZONTAL_HATCH );
637  m_currentstroke = a2dStroke( wxColour( 0, 255, 0 ), 0, a2dSTROKE_SOLID );
638 
639  m_currentEnd = 0;
640  m_currentBegin = 0;
642 
643  m_spline = false;
644 
645  m_lastX = m_lastY = 0;
646  m_keySaveTextAsPolygon = false;
647  m_gdsiiSaveTextAsPolygon = false;
648  m_keySaveFromView = false;
649  m_gdsiiSaveFromView = false;
650 
651  m_symbolLayer = wxLAYER_DEFAULT;
652 
653  m_defPinSize = PINWIDTH;
654  m_defHandleSize = HANDLEWIDTH;
655  m_objectGridSize = 1;
656  m_defaultUnitsScale = 1;
657 
658  m_drawingTemplate = new a2dDrawing( "", this );
659  m_drawingTemplateSymbol = m_drawingTemplate;
660  m_drawingTemplateDiagram = m_drawingTemplate;
661  m_drawingTemplateBuildIn = m_drawingTemplate;
662  m_drawingTemplateGui = m_drawingTemplate;
663 }
664 
665 bool a2dHabitat::LoadLayers( const wxString& filename )
666 {
667  wxString foundfile = filename;
668 
669  if ( m_layersetup )
671  else
672  {
673  m_layersetup = new a2dLayers();
674  }
675 
676  foundfile = a2dCanvasGlobals->GetLayersPathList().FindValidPath( foundfile );
677  if ( foundfile.IsEmpty() )
678  {
679  a2dGeneralGlobals->ReportErrorF( a2dError_NotSpecified, _( "Path to layers settings file %s not found in path %s" ), filename.c_str(), a2dCanvasGlobals->GetLayersPathList().GetAsString().c_str() );
680  return false;
681  }
682 
683  bool ret = m_layersetup->LoadLayers( foundfile );
684  return ret;
685 }
686 
687 void a2dHabitat::SetPin( a2dPin* newpin )
688 {
689  m_defPin = newpin;
690 }
691 
693 {
694  if ( !m_defPin )
695  {
696  m_defPin = new a2dPin( NULL, wxT( "global" ), a2dPinClass::Standard, 0, 0, 0, m_defPinSize, m_defPinSize );
697  m_defPin->SetFill( *wxGREEN );
698  m_defPin->SetStroke( wxColour( 66, 159, 235 ), 1 );
699  }
700  return m_defPin;
701 }
702 
704 {
705  m_defCannotConnectPin = newpin;
706 }
707 
709 {
710  if ( !m_defCannotConnectPin )
711  {
712  m_defCannotConnectPin = new a2dPin( NULL, wxT( "global" ), a2dPinClass::Standard, 0, 0, 0, m_defPinSize / 2 + 1, m_defPinSize / 2 + 1 );
713  m_defCannotConnectPin->SetFill( wxColour( 255, 128, 128 ) );
714  m_defCannotConnectPin->SetStroke( *wxRED, 1 );
715  }
716  return m_defCannotConnectPin;
717 }
718 
720 {
721  m_defCanConnectPin = newpin;
722 }
723 
725 {
726  if ( !m_defCanConnectPin )
727  {
728  m_defCanConnectPin = new a2dPin( NULL, wxT( "global" ), a2dPinClass::Standard, 0, 0, 0, 2 * m_defPinSize + 1, 2 * m_defPinSize + 1 );
729  m_defCanConnectPin->SetFill( wxColour( 128, 255, 128 ) );
730  m_defCanConnectPin->SetStroke( *wxGREEN, 1 );
731  }
732  return m_defCanConnectPin;
733 }
734 
736 {
737  m_defHandle = newhandle;
738 }
739 
741 {
742 
743  if ( !m_defHandle )
744  {
745  m_defHandle = new a2dHandle( NULL, 0, 0, wxT( "global" ), m_defHandleSize, m_defHandleSize );
746  m_defHandle->SetFill( *wxCYAN );
747  m_defHandle->SetStroke( wxColour( 66, 159, 235 ), 1 );
748  }
749  return m_defHandle;
750 }
751 
753 {
754  if ( !m_propertytext )
755  {
756  m_propertytext = new a2dText( wxT( "dummy" ), 0, 0, a2dFont( 80.0, wxSWISS ) );
757  m_propertytext->SetFill( *wxCYAN );
758  m_propertytext->SetStroke( wxColour( 66, 159, 235 ), 0.0 );
759  }
760  return m_propertytext;
761 }
762 
763 //how accurate is the drawing
764 void a2dHabitat::USERUNITS( double userunit )
765 {
766  m_userunits = userunit;
767 }
768 //how many meters is 1 unit in the database
769 void a2dHabitat::PHYSUNITS( double physicalunit )
770 {
771  m_physicalunits = physicalunit;
772 }
773 
775 {
776  return m_userunits;
777 }
778 
780 {
781  return m_physicalunits;
782 }
783 
784 //entry of data
786 {
787  return m_default_acc;
788 }
789 
790 double a2dHabitat::ACCUR()
791 {
792  return m_default_acc / 10000;
793 }
794 
795 double a2dHabitat::ARCTOPOLYABER()
796 {
797  return m_arc2polyaber / m_physicalunits;
798 }
799 
800 double a2dHabitat::POLYTOARCRMIN()
801 {
802  return m_poly2arcMin / m_physicalunits;
803 }
804 
805 double a2dHabitat::POLYTOARCRMAX()
806 {
807  return m_poly2arcMax / m_physicalunits;
808 }
809 
810 double a2dHabitat::POLYTOARCABER()
811 {
812  return m_poly2arcAber / m_physicalunits;
813 }
814 
816 {
817  m_AberPolyToArc = aber;
818  a2dGlobals->SetAberPolyToArc( double(m_AberPolyToArc ) );/// doc->GetUnitsScale() );
819 }
820 
822 {
823  m_AberArcToPoly = aber;
824  a2dGlobals->SetAberArcToPoly( double( m_AberArcToPoly ) );/// doc->GetUnitsScale() );
825 }
826 
827 void a2dHabitat::SetSmall( const a2dDoMu& smallest )
828 {
829  m_small = smallest;
830 }
831 
832 bool a2dHabitat::GdsIoSaveTextAsPolygon( bool onOff )
833 {
834  m_gdsiiSaveTextAsPolygon = onOff;
835  return true;
836 }
837 
838 bool a2dHabitat::KeyIoSaveTextAsPolygon( bool onOff )
839 {
840  m_keySaveTextAsPolygon = onOff;
841  return true;
842 }
843 
844 bool a2dHabitat::GetGdsIoSaveTextAsPolygon() const
845 {
846  return m_gdsiiSaveTextAsPolygon;
847 }
848 
849 bool a2dHabitat::GetKeyIoSaveTextAsPolygon() const
850 {
851  return m_keySaveTextAsPolygon;
852 }
853 
855 {
856  return m_HighLightStroke;
857 }
858 
860 {
861  return m_HighLightFill;
862 }
863 
865 {
866  m_HighLightStroke = stroke;
867 }
868 
870 {
871  m_HighLightFill = fill;
872 }
873 
875 {
876  return m_SelectStroke;
877 }
878 
880 {
881  return m_SelectFill;
882 }
883 
885 {
886  m_SelectStroke = stroke;
887 }
888 
890 {
891  m_SelectFill = fill;
892 }
893 
895 {
896  return m_Select2Stroke;
897 }
898 
900 {
901  return m_Select2Fill;
902 }
903 
905 {
906  m_Select2Stroke = stroke;
907 }
908 
910 {
911  m_Select2Fill = fill;
912 }
913 
915 {
916  return m_DefaultStroke;
917 }
918 
920 {
921  return m_DefaultFill;
922 }
923 
925 {
926  m_DefaultStroke = stroke;
927 }
928 
930 {
931  m_DefaultFill = fill;
932 }
933 
935 {
936  return m_restrictionEngine;
937 }
938 
939 void a2dHabitat::SetStroke( const a2dStroke& stroke )
940 {
941  m_currentstroke = stroke;
942  a2dComEvent changed( this, sig_changedStroke );
943  a2dCanvasGlobals->ProcessEvent( changed );
944 }
945 
946 void a2dHabitat::SetStroke( const unsigned char red, const unsigned char green, const unsigned char blue )
947 {
948  a2dStroke col = GetStroke();
949  col.SetColour( wxColour( red, green, blue ) );
950  m_currentstroke = col;
951  a2dComEvent changed( this, sig_changedStroke );
952  a2dCanvasGlobals->ProcessEvent( changed );
953 }
954 
955 void a2dHabitat::SetFill( const a2dFill& fill )
956 {
957  m_currentfill = fill;
958  a2dComEvent changed( this, sig_changedFill );
959  a2dCanvasGlobals->ProcessEvent( changed );
960 }
961 
962 void a2dHabitat::SetFill( const unsigned char red, const unsigned char green, const unsigned char blue )
963 {
964  a2dFill col = GetFill();
965  col.SetColour( wxColour( red, green, blue ) );
966  m_currentfill = col;
967  a2dComEvent changed( this, sig_changedFill );
968  a2dCanvasGlobals->ProcessEvent( changed );
969 }
970 
971 void a2dHabitat::SetFont( const a2dFont& font )
972 {
973  m_font = font;
974  a2dComEvent changed( this, sig_changedFont );
975  a2dCanvasGlobals->ProcessEvent( changed );
976 }
977 
978 
980 {
981  if ( m_textOwnStyle )
982  {
983  m_textTemplateObject->SetStroke( stroke );
984  a2dComEvent changed( this, sig_changedTextStroke );
985  a2dCanvasGlobals->ProcessEvent( changed );
986  }
987  else
988  {
989  m_textTemplateObject->SetStroke( stroke );
990  SetStroke( stroke );
991  }
992 }
993 
994 void a2dHabitat::SetTextFill( const a2dFill& fill )
995 {
996  if ( m_textOwnStyle )
997  {
998  m_textTemplateObject->SetFill( fill );
999  a2dComEvent changed( this, sig_changedTextFill );
1000  a2dCanvasGlobals->ProcessEvent( changed );
1001  }
1002  else
1003  {
1004  m_textTemplateObject->SetFill( fill );
1005  SetFill( fill );
1006  }
1007 }
1008 
1010 {
1011  if ( m_textOwnStyle )
1012  {
1013  m_textTemplateObject->SetFont( font );
1014  a2dComEvent changed( this, m_textOwnStyle ? sig_changedTextFont : sig_changedTextFont );
1015  a2dCanvasGlobals->ProcessEvent( changed );
1016  }
1017  else
1018  {
1019  m_textTemplateObject->SetFont( font );
1020  SetFont( font );
1021  }
1022 }
1023 
1024 
1026 {
1027  if ( m_textOwnStyle )
1028  return m_textTemplateObject->GetStroke();
1029  return GetStroke();
1030 }
1031 
1033 {
1034  if ( m_textOwnStyle )
1035  return m_textTemplateObject->GetFill();
1036  return GetFill();
1037 }
1038 
1040 {
1041  if ( m_textOwnStyle )
1042  return m_textTemplateObject->GetFont();
1043  return GetFont();
1044 }
1045 
1046 
1048 {
1049  m_currentContourWidth = width ;//* doc->GetUnitsScale();
1050 }
1051 
1053 {
1054  return m_currentContourWidth ;/// doc->GetUnitsScale();
1055 }
1056 
1058 {
1059  m_pathtype = pathtype;
1060  a2dComEvent changed( this, sig_SetPathType );
1061  a2dCanvasGlobals->ProcessEvent( changed );
1062 }
1063 
1064 void a2dHabitat::SetContourWidth( const a2dDoMu& currentContourWidth )
1065 {
1066  m_currentContourWidth = currentContourWidth;
1067  a2dComEvent changed( this, sig_SetContourWidth );
1068  a2dCanvasGlobals->ProcessEvent( changed );
1069 }
1070 
1072 {
1073  m_layersetup = layersetup;
1074 };
1075 
1076 void a2dHabitat::SetLayer( wxUint16 layer, bool setStyleOfLayer )
1077 {
1078  m_layer = layer;
1079  if ( setStyleOfLayer )
1080  {
1083  }
1084  a2dComEvent changed( this, sig_changedLayer );
1085  a2dCanvasGlobals->ProcessEvent( changed );
1086 }
1087 
1088 void a2dHabitat::SetTarget( wxUint16 layer )
1089 {
1090  m_target = layer;
1091  a2dComEvent changed( this, sig_changedTarget );
1092  a2dCanvasGlobals->ProcessEvent( changed );
1093 }
1094 
1095 void a2dHabitat::SetGridX( const a2dDoMu& gridX )
1096 {
1097  m_gridX = gridX;
1098 }
1099 
1100 void a2dHabitat::SetGridY( const a2dDoMu& gridY )
1101 {
1102  m_gridY = gridY;
1103 }
1104 
1105 void a2dHabitat::SetDrawingTemplate( a2dDrawing* drawingTemplate) { m_drawingTemplate = drawingTemplate; }
1106 
1107 a2dDrawing* a2dHabitat::GetDrawingTemplate() const { return m_drawingTemplate; }
1108 
1109 void a2dHabitat::SetSymbolDrawingTemplate( a2dDrawing* drawingTemplate) { m_drawingTemplateSymbol = drawingTemplate; }
1110 
1111 a2dDrawing* a2dHabitat::GetSymbolDrawingTemplate() const { return m_drawingTemplateSymbol; }
1112 
1113 void a2dHabitat::SetBuildInDrawingTemplate( a2dDrawing* drawingTemplate) { m_drawingTemplateBuildIn = drawingTemplate; }
1114 
1115 a2dDrawing* a2dHabitat::GetBuildInDrawingTemplate() const { return m_drawingTemplateBuildIn; }
1116 
1117 void a2dHabitat::SetDiagramDrawingTemplate( a2dDrawing* drawingTemplate) { m_drawingTemplateDiagram = drawingTemplate; }
1118 
1119 a2dDrawing* a2dHabitat::GetDiagramDrawingTemplate() const { return m_drawingTemplateDiagram; }
1120 
1121 void a2dHabitat::SetGuiDrawingTemplate( a2dDrawing* drawingTemplate) { m_drawingTemplateGui = drawingTemplate; }
1122 
1123 a2dDrawing* a2dHabitat::GetGuiDrawingTemplate() const { return m_drawingTemplateGui; }
1124 
1125 wxUint16 a2dHabitat::m_maximumLayers = wxDEFAULTMAXLAYER;
1126 
1127 //----------------------------------------------------------------------------
1128 // a2dCanvasGlobal
1129 //----------------------------------------------------------------------------
1130 
1131 const a2dPropertyIdPathList a2dCanvasGlobal::PROPID_layerPathList( wxT( "layerPathList" ), a2dPropertyId::flag_none, a2dPathList() );
1132 const a2dSignal a2dCanvasGlobal::sig_changedActiveDrawing = wxNewId();
1133 
1134 a2dPathList a2dCanvasGlobal::m_layersPath = a2dPathList();
1135 
1136 a2dCanvasGlobal::a2dCanvasGlobal()
1137 
1138 {
1139  m_artProvider = new a2dArtProvider();
1140 
1141  m_layersPath.Add( wxT( "." ) );
1142  m_layersPath.Add( wxT( ".." ) );
1143  m_layersPath.Add( wxT( "./config" ) );
1144 
1145  m_initialDocChildFramePos = wxPoint( 20, 20 );
1146  m_initialDocChildFrameSize = wxSize( 600, 300 );
1147  m_initialDocChildFrameStyle = wxDEFAULT_FRAME_STYLE | wxNO_FULL_REPAINT_ON_RESIZE;
1148  //m_initialDocChildFrameStyle = wxDEFAULT_FRAME_STYLE | wxFRAME_NO_TASKBAR ;
1149 
1150  m_initialWorldCanvasStyle = wxHSCROLL | wxVSCROLL;
1151 
1152  m_popBeforePush = true;
1153  m_oneShotTools = false;
1154  m_editAtEndTools = true;
1155 
1156  m_activeDrawingPart = NULL;
1157 
1158 }
1159 
1160 void a2dCanvasGlobal::SetArtProvider( a2dArtProvider* artProvider )
1161 {
1162  delete m_artProvider;
1163  m_artProvider = artProvider;
1164 }
1165 
1166 
1167 /*
1168  m_setup = new a2dLayers();
1169 
1170  for (int i = 0; i < 10; i++)
1171  {
1172  char buf[40];
1173  sprintf(buf,"layer %d",i);
1174  a2dLayerInfo* n=new a2dLayerInfo(i,buf);
1175  m_setup->Add(n);
1176  m_setup->Set_Available(i);
1177  n->Set_Order(i);
1178  n->Set_InMapping(i);
1179  n->Set_OutMapping(i);
1180  }
1181 
1182  char buf[40];
1183  sprintf(buf,"layer default %d ",wxLAYER_DEFAULT);
1184  m_setup->Set_Name(wxLAYER_DEFAULT,buf);
1185  m_setup->Set_Stroke(wxLAYER_DEFAULT, a2dStroke(wxColour(250,0,240),1.0,a2dSTROKE_SOLID));
1186  m_setup->Set_Fill(wxLAYER_DEFAULT, a2dFill(*wxBLACK,a2dFILL_SOLID));
1187  //m_setup->Set_Visible(wxLAYER_DEFAULT,false);
1188  m_setup->Set_Order(wxLAYER_DEFAULT,-1);
1189 
1190  m_setup->Set_Name(wxLAYER_SELECTED,"layer Select");
1191  //2 not 2.0 to get a pixel pen
1192  m_setup->Set_Stroke(wxLAYER_SELECTED, a2dStroke(wxColour("YELLOW"),2,a2dSTROKE_SOLID));
1193  m_setup->Set_Fill(wxLAYER_SELECTED, a2dFill(wxColour("YELLOW"),a2dFILL_CROSSDIAG_HATCH));
1194  m_setup->Set_Fill(wxLAYER_SELECTED, *a2dTRANSPARENT_FILL);
1195  m_setup->Set_Order(wxLAYER_SELECTED,-4);
1196 
1197  m_setup->Set_Stroke(5, a2dStroke(wxColour(9,115,64 ),20,a2dSTROKE_SOLID));
1198  m_setup->Set_Fill(5, a2dFill(wxColour(10,217,2),a2dFILL_CROSSDIAG_HATCH ));
1199 
1200  m_setup->Set_Stroke(6, a2dStroke(wxColour(9,115,64 ),0,a2dSTROKE_SOLID));
1201  m_setup->Set_Fill(6, a2dFill(wxColour(100,17,255),a2dFILL_CROSSDIAG_HATCH ));
1202 
1203  m_setup->Set_Stroke(7, a2dStroke(wxColour(9,115,64 ),10.0,a2dSTROKE_DOT_DASH));
1204  m_setup->Set_Fill(7, a2dFill(wxColour(0,120,240),a2dFILL_SOLID ));
1205 
1206  m_setup->Set_Stroke(8, a2dStroke(wxColour(109,115,64 ),40.0,a2dSTROKE_DOT_DASH));
1207  m_setup->Set_Fill(8, a2dFill(wxColour(200,120,240),a2dFILL_SOLID ));
1208 
1209  m_setup->Set_Stroke(9, a2dStroke(wxColour(255,0,255),40.0,a2dSTROKE_SOLID));
1210  m_setup->Set_Fill(9, a2dFill(wxColour(0,255,0),a2dFILL_SOLID ));
1211 
1212  m_doc->SetLayerSetup(m_setup);
1213 */
1214 
1215 a2dCanvasGlobal::~a2dCanvasGlobal()
1216 {
1217  delete m_artProvider;
1218 }
1219 
1221 {
1222  bool changed = m_activeDrawingPart != part;
1223  m_activeDrawingPart = part;
1224  if ( changed )
1225  {
1226  //wxLogDebug( "again %p", part );
1227  a2dComEvent changedActiveDrawing( this, sig_changedActiveDrawing );
1228  ProcessEvent( changedActiveDrawing );
1229  }
1230 }
1231 
1232 
1233 //the one and only
1235 
1236 //----------------------------------------------------------------------------
1237 // a2dCanvasModule
1238 //----------------------------------------------------------------------------
1239 
1240 a2dFont* a2dCanvasModule::m_FontMedBold;
1241 a2dFont* a2dCanvasModule::m_FontMed;
1242 a2dFont* a2dCanvasModule::m_FontSmall;
1243 a2dFont* a2dCanvasModule::m_FontMini;
1244 
1245 IMPLEMENT_DYNAMIC_CLASS( a2dCanvasModule, wxModule )
1246 
1248 {
1249  AddDependency( CLASSINFO( a2dFreetypeModule ) );
1250  AddDependency( CLASSINFO( a2dArtBaseModule ) );
1251  AddDependency( CLASSINFO( a2dGeneralModule ) );
1252 }
1253 
1254 bool a2dCanvasModule::OnInit()
1255 {
1256 #if wxUSE_PRINTING_ARCHITECTURE
1257  if( wxThePrintPaperDatabase == NULL )
1258  {
1259  wxThePrintPaperDatabase = new wxPrintPaperDatabase;
1260  wxThePrintPaperDatabase->CreateDatabase();
1261  m_wxThePrintPaperDatabase = wxThePrintPaperDatabase;
1262  }
1263 #endif
1264 
1265  wxPrintFactory::SetPrintFactory( new a2dPrintFactory() );
1266 
1268 
1270 
1271  a2dCanvasGlobals = new a2dCanvasGlobal();
1272  a2dCanvasGlobals->SetHabitat( new a2dHabitat() );
1273 
1274  a2dPinClass::Any->SetConnectionGenerator( a2dCanvasGlobals->GetHabitat()->GetConnectionGenerator() );
1275  a2dPinClass::Standard->SetConnectionGenerator( a2dCanvasGlobals->GetHabitat()->GetConnectionGenerator() );
1276 
1277  wxNullLayerInfo = new a2dLayerInfo( 0, wxT( "not defined" ) );
1278 
1279  a2dCanvasGlobals->GetHabitat()->GetConnectionGenerator()->SetAnyPinClass( a2dPinClass::Standard );
1280 
1281  m_FontMedBold = new a2dFont( 1, wxSWISS, wxNORMAL, wxBOLD);
1282  m_FontMed = new a2dFont( 1, wxSWISS);
1283  m_FontSmall = new a2dFont( 0.8, wxSWISS);
1284  m_FontMini = new a2dFont( 0.5, wxSWISS);
1285 
1286  return true;
1287 }
1288 
1289 void a2dCanvasModule::OnExit()
1290 {
1291 #if wxUSE_PRINTING_ARCHITECTURE
1292  if( m_wxThePrintPaperDatabase && m_wxThePrintPaperDatabase != wxThePrintPaperDatabase )
1293  delete m_wxThePrintPaperDatabase;
1294  m_wxThePrintPaperDatabase = NULL;
1295 #endif
1296 
1297  // order in OnInit() or in wxWidgets in wxModule::CleanUpModules() muset be reverse order for OnExit()
1298  // First exit for a highest level module and restore a low level command processor.
1300 
1301  delete wxNullCanvasObjectList;
1302 
1303  delete a2dCanvasGlobals;
1304 
1305 //This is in artglob.cpp a2dGlobals = NULL;
1306  a2dCanvasGlobals = NULL;
1307 
1308  delete m_FontMedBold;
1309  delete m_FontMed;
1310  delete m_FontSmall;
1311  delete m_FontMini;
1312 }
1313 
1314 const a2dCanvasObjectFlagsMask a2dCanvasOFlags::NON = 0x00000000; /*!< No flags */
1315 const a2dCanvasObjectFlagsMask a2dCanvasOFlags::SELECTED = 0x00000001; /*!< object is selected */
1316 const a2dCanvasObjectFlagsMask a2dCanvasOFlags::SELECTABLE = 0x00000002; /*!< can select object */
1317 const a2dCanvasObjectFlagsMask a2dCanvasOFlags::HasSelectedObjectsBelow = 0x00000004; /*!< selected objects detected below */
1318 const a2dCanvasObjectFlagsMask a2dCanvasOFlags::SubEdit = 0x00000008; /*!< allow subedit of children within this object */
1319 const a2dCanvasObjectFlagsMask a2dCanvasOFlags::SubEditAsChild = 0x00000010; /*!< allow subedit on this object when child of other object */
1320 const a2dCanvasObjectFlagsMask a2dCanvasOFlags::VISIBLE = 0x00000020; /*!< is the object visible (overruled by parent object in some cases during rendering */
1321 const a2dCanvasObjectFlagsMask a2dCanvasOFlags::DRAGGABLE = 0x00000040; /*!< can be dragged */
1322 const a2dCanvasObjectFlagsMask a2dCanvasOFlags::SHOWSHADOW = 0x00000080; /*!< show shadow object if true and shadow property is available */
1323 const a2dCanvasObjectFlagsMask a2dCanvasOFlags::FILLED = 0x00000100; /*!< use fill to fill if set */
1324 const a2dCanvasObjectFlagsMask a2dCanvasOFlags::A = 0x00000200; /*!< group A flag (e.g boolean operations) */
1325 const a2dCanvasObjectFlagsMask a2dCanvasOFlags::B = 0x00000400; /*!< group B flag (e.g boolean operations) */
1326 const a2dCanvasObjectFlagsMask a2dCanvasOFlags::generatePins = 0x00000800; /*!< generate Pins when asked for */
1327 const a2dCanvasObjectFlagsMask a2dCanvasOFlags::BIN = 0x00001000; /*!< general flag ( used for temporarely marking object ) */
1328 const a2dCanvasObjectFlagsMask a2dCanvasOFlags::BIN2 = 0x00002000; /*!< general flag ( used for temporarely marking object ) */
1329 const a2dCanvasObjectFlagsMask a2dCanvasOFlags::PENDING = 0x00004000; /*!< set when a2dCanvasObject needs an update (redraw) */
1330 const a2dCanvasObjectFlagsMask a2dCanvasOFlags::SNAP = 0x00008000; /*!< snapping of editable object or when moving */
1331 const a2dCanvasObjectFlagsMask a2dCanvasOFlags::PUSHIN = 0x00010000; /*!< push into allowed */
1332 const a2dCanvasObjectFlagsMask a2dCanvasOFlags::PRERENDERASCHILD = 0x00020000; /*!< as child this object will be rendered before the parent object itself when true (default) */
1333 const a2dCanvasObjectFlagsMask a2dCanvasOFlags::VISIBLECHILDS = 0x00040000; /*!< child objects are visible or not */
1334 const a2dCanvasObjectFlagsMask a2dCanvasOFlags::EDITABLE = 0x00080000; /*!< object can be edited */
1335 const a2dCanvasObjectFlagsMask a2dCanvasOFlags::ChildrenOnSameLayer = 0x00100000; /*!< child objects are rendered when the object is rendered itself.
1336  The effect is that the children will appear on the same layer as the object. */
1337 const a2dCanvasObjectFlagsMask a2dCanvasOFlags::DoConnect = 0x00200000; /*!< in case of pins on the object is it currely allowed for other object to connect to it? */
1338 const a2dCanvasObjectFlagsMask a2dCanvasOFlags::IsOnCorridorPath = 0x00400000; /*!< this object is on the corridor path to a captured object */
1339 const a2dCanvasObjectFlagsMask a2dCanvasOFlags::HasPins = 0x00800000; /*!< true if this object does have a2dPin's as children */
1340 const a2dCanvasObjectFlagsMask a2dCanvasOFlags::Editing = 0x01000000; /*!< true if the object is currently being edited */
1341 const a2dCanvasObjectFlagsMask a2dCanvasOFlags::EditingCopy = 0x02000000; /*!< true if the object needs is the editcopy of an object that is edited. */
1342 const a2dCanvasObjectFlagsMask a2dCanvasOFlags::IsProperty = 0x04000000; /*!< True if object is a property show object */
1343 const a2dCanvasObjectFlagsMask a2dCanvasOFlags::MouseInObject = 0x08000000; /*!< true is mouse is currently within object */
1344 const a2dCanvasObjectFlagsMask a2dCanvasOFlags::HighLight = 0x10000000; /*!< true is object is highlighted */
1345 const a2dCanvasObjectFlagsMask a2dCanvasOFlags::AlgoSkip = 0x20000000; /*!< skip object in walker algorithms */
1346 const a2dCanvasObjectFlagsMask a2dCanvasOFlags::ignoreSetpending = 0x40000000; /*!< ignore Setpending calls on a2dCanvasObject */
1347 const a2dCanvasObjectFlagsMask a2dCanvasOFlags::HasToolObjectsBelow = wxULL(0x080000000); /*!< special tool object detected below */
1348 const a2dCanvasObjectFlagsMask a2dCanvasOFlags::ChildOnlyTranslate = wxULL(0x100000000); /*!< do not tranfrom only translate. */
1349 const a2dCanvasObjectFlagsMask a2dCanvasOFlags::ignoreLayer = wxULL(0x200000000); /*!< ignore Layer id, just render always*/
1350 const a2dCanvasObjectFlagsMask a2dCanvasOFlags::SNAP_TO = wxULL(0x400000000); /*!< snapping of objects to this*/
1351 const a2dCanvasObjectFlagsMask a2dCanvasOFlags::normalized = wxULL(0x800000000); /*!< normalized object*/
1352 const a2dCanvasObjectFlagsMask a2dCanvasOFlags::NoRenderCanvasObject = wxULL(0x1000000000); /*!< no render if no children*/
1353 const a2dCanvasObjectFlagsMask a2dCanvasOFlags::FixedStyle = wxULL(0x2000000000); /*!< style on object fixed*/
1354 const a2dCanvasObjectFlagsMask a2dCanvasOFlags::SELECTED2 = wxULL(0x4000000000); /*!< object is selected2 */
1355 const a2dCanvasObjectFlagsMask a2dCanvasOFlags::ALL = wxULL(0xFFFFFFFFFFFFFFFF); /*!< To set all flags at once */
1356 
1357 a2dCanvasOFlags::a2dCanvasOFlags( a2dCanvasObjectFlagsMask which )
1358 {
1359  SetFlags( which );
1360 }
1361 
1362 void a2dCanvasOFlags::SetSpecificFlags( bool setOrClear, a2dCanvasObjectFlagsMask which )
1363 {
1364  if ( which == a2dCanvasOFlags::ALL )
1365  {
1366  m_selected = setOrClear;
1367  m_selected2 = setOrClear;
1368  m_selectable = setOrClear;
1369  m_HasSelectedObjectsBelow = setOrClear;
1370  m_subEdit = setOrClear;
1371  m_subEditAsChild = setOrClear;
1372  m_visible = setOrClear;
1373  m_draggable = setOrClear;
1374  m_showshadow = setOrClear;
1375  m_filled = setOrClear;
1376  m_a = setOrClear;
1377  m_b = setOrClear;
1378  m_generatePins = setOrClear;
1379  m_bin = setOrClear;
1380  m_bin2 = setOrClear;
1381  m_pending = setOrClear;
1382  m_snap = setOrClear;
1383  m_snap_to = setOrClear;
1384  m_pushin = setOrClear;
1385  m_prerenderaschild = setOrClear;
1386  m_visiblechilds = setOrClear;
1387  m_editable = setOrClear;
1388  m_childrenOnSameLayer = setOrClear;
1389  m_doConnect = setOrClear;
1390  m_isOnCorridorPath = setOrClear;
1391  m_hasPins = setOrClear;
1392  m_editing = setOrClear;
1393  m_IsProperty = setOrClear;
1394  m_MouseInObject =
1395  m_HighLight = setOrClear;
1396  m_AlgoSkip = setOrClear;
1397  m_editingCopy = setOrClear;
1398  m_ignoreSetpending = setOrClear;
1399  m_template = setOrClear;
1400  m_external = setOrClear;
1401  m_resizeToChilds = setOrClear;
1402  m_normalized = setOrClear;
1403  }
1404  else if( which == a2dCanvasOFlags::PENDING )
1405  m_pending = setOrClear;
1406  else
1407  {
1408  if ( 0 < ( which & a2dCanvasOFlags::SELECTABLE ) ) m_selectable = setOrClear;
1409  if ( 0 < ( which & a2dCanvasOFlags::SELECTED ) ) m_selected = setOrClear;
1410  if ( 0 < ( which & a2dCanvasOFlags::SELECTED2 ) ) m_selected2 = setOrClear;
1411  if ( 0 < ( which & a2dCanvasOFlags::HasSelectedObjectsBelow ) ) m_HasSelectedObjectsBelow = setOrClear;
1412  if ( 0 < ( which & a2dCanvasOFlags::SubEdit ) ) m_subEdit = setOrClear;
1413  if ( 0 < ( which & a2dCanvasOFlags::SubEditAsChild ) ) m_subEditAsChild = setOrClear;
1414  if ( 0 < ( which & a2dCanvasOFlags::VISIBLE ) ) m_visible = setOrClear;
1415  if ( 0 < ( which & a2dCanvasOFlags::DRAGGABLE ) ) m_draggable = setOrClear;
1416  if ( 0 < ( which & a2dCanvasOFlags::SHOWSHADOW ) ) m_showshadow = setOrClear;
1417  if ( 0 < ( which & a2dCanvasOFlags::FILLED ) ) m_filled = setOrClear;
1418  if ( 0 < ( which & a2dCanvasOFlags::A ) ) m_a = setOrClear;
1419  if ( 0 < ( which & a2dCanvasOFlags::B ) ) m_b = setOrClear;
1420  if ( 0 < ( which & a2dCanvasOFlags::generatePins ) ) m_generatePins = setOrClear;
1421  if ( 0 < ( which & a2dCanvasOFlags::BIN ) ) m_bin = setOrClear;
1422  if ( 0 < ( which & a2dCanvasOFlags::BIN2 ) ) m_bin2 = setOrClear;
1423  if ( 0 < ( which & a2dCanvasOFlags::PENDING ) ) m_pending = setOrClear;
1424  if ( 0 < ( which & a2dCanvasOFlags::SNAP ) ) m_snap = setOrClear;
1425  if ( 0 < ( which & a2dCanvasOFlags::SNAP_TO ) ) m_snap_to = setOrClear;
1426  if ( 0 < ( which & a2dCanvasOFlags::PUSHIN ) ) m_pushin = setOrClear;
1427  if ( 0 < ( which & a2dCanvasOFlags::PRERENDERASCHILD ) ) m_prerenderaschild = setOrClear;
1428  if ( 0 < ( which & a2dCanvasOFlags::VISIBLECHILDS ) ) m_visiblechilds = setOrClear;
1429  if ( 0 < ( which & a2dCanvasOFlags::EDITABLE ) ) m_editable = setOrClear;
1430  if ( 0 < ( which & a2dCanvasOFlags::FixedStyle ) ) m_fixedStyle = setOrClear;
1431  if ( 0 < ( which & a2dCanvasOFlags::ChildrenOnSameLayer ) ) m_childrenOnSameLayer = setOrClear;
1432  if ( 0 < ( which & a2dCanvasOFlags::DoConnect ) ) m_doConnect = setOrClear;
1433  if ( 0 < ( which & a2dCanvasOFlags::IsOnCorridorPath ) ) m_isOnCorridorPath = setOrClear;
1434  if ( 0 < ( which & a2dCanvasOFlags::HasPins ) ) m_hasPins = setOrClear;
1435  if ( 0 < ( which & a2dCanvasOFlags::Editing ) ) m_editing = setOrClear;
1436  if ( 0 < ( which & a2dCanvasOFlags::EditingCopy ) ) m_editingCopy = setOrClear;
1437  if ( 0 < ( which & a2dCanvasOFlags::IsProperty ) ) m_IsProperty = setOrClear;
1438  if ( 0 < ( which & a2dCanvasOFlags::MouseInObject ) ) m_MouseInObject = setOrClear;
1439  if ( 0 < ( which & a2dCanvasOFlags::HighLight ) ) m_HighLight = setOrClear;
1440  if ( 0 < ( which & a2dCanvasOFlags::AlgoSkip ) ) m_AlgoSkip = setOrClear;
1441  if ( 0 < ( which & a2dCanvasOFlags::ignoreSetpending ) ) m_ignoreSetpending = setOrClear;
1442  if ( 0 < ( which & a2dCanvasOFlags::normalized ) ) m_normalized = setOrClear;
1443  }
1444 }
1445 
1446 void a2dCanvasOFlags::SetFlags( a2dCanvasObjectFlagsMask which )
1447 {
1448  if ( which == a2dCanvasOFlags::ALL )
1449  {
1450  m_selected = true;
1451  m_selected2 = true;
1452  m_selectable = true;
1454  m_subEdit = true;
1455  m_subEditAsChild = true;
1456  m_visible = true;
1457  m_draggable = true;
1458  m_showshadow = true;
1459  m_filled = true;
1460  m_a = true;
1461  m_b = true;
1462  m_generatePins = true;
1463  m_bin = true;
1464  m_bin2 = true;
1465  m_pending = true;
1466  m_snap = true;
1467  m_snap_to = true;
1468  m_pushin = true;
1469  m_prerenderaschild = true;
1470  m_visiblechilds = true;
1471  m_editable = true;
1472  m_fixedStyle = true;
1473  m_childrenOnSameLayer = true;
1474  m_doConnect = true;
1475  m_isOnCorridorPath = true;
1476  m_hasPins = true;
1477  m_editing = true;
1478  m_editingCopy = true;
1479  m_IsProperty = true;
1480  m_MouseInObject = true;
1481  m_HighLight = true;
1482  m_AlgoSkip = true;
1483  m_ignoreSetpending = true;
1484  m_template = true;
1485  m_external = true;
1486  m_resizeToChilds = true;
1487  m_normalized = true;
1488  m_NoRenderCanvasObject = true;
1489  }
1490  else
1491  {
1492  m_selectable = 0 < ( which & a2dCanvasOFlags::SELECTABLE );
1493  m_selected = 0 < ( which & a2dCanvasOFlags::SELECTED );
1494  m_selected2 = 0 < ( which & a2dCanvasOFlags::SELECTED2 );
1496  m_subEdit = 0 < ( which & a2dCanvasOFlags::SubEdit );
1498  m_visible = 0 < ( which & a2dCanvasOFlags::VISIBLE );
1499  m_draggable = 0 < ( which & a2dCanvasOFlags::DRAGGABLE ) ;
1500  m_showshadow = 0 < ( which & a2dCanvasOFlags::SHOWSHADOW );
1501  m_filled = 0 < ( which & a2dCanvasOFlags::FILLED );
1502  m_a = 0 < ( which & a2dCanvasOFlags::A );
1503  m_b = 0 < ( which & a2dCanvasOFlags::B );
1505  m_bin = 0 < ( which & a2dCanvasOFlags::BIN );
1506  m_bin2 = 0 < ( which & a2dCanvasOFlags::BIN2 );
1507  m_pending = 0 < ( which & a2dCanvasOFlags::PENDING );
1508  m_snap = 0 < ( which & a2dCanvasOFlags::SNAP );
1509  m_snap_to = 0 < ( which & a2dCanvasOFlags::SNAP_TO );
1510  m_pushin = 0 < ( which & a2dCanvasOFlags::PUSHIN );
1513  m_editable = 0 < ( which & a2dCanvasOFlags::EDITABLE ) ;
1514  m_fixedStyle = 0 < ( which & a2dCanvasOFlags::FixedStyle ) ;
1516  m_doConnect = 0 < ( which & a2dCanvasOFlags::DoConnect );
1518  m_hasPins = 0 < ( which & a2dCanvasOFlags::HasPins );
1519  m_editing = 0 < ( which & a2dCanvasOFlags::Editing );
1520  m_editingCopy = 0 < ( which & a2dCanvasOFlags::EditingCopy );
1521  m_IsProperty = 0 < ( which & a2dCanvasOFlags::IsProperty );
1522  m_MouseInObject = 0 < ( which & a2dCanvasOFlags::MouseInObject );
1523  m_HighLight = 0 < ( which & a2dCanvasOFlags::HighLight );
1524  m_AlgoSkip = 0 < ( which & a2dCanvasOFlags::AlgoSkip );
1526  m_ChildOnlyTranslate = 0 < ( which & ChildOnlyTranslate );
1527  m_ignoreLayer = 0 < ( which & ignoreLayer );
1528  m_normalized = 0 < ( which & a2dCanvasOFlags::normalized );
1530  }
1531 }
1532 
1533 bool a2dCanvasOFlags::GetFlag( a2dCanvasObjectFlagsMask which ) const
1534 {
1535  switch ( which )
1536  {
1537  case a2dCanvasOFlags::SELECTED: return m_selected;
1538  case a2dCanvasOFlags::SELECTED2: return m_selected2;
1539  case a2dCanvasOFlags::SELECTABLE: return m_selectable;
1540  case a2dCanvasOFlags::HasSelectedObjectsBelow: return m_HasSelectedObjectsBelow;
1541  case a2dCanvasOFlags::SubEdit: return m_subEdit;
1542  case a2dCanvasOFlags::SubEditAsChild: return m_subEditAsChild;
1543  case a2dCanvasOFlags::VISIBLE: return m_visible;
1544  case a2dCanvasOFlags::DRAGGABLE: return m_draggable;
1545  case a2dCanvasOFlags::SHOWSHADOW: return m_showshadow;
1546  case a2dCanvasOFlags::FILLED: return m_filled;
1547  case a2dCanvasOFlags::A: return m_a;
1548  case a2dCanvasOFlags::B: return m_b;
1549  case a2dCanvasOFlags::generatePins: return m_generatePins;
1550  case a2dCanvasOFlags::BIN: return m_bin;
1551  case a2dCanvasOFlags::BIN2: return m_bin2;
1552  case a2dCanvasOFlags::PENDING: return m_pending;
1553  case a2dCanvasOFlags::SNAP: return m_snap;
1554  case a2dCanvasOFlags::SNAP_TO: return m_snap_to;
1555  case a2dCanvasOFlags::PUSHIN: return m_pushin;
1556  case a2dCanvasOFlags::PRERENDERASCHILD: return m_prerenderaschild;
1557  case a2dCanvasOFlags::VISIBLECHILDS: return m_visiblechilds;
1558  case a2dCanvasOFlags::EDITABLE: return m_editable;
1559  case a2dCanvasOFlags::FixedStyle: return m_fixedStyle;
1560  case a2dCanvasOFlags::ChildrenOnSameLayer: return m_childrenOnSameLayer;
1561  case a2dCanvasOFlags::DoConnect: return m_doConnect;
1562  case a2dCanvasOFlags::IsOnCorridorPath: return m_isOnCorridorPath;
1563  case a2dCanvasOFlags::HasPins: return m_hasPins;
1564  case a2dCanvasOFlags::Editing: return m_editing;
1565  case a2dCanvasOFlags::EditingCopy: return m_editingCopy;
1566  case a2dCanvasOFlags::IsProperty: return m_IsProperty;
1567  case a2dCanvasOFlags::MouseInObject: return m_MouseInObject;
1568  case a2dCanvasOFlags::HighLight: return m_HighLight;
1569  case a2dCanvasOFlags::AlgoSkip: return m_AlgoSkip;
1570  case a2dCanvasOFlags::ignoreSetpending: return m_ignoreSetpending;
1571  case a2dCanvasOFlags::normalized: return m_normalized;
1572  case a2dCanvasOFlags::NoRenderCanvasObject: return m_NoRenderCanvasObject;
1573  default:
1574  wxFAIL_MSG( wxT( "This Flag not implemented" ) );
1575  return false;
1576  }
1577 }
1578 
1579 a2dCanvasObjectFlagsMask a2dCanvasOFlags::GetFlags() const
1580 {
1582 
1583  if ( m_selected ) oflags = oflags | a2dCanvasOFlags::SELECTED;
1584  if ( m_selected2 ) oflags = oflags | a2dCanvasOFlags::SELECTED2;
1585  if ( m_selectable ) oflags = oflags | a2dCanvasOFlags::SELECTABLE;
1587  if ( m_subEdit ) oflags = oflags | a2dCanvasOFlags::SubEdit;
1588  if ( m_subEditAsChild ) oflags = oflags | a2dCanvasOFlags::SubEditAsChild;
1589  if ( m_visible ) oflags = oflags | a2dCanvasOFlags::VISIBLE;
1590  if ( m_draggable ) oflags = oflags | a2dCanvasOFlags::DRAGGABLE;
1591  if ( m_showshadow ) oflags = oflags | a2dCanvasOFlags::SHOWSHADOW;
1592  if ( m_filled ) oflags = oflags | a2dCanvasOFlags::FILLED;
1593  if ( m_a ) oflags = oflags | a2dCanvasOFlags::A;
1594  if ( m_b ) oflags = oflags | a2dCanvasOFlags::B;
1595  if ( m_generatePins ) oflags = oflags | a2dCanvasOFlags::generatePins;
1596  if ( m_bin ) oflags = oflags | a2dCanvasOFlags::BIN;
1597  if ( m_bin2 ) oflags = oflags | a2dCanvasOFlags::BIN2;
1598  if ( m_pending ) oflags = oflags | a2dCanvasOFlags::PENDING;
1599  if ( m_snap ) oflags = oflags | a2dCanvasOFlags::SNAP;
1600  if ( m_snap_to ) oflags = oflags | a2dCanvasOFlags::SNAP_TO;
1601  if ( m_pushin ) oflags = oflags | a2dCanvasOFlags::PUSHIN;
1602  if ( m_prerenderaschild ) oflags = oflags | a2dCanvasOFlags::PRERENDERASCHILD;
1603  if ( m_visiblechilds ) oflags = oflags | a2dCanvasOFlags::VISIBLECHILDS;
1604  if ( m_editable ) oflags = oflags | a2dCanvasOFlags::EDITABLE;
1605  if ( m_fixedStyle ) oflags = oflags | a2dCanvasOFlags::FixedStyle;
1607  if ( m_doConnect ) oflags = oflags | a2dCanvasOFlags::DoConnect;
1608  if ( m_isOnCorridorPath ) oflags = oflags | a2dCanvasOFlags::IsOnCorridorPath;
1609  if ( m_hasPins ) oflags = oflags | a2dCanvasOFlags::HasPins;
1610  if ( m_editing ) oflags = oflags | a2dCanvasOFlags::Editing;
1611  if ( m_editingCopy ) oflags = oflags | a2dCanvasOFlags::EditingCopy;
1612  if ( m_IsProperty ) oflags = oflags | a2dCanvasOFlags::IsProperty;
1613  if ( m_MouseInObject ) oflags = oflags | a2dCanvasOFlags::MouseInObject;
1614  if ( m_HighLight ) oflags = oflags | a2dCanvasOFlags::HighLight;
1615  if ( m_AlgoSkip ) oflags = oflags | a2dCanvasOFlags::AlgoSkip;
1616  if ( m_ignoreSetpending ) oflags = oflags | a2dCanvasOFlags::ignoreSetpending;
1617  //if ( m_template ) oflags = oflags | a2dCanvasOFlags::?;
1618  //if ( m_external ) oflags = oflags | a2dCanvasOFlags::?;
1619  //if ( m_resizeToChilds ) oflags = oflags | a2dCanvasOFlags::?;
1620  if ( m_normalized ) oflags = oflags | a2dCanvasOFlags::normalized;
1622 
1623  return oflags;
1624 }
1625 
1626 bool a2dCanvasOFlags::CheckMask( a2dCanvasObjectFlagsMask mask ) const
1627 {
1628  if ( mask == a2dCanvasOFlags::NON )
1629  return true;
1630  if ( mask == a2dCanvasOFlags::ALL )
1631  return true;
1632 
1633  if ( mask == a2dCanvasOFlags::VISIBLE && m_visible ) return true;
1634 
1635  //check the bits in the mask, is set, the corresponding bit in m_flags must be true.
1636  if ( 0 < ( mask & a2dCanvasOFlags::VISIBLE ) && !m_visible ) return false;
1637  if ( 0 < ( mask & a2dCanvasOFlags::SELECTABLE ) && !m_selectable ) return false;
1638  if ( 0 < ( mask & a2dCanvasOFlags::SELECTED ) && !m_selected ) return false;
1639  if ( 0 < ( mask & a2dCanvasOFlags::SELECTED2 ) && !m_selected2 ) return false;
1640  if ( 0 < ( mask & a2dCanvasOFlags::HasSelectedObjectsBelow ) && !m_HasSelectedObjectsBelow ) return false;
1641  if ( 0 < ( mask & a2dCanvasOFlags::SubEdit ) && !m_subEdit ) return false;
1642  if ( 0 < ( mask & a2dCanvasOFlags::SubEditAsChild ) && !m_subEditAsChild ) return false;
1643  if ( 0 < ( mask & a2dCanvasOFlags::DRAGGABLE ) && !m_draggable ) return false;
1644  if ( 0 < ( mask & a2dCanvasOFlags::SHOWSHADOW ) && !m_showshadow ) return false;
1645  if ( 0 < ( mask & a2dCanvasOFlags::FILLED ) && !m_filled ) return false;
1646  if ( 0 < ( mask & a2dCanvasOFlags::A ) && !m_a ) return false;
1647  if ( 0 < ( mask & a2dCanvasOFlags::B ) && !m_b ) return false;
1648  if ( 0 < ( mask & a2dCanvasOFlags::generatePins ) && !m_generatePins ) return false;
1649  if ( 0 < ( mask & a2dCanvasOFlags::BIN ) && !m_bin ) return false;
1650  if ( 0 < ( mask & a2dCanvasOFlags::BIN2 ) && !m_bin2 ) return false;
1651  if ( 0 < ( mask & a2dCanvasOFlags::PENDING ) && !m_pending ) return false;
1652  if ( 0 < ( mask & a2dCanvasOFlags::SNAP ) && !m_snap ) return false;
1653  if ( 0 < ( mask & a2dCanvasOFlags::SNAP_TO ) && !m_snap_to ) return false;
1654  if ( 0 < ( mask & a2dCanvasOFlags::PUSHIN ) && !m_pushin ) return false;
1655  if ( 0 < ( mask & a2dCanvasOFlags::PRERENDERASCHILD ) && !m_prerenderaschild ) return false;
1656  if ( 0 < ( mask & a2dCanvasOFlags::VISIBLECHILDS ) && !m_visiblechilds ) return false;
1657  if ( 0 < ( mask & a2dCanvasOFlags::EDITABLE ) && !m_editable ) return false;
1658  if ( 0 < ( mask & a2dCanvasOFlags::FixedStyle ) && !m_fixedStyle ) return false;
1659  if ( 0 < ( mask & a2dCanvasOFlags::ChildrenOnSameLayer ) && !m_childrenOnSameLayer ) return false;
1660  if ( 0 < ( mask & a2dCanvasOFlags::DoConnect ) && !m_doConnect ) return false;
1661  if ( 0 < ( mask & a2dCanvasOFlags::IsOnCorridorPath ) && !m_isOnCorridorPath ) return false;
1662  if ( 0 < ( mask & a2dCanvasOFlags::HasPins ) && !m_hasPins ) return false;
1663  if ( 0 < ( mask & a2dCanvasOFlags::Editing ) && !m_editing ) return false;
1664  if ( 0 < ( mask & a2dCanvasOFlags::EditingCopy ) && !m_editingCopy ) return false;
1665  if ( 0 < ( mask & a2dCanvasOFlags::IsProperty ) && !m_IsProperty ) return false;
1666  if ( 0 < ( mask & a2dCanvasOFlags::MouseInObject ) && !m_MouseInObject ) return false;
1667  if ( 0 < ( mask & a2dCanvasOFlags::HighLight ) && !m_HighLight ) return false;
1668  if ( 0 < ( mask & a2dCanvasOFlags::AlgoSkip ) && !m_AlgoSkip ) return false;
1669  if ( 0 < ( mask & a2dCanvasOFlags::ignoreSetpending ) && !m_ignoreSetpending ) return false;
1670  if ( 0 < ( mask & a2dCanvasOFlags::normalized ) && !m_normalized ) return false;
1671  if ( 0 < ( mask & a2dCanvasOFlags::NoRenderCanvasObject ) && !m_NoRenderCanvasObject ) return false;
1672 
1673  return true;
1674 }
1675 
1676 
static const a2dCanvasObjectFlagsMask SELECTED2
Definition: candefs.h:181
a2dStroke GetTextStroke() const
get the current text stroke
Definition: canglob.cpp:1025
Display Part of a a2dDrawing, in which a2dCanvasObjects are shown.
Definition: drawer.h:470
double PHYSUNITS()
how many meters is 1 unit in the database
Definition: canglob.cpp:779
void SetContourWidth(const a2dDoMu &currentContourWidth)
set the Contour width of shapes
Definition: canglob.cpp:1064
a2dDoMu m_currentContourWidth
current contour width e.g for polyline with width.
Definition: canglob.h:1145
void SetConnectionGenerator(a2dConnectionGenerator *connectionGenerator)
Set class for generating new connection objects between object and pins.
Definition: canpin.h:720
a2dPATH_END_TYPE
defines the way a polyline with a contour width is ended.
Definition: polyver.h:31
static const a2dCanvasObjectFlagsMask BIN
Definition: candefs.h:192
a2dDoMu m_AberPolyToArc
Polygon/polyline to Arc Maximum abberation.
Definition: canglob.h:1124
A2DGENERALDLLEXP long wxGenNewId()
This function is like wxNewId, but it has its own ID set.
Definition: gen.cpp:92
#define PINWIDTH
default a2dPin width in pixels
Definition: canglob.cpp:43
all basic primitives derived from a2dCanvasObject
#define HANDLEWIDTH
default a2dHandle width in pixels
Definition: canglob.cpp:45
Base class for all types of strokes, understood by a2dDrawer2D classes.
Definition: stylebase.h:378
void SetSelect2Fill(const a2dFill &fill)
Set Fill to use for Selected2 a2dCanvasObject&#39;s.
Definition: canglob.cpp:909
double m_coordinateepsilon
Definition: canglob.h:1064
a2dPin * GetPin()
get default pin for graph like structure
Definition: canglob.cpp:692
void SetHandle(a2dHandle *newhandle)
set default handle for editing
Definition: canglob.cpp:735
a2dDoMu m_CORRECTIONABER
boolean operation setting
Definition: canglob.h:1104
static const a2dSignal sig_changedFill
when active drawing is set, this signal is send to the drawing.
Definition: canglob.h:1187
double m_hitmargin_world
hit marging in world units.
Definition: canglob.h:1058
a2dHandle is used inside editing versions of a certain objects.
Definition: canpin.h:30
mouse event sent from a2dCanvasObject to itself
Definition: canglob.h:223
a2dCanvasObjectPtr m_currentEnd
current endobject for lines and polylines
Definition: canglob.h:1182
void SetTextStroke(const a2dStroke &stroke)
used for new text objects etc. to set the stroke
Definition: canglob.cpp:979
static const a2dCanvasObjectFlagsMask HasPins
Definition: candefs.h:205
static void SetAberPolyToArc(double aber)
conversion from polygon/polyline into arc in database units
Definition: artglob.h:158
#define wxDEFAULTMAXLAYER
maximum number of layers allowed
Definition: candefs.h:62
void SetTextFill(const a2dFill &fill)
used for new text objects etc. to set the fill
Definition: canglob.cpp:994
void SetLayer(wxUint16 layer, bool setStyleOfLayer=false)
Definition: canglob.cpp:1076
bool m_selected2
object is selected2
Definition: candefs.h:238
bool m_LinkHoles
boolean operation setting
Definition: canglob.h:1118
wxString FindValidPath(const wxString &filename, bool reportError=true)
Find the first full path for which the file exists.
Definition: gen.cpp:4486
bool m_editing
true if the object is currently being edited
Definition: candefs.h:301
a2dDoMu m_SMOOTHABER
boolean operation setting
Definition: canglob.h:1108
static const a2dCanvasObjectFlagsMask HasToolObjectsBelow
Definition: candefs.h:213
void SetDefaultStroke(const a2dStroke &stroke)
Set Stroke to use for non layered a2dCanvasObject&#39;s.
Definition: canglob.cpp:924
a2dStroke m_SelectStroke
Stroke to use for selected a2dCanvasObject&#39;s.
Definition: canglob.h:1018
bool m_WINDINGRULE
boolean operation setting
Definition: canglob.h:1112
static const a2dCanvasObjectFlagsMask BIN2
Definition: candefs.h:193
void SetAnyPinClass(a2dPinClass *pinClass)
see GetAnyPinClass()
Definition: connectgen.h:242
a2dFill m_SelectFill
Fill to use for selected a2dCanvasObject&#39;s.
Definition: canglob.h:1021
a2dPin is used in a2dCanvasObject to add pins to it.
Definition: canpin.h:233
a2dFill m_HighLightFill
Fill to use for Highlighted a2dCanvasObject&#39;s.
Definition: canglob.h:1015
static void InitializeStockPinClasses()
called to initialize static stockobjects
Definition: canpin.cpp:478
double m_ROUNDFACTOR
boolean operation setting
Definition: canglob.h:1114
void SetPin(a2dPin *newpin)
set default pin for graph like structure
Definition: canglob.cpp:687
bool m_normalized
true if the object is defined in normalized coordinates
Definition: candefs.h:360
a2dCanvasObjectPtr m_currentBegin
current beginobject for lines and polylines
Definition: canglob.h:1179
a2dObject * Clone(CloneOptions options, a2dRefMap *refs=NULL) const
create an exact copy of this property
Definition: gen.cpp:1199
bool m_pending
set when a2dCanvasObject needs an update (redraw).
Definition: candefs.h:277
contains global settings for the a2dCanvas library
Definition: canglob.h:1217
static const a2dCanvasObjectFlagsMask MouseInObject
Definition: candefs.h:209
static const a2dCanvasObjectFlagsMask PUSHIN
Definition: candefs.h:197
double m_lastX
holds last mouse X position in world coordinates, as set by tools.
Definition: canglob.h:1157
wxUint16 m_hitmargin_device
hit marging in pixels.
Definition: canglob.h:1053
void SetGridX(const a2dDoMu &gridX)
grid setting X
Definition: canglob.cpp:1095
a2dFill & GetHighLightFill()
Get Fill to use for Highlighted a2dCanvasObject&#39;s.
Definition: canglob.cpp:859
static const a2dCanvasObjectFlagsMask AlgoSkip
Definition: candefs.h:211
Defines a font to be set to a2dDrawer2D or stored in a2dCanvsObject etc.
Definition: stylebase.h:779
a2dDoMu m_AberArcToPoly
Arc to Polygon/polyline Maximum abberation.
Definition: canglob.h:1126
Path searching.
Definition: gen.h:2926
void SetHighLightStroke(const a2dStroke &stroke)
Set Stroke to use for Highlighted a2dCanvasObject&#39;s.
Definition: canglob.cpp:864
void SetStroke(const a2dStroke &stroke)
used for new objects etc. to set the stroke
Definition: canglob.cpp:939
bool m_visiblechilds
child objects are visible or not
Definition: candefs.h:292
a2dGlobal * a2dGlobals
global a2dCanvasGlobal to have easy access to global settings
Definition: artglob.cpp:34
a2dSmrtPtr< a2dText > m_textTemplateObject
object to clone to use as start
Definition: canglob.h:985
double m_DGRID
boolean operation setting
Definition: canglob.h:1102
a2dDoMu m_radiusMax
Polygon/polyline to Arc Maximum radius to test.
Definition: canglob.h:1122
a2dDoMu m_CORRECTIONFACTOR
boolean operation setting
Definition: canglob.h:1106
static const a2dCanvasObjectFlagsMask FILLED
Definition: candefs.h:189
a2dDoMu m_MAXLINEMERGE
boolean operation setting
Definition: canglob.h:1110
bool m_hasPins
true if this object does have a2dPin&#39;s as children
Definition: candefs.h:323
static const a2dCanvasObjectFlagsMask FixedStyle
Definition: candefs.h:219
The base class for all drawable objects in a a2dCanvasDocument.
a2dDoMu m_small
detect samll objects
Definition: canglob.h:1128
static const a2dCanvasObjectFlagsMask generatePins
Definition: candefs.h:216
a2dFont GetTextFont() const
get current font active text font ( like used in text tool ).
Definition: canglob.cpp:1039
void SetPinCannotConnect(a2dPin *newpin)
Definition: canglob.cpp:703
double m_objectGridSize
used for objects which depend in size on this grid
Definition: canglob.h:1075
a2dPATH_END_TYPE m_pathtype
when m_contourwidth != 0 what is the end of the line/polyline.
Definition: canglob.h:1148
a2dCanvasObject is the base class for Canvas Objects.
Definition: canobj.h:371
no special flags set
Definition: id.h:161
wxUint16 m_target
target layer in operations
Definition: canglob.h:1088
a2dFill m_DefaultFill
Fill to use for non layered a2dCanvasObject&#39;s.
Definition: canglob.h:1033
a2dStroke & GetSelect2Stroke()
Get Stroke to use for Selected2 a2dCanvasObject&#39;s.
Definition: canglob.cpp:894
double m_currentYscale
end point scaling
Definition: canglob.h:1142
static const a2dCanvasObjectFlagsMask A
Definition: candefs.h:190
bool m_snap_to
snapping of other objects to this when in place
Definition: candefs.h:283
void SetFill(const a2dFill &fill)
used for new objects etc. to set the fill
Definition: canglob.cpp:955
a2dText * GetPropertyText()
default text for displaying properties.
Definition: canglob.cpp:752
initiation module for the wxArt2D library
Definition: artglob.h:76
store and convert number to number with unit and visa versa. e.g. 1.23e-6 =&gt; 1.23 * 1e-6 ...
Definition: artglob.h:208
double m_copymindistance
the minimum distance in world units of a copied object from the original
Definition: canglob.h:1061
bool m_external
GDSII format flag.
Definition: candefs.h:342
bool m_selected
object is selected
Definition: candefs.h:235
a2dDocumentRenderStyle m_SelectDrawStyle
draw style to be used for selected object
Definition: canglob.h:1036
a2dDoMu m_radiusMin
Polygon/polyline to Arc Minimum radius to test.
Definition: canglob.h:1120
bool m_oneLine
used in routing wires to be straight or manhatten
Definition: canglob.h:1070
a2dFont GetFont() const
get font for text
Definition: cantext.h:251
double m_RelativeStartY
The RelativeStart start is used when mesuring using a tool, or from the commandline.
Definition: canglob.h:1165
void SetContourWidthInDataBaseUnits(double width)
set the Contour width of shapes defined in database units
Definition: canglob.cpp:1047
wxUint64 a2dCanvasObjectFlagsMask
mask flags for a2dCanvasObject
Definition: candefs.h:152
bool m_generatePins
generate pins if true
Definition: candefs.h:268
static const a2dCanvasObjectFlagsMask ChildOnlyTranslate
Definition: candefs.h:214
void SetTextFont(const a2dFont &font)
used for new text objects etc. to set the font
Definition: canglob.cpp:1009
double m_currentXscale
begin point scaling
Definition: canglob.h:1139
wxUint16 m_layer
layer to be set for new objects
Definition: canglob.h:1151
static const a2dCanvasObjectFlagsMask PENDING
Definition: candefs.h:194
bool m_b
group B flag (e.g boolean operations)
Definition: candefs.h:265
void SetSelectFill(const a2dFill &fill)
Set Fill to use for Selected a2dCanvasObject&#39;s.
Definition: canglob.cpp:889
void SetHighLightFill(const a2dFill &fill)
Set Fill to use for Highlighted a2dCanvasObject&#39;s.
Definition: canglob.cpp:869
bool m_draggable
can be dragged
Definition: candefs.h:253
bool m_clearTarget
clear target layer before adding results of an operation
Definition: canglob.h:1095
a2dRestrictionEnginePtr m_restrictionEngine
restriction engine to be used usually (if zero don&#39;t restrict)
Definition: canglob.h:1042
static const a2dCanvasObjectFlagsMask SubEditAsChild
Definition: candefs.h:185
static const a2dCanvasObjectFlagsMask normalized
Definition: candefs.h:217
a2dDoMu m_SmoothAber
boolean operation setting
Definition: canglob.h:1116
a2dText is an abstract base class.
Definition: cantext.h:93
a2dCanvasObjectList * wxNullCanvasObjectList
define a NON a2dCanvasObjectList
Definition: objlist.cpp:53
see a2dCanvasObjectMouseEvent
Definition: canglob.h:161
bool m_isOnCorridorPath
This object is on the corridor path to a captured object or to a corridored object.
Definition: candefs.h:320
a2dCanvasObjectEvent(a2dIterC *ic, wxEventType type, a2dCanvasObject *object, double x, double y, int id=0)
constructor
Definition: canglob.cpp:87
static const a2dCanvasObjectFlagsMask HighLight
Definition: candefs.h:210
static const a2dCanvasObjectFlagsMask IsProperty
Definition: candefs.h:208
bool m_selectable
can select object
Definition: candefs.h:241
void SetColour(const wxColour &col)
set colour used for gradient and wxSTROKE_MASK_OPAQUE filling.
Definition: stylebase.cpp:6112
void SetFont(const a2dFont &font, double lineSpaceFactor=0.1)
set font for text
Definition: cantext.cpp:527
bool m_visible
is the object visible (overruled by paranet object in some cases during rendering ...
Definition: candefs.h:250
#define forEachIn(listtype, list)
easy iteration for a2dlist
Definition: a2dlist.h:111
static const a2dSignal sig_changedActiveDrawing
when active drawing is set, this signal is send to the drawing.
Definition: canglob.h:1292
const a2dStroke & GetStroke() const
get the current stroke
Definition: canglob.h:797
bool m_NoRenderCanvasObject
true is the object is a a2dCanvasObject (or derived ) without rendering something if there or now chi...
Definition: candefs.h:351
static void SetAberArcToPoly(double aber)
conversion from arc into lines in database units
Definition: artglob.h:164
a2dHandle * GetHandle()
get default handle for editing
Definition: canglob.cpp:740
static const a2dCanvasObjectFlagsMask SELECTABLE
Definition: candefs.h:182
void SetPinCanConnect(a2dPin *newpin)
Definition: canglob.cpp:719
layer settings for a a2dCanvasDocument Holds layers settings classes
provide cursors etc.
Definition: canglob.h:400
bool m_bin2
general flag ( used for temporarely marking object )
Definition: candefs.h:274
bool m_editable
object can be edited
Definition: candefs.h:295
void SetPending(bool pending)
next to base sets m_indexed false
Definition: layerinf.cpp:545
bool m_spline
spline polygons
Definition: canglob.h:1136
void SetActiveDrawingPart(a2dDrawingPart *part)
get the drawing part that has the focus/is active in a window.
Definition: canglob.cpp:1220
A2DGENERALDLLEXP a2dSmrtPtr< a2dGeneralGlobal > a2dGeneralGlobals
a global pointer to get to global instance of important classes.
Definition: comevt.cpp:1148
void SetTarget(wxUint16 target)
set target layer in operation
Definition: canglob.cpp:1088
general event sent from a2dHandle to its parent a2dCanvasObject
Definition: canglob.h:273
a2dFont m_font
current font set
Definition: canglob.h:1154
Restriction engine for editing restrictions like snapping.
Definition: restrict.h:88
bool m_childrenOnSameLayer
Definition: candefs.h:311
void SetColour(const wxColour &col)
set colour used for gradient and wxSTIPPLE_MASK_OPAQUE filling.
Definition: stylebase.cpp:4988
contains the layer properties for one layer,
Definition: layerinf.h:41
static const a2dCanvasObjectFlagsMask SELECTED
Definition: candefs.h:180
static const a2dCanvasObjectFlagsMask IsOnCorridorPath
Definition: candefs.h:204
static const a2dCanvasObjectFlagsMask EditingCopy
Definition: candefs.h:207
a2dFill & GetDefaultFill()
Get Fill to use for non layered a2dCanvasObject&#39;s.
Definition: canglob.cpp:919
void SetInMapping(wxUint16 layer)
read this layer from the given layer in input files
Definition: layerinf.cpp:391
a2dFill m_Select2Fill
Fill to use for selected2 a2dCanvasObject&#39;s.
Definition: canglob.h:1027
bool m_subEditAsChild
allow subedit on this object when child of other object
Definition: candefs.h:247
bool m_ignoreLayer
when this is set DoRender() is called even if layer of the object is not the layer to be rendered...
Definition: candefs.h:336
a2dPin * GetPinCannotConnect()
represnts the pin styles for pins that cannot connect right now
Definition: canglob.cpp:708
a2dFill & GetSelect2Fill()
Get Fill to use for Selected2 a2dCanvasObject&#39;s.
Definition: canglob.cpp:899
void SetSelectStroke(const a2dStroke &stroke)
Set Stroke to use for Selected a2dCanvasObject&#39;s.
Definition: canglob.cpp:884
const a2dFill * a2dNullFILL
global a2dFill stock object for defining NO filling
static const a2dCanvasObjectFlagsMask Editing
Definition: candefs.h:206
Contains a2dDrawing Class to hold a drawing.
static const a2dCanvasObjectFlagsMask B
Definition: candefs.h:191
bool m_selectedOnlyB
operations on m_groupB but only selected objects
Definition: canglob.h:1093
bool m_resizeToChilds
when true, the wxEVT_CANVASOBJECT_RESIZE_EVENT is sent to this object, if the child box did change...
Definition: candefs.h:357
bool LoadLayers(const wxString &filename)
Definition: canglob.cpp:665
a2dFill GetTextFill() const
get the current text fill
Definition: canglob.cpp:1032
properties specific for a2dCanvasOject
initiation module for the wxArt2D library
Definition: canglob.h:91
bool m_snap
snapping of editable object or when moving
Definition: candefs.h:280
defines common settinsg for a habitat for a set of a2dCameleons.
Definition: canglob.h:439
bool LoadLayers(const wxString &filename)
save layers to a file
Definition: layerinf.cpp:576
a2dStroke & GetDefaultStroke()
Get Stroke to use for non layered a2dCanvasObject&#39;s.
Definition: canglob.cpp:914
const a2dStroke * a2dNullSTROKE
global a2dStroke stock object for NO stroking
a2dDoMu m_gridY
canvas default grid in Y
Definition: canglob.h:1133
static const a2dCanvasObjectFlagsMask DRAGGABLE
Definition: candefs.h:187
void SetPathType(a2dPATH_END_TYPE pathtype)
Set when m_contourwidth != 0 what is the end of the line should be.
Definition: canglob.cpp:1057
a2dStroke m_HighLightStroke
Stroke to use for Highlighted a2dCanvasObject&#39;s.
Definition: canglob.h:1012
a2dPin * GetPinCanConnect()
represents the pin styles for pins that can connect right now
Definition: canglob.cpp:724
static void DeleteStockPinClasses()
called to delete all pin class objects
Definition: canpin.cpp:490
bool m_selectedOnlyA
operations on m_groupA but only selected objects
Definition: canglob.h:1091
while iterating a a2dCanvasDocument, this holds the context.
Definition: canobj.h:3212
Contains graphical drawing context specific classes. a2dDrawer2D and derived classes are used for dra...
struct for how a single object on one layer was hit
Definition: polyver.h:38
static const a2dCanvasObjectFlagsMask NON
Flags for a2dCanvasObject.
Definition: candefs.h:179
void SetSelect2Stroke(const a2dStroke &stroke)
Set Stroke to use for Selected2 a2dCanvasObject&#39;s.
Definition: canglob.cpp:904
bool ReleaseChildObjects(a2dCanvasObjectFlagsMask mask=a2dCanvasOFlags::ALL)
removes and release only from the childobjects the objects with the given mask
Definition: canobj.cpp:6296
double m_RelativeStartX
The RelativeStart start is used when mesuring using a tool, or from the commandline.
Definition: canglob.h:1162
const a2dFill & GetFill() const
get the current fill
Definition: canglob.h:804
const a2dFont * a2dDEFAULT_CANVASFONT
global a2dFont stock object for default font
a2dConnectionGenerator * GetConnectionGenerator() const
Get class for generating new connection objects between object and pins.
Definition: canglob.h:601
a2dStroke & GetSelectStroke()
Get Stroke to use for Selected a2dCanvasObject&#39;s.
Definition: canglob.cpp:874
bool m_doConnect
in case of pins on the object is it currely allowed for other object to connect to it...
Definition: candefs.h:314
void SetStroke(const wxColour &strokecolor, double width=0, a2dStrokeStyle style=a2dSTROKE_SOLID)
Set a stroke for the object which will be used instead of the layer stroke.
Definition: canobj.cpp:2924
void SetOutMapping(wxUint16 layer)
write this layer from the given layer to output files
Definition: layerinf.cpp:395
a2dHandleMouseEvent(a2dIterC *ic, a2dHandle *handle, double x, double y, const wxMouseEvent &event, wxEventType type=wxEVT_CANVASHANDLE_MOUSE_EVENT)
constructor
Definition: canglob.cpp:142
bool m_subEdit
allow subedit of children within this object
Definition: candefs.h:244
static const a2dCanvasObjectFlagsMask VISIBLE
Definition: candefs.h:186
a2dRestrictionEngine * GetRestrictionEngine()
Get restriction engine (grid snapping)
Definition: canglob.cpp:934
a2dConnectionGeneratorPtr m_connectionGenerator
generator for new connections
Definition: canglob.h:1045
a2dStroke & GetHighLightStroke()
Get Stroke to use for Highlighted a2dCanvasObject&#39;s.
Definition: canglob.cpp:854
static const a2dCanvasObjectFlagsMask SNAP_TO
Definition: candefs.h:196
void SetAberPolyToArc(const a2dDoMu &aber)
Polygon/polyline to Arc Maximum abberation.
Definition: canglob.cpp:815
bool m_reverse_order
draw document in reverse order if set, used as default value for a2dCanvasDocument.
Definition: canglob.h:1067
static const a2dCanvasObjectFlagsMask ChildrenOnSameLayer
Definition: candefs.h:201
a2dDocumentRenderStyle m_documentDrawStyle
draw style to be used for drawing with e.g. a2dDrawingPart.
Definition: canglob.h:1039
wire classes for connecting objects.
bool m_HasSelectedObjectsBelow
selected objects detected below
Definition: candefs.h:354
const a2dFont & GetFont() const
get current font active font.
Definition: canglob.h:884
void SetOrder(wxUint16 order)
set drawing order for layer
Definition: layerinf.cpp:371
static a2dPinClass * Standard
Pins of this class can only connect to pins of the same class.
Definition: canpin.h:766
a2dStroke m_Select2Stroke
Stroke to use for selected2 a2dCanvasObject&#39;s.
Definition: canglob.h:1024
static const a2dCanvasObjectFlagsMask VISIBLECHILDS
Definition: candefs.h:199
static const a2dCanvasObjectFlagsMask NoRenderCanvasObject
Definition: candefs.h:218
void SetFont(const a2dFont &font)
used for to set the font for non Text objects
Definition: canglob.cpp:971
a2dPathList & GetLayersPathList() const
Path for Icons and small bitmaps.
Definition: canglob.h:1234
void SetSmall(const a2dDoMu &smallest)
detection of small object, smaller than this
Definition: canglob.cpp:827
bool m_editingCopy
true if the object needs to be rendered in edit mode.
Definition: candefs.h:304
bool m_template
GDSII format flag.
Definition: candefs.h:339
holds a list of layers numbers
Definition: canglob.h:60
static const a2dCanvasObjectFlagsMask DoConnect
Definition: candefs.h:203
const a2dError a2dError_NotSpecified
see a2dComEvent
Definition: gen.h:371
long m_GRID
boolean operation setting
Definition: canglob.h:1100
void SetLayerSetup(a2dLayers *layersetup)
set the layersettings for the canvas library.
Definition: canglob.cpp:1071
bool m_a
group A flag (e.g boolean operations)
Definition: candefs.h:262
double GetContourWidthInDataBaseUnits() const
get the Contour width of shapes in the document its units
Definition: canglob.cpp:1052
static const a2dCanvasObjectFlagsMask ignoreSetpending
Definition: candefs.h:212
a2dStroke m_currentstroke
stroke to be set for new objects
Definition: canglob.h:1176
initiates Freetype library
Definition: stylebase.h:1197
The a2dBoundingBox class stores one a2dBoundingBox of a a2dCanvasObject.
Definition: bbox.h:39
a2dCanvasObjectMouseEvent(a2dIterC *ic, a2dCanvasObject *object, a2dHit &how, double x, double y, const wxMouseEvent &event)
constructor
Definition: canglob.cpp:117
affine matrix class
wxString GetAsString()
Get all search paths as one string.
Definition: gen.cpp:4470
double USERUNITS()
how accurate is the drawing
Definition: canglob.cpp:774
double ENTRYUNITS()
entry of data
Definition: canglob.cpp:785
void SetGridY(const a2dDoMu &gridY)
grid setting Y
Definition: canglob.cpp:1100
the a2dDrawingPart is a a2dView specially designed for displaying parts of a a2dDrawing. It uses a a2dDrawer2D to actually redraw things from the document, by giving that a2dDrawer2D as drawing context to the document, and telling the document to redraw a certain rectangular area. At that last is what this class is for. It optimizes the areas to be redrawn after object in the document were changed. To do that it combines redraw areas to a minimal set of redrawing areas. All the administration for this and the way things will be redrawn is from this view.
static a2dPinClass * Any
used to ask for a new default pin on an object.
Definition: canpin.h:763
bool m_bin
general flag ( used for temporarely marking object )
Definition: candefs.h:271
a2dCanvasGlobal * a2dCanvasGlobals
global a2dCanvasGlobal to have easy access to global settings
Definition: canglob.cpp:1234
static const a2dCanvasObjectFlagsMask SNAP
Definition: candefs.h:195
bool m_prerenderaschild
as child this object will be rendered before the parent object itself when true (default) ...
Definition: candefs.h:289
void SetDefaultFill(const a2dFill &fill)
Set Fill to use for non layered a2dCanvasObject&#39;s.
Definition: canglob.cpp:929
a2dFill m_currentfill
fill to be set for new objects
Definition: canglob.h:1173
This template class is for property ids with a known data type.
Definition: id.h:477
initializes the general module
Definition: comevt.h:1238
a2dDoMu m_gridX
canvas default grid in X
Definition: canglob.h:1131
static const a2dCanvasObjectFlagsMask ALL
Definition: candefs.h:220
static const a2dCanvasObjectFlagsMask SHOWSHADOW
Definition: candefs.h:188
void Append(a2dCanvasObject *obj)
append a a2dCanvasObject to the childobjects
Definition: canobj.cpp:6224
a2dFill & GetSelectFill()
Get Fill to use for Selected a2dCanvasObject&#39;s.
Definition: canglob.cpp:879
static const a2dCanvasObjectFlagsMask EDITABLE
Definition: candefs.h:200
double m_lastY
holds last mouse Y position in world coordinates, as set by tools.
Definition: canglob.h:1159
a2dStroke m_DefaultStroke
Stroke to use for non layered a2dCanvasObject&#39;s.
Definition: canglob.h:1030
static const a2dCanvasObjectFlagsMask HasSelectedObjectsBelow
Definition: candefs.h:183
a2dDoMu m_MARGE
boolean operation setting
Definition: canglob.h:1098
static const a2dCanvasObjectFlagsMask ignoreLayer
Definition: candefs.h:215
bool m_ignoreSetpending
ignore this object in a2dCanvasObject::SetPending()
Definition: candefs.h:307
when a new wire or other connection object needs to be created,
Definition: connectgen.h:153
Contain one drawing as hierarchical tree of a2dCanvasObject&#39;s.
Definition: drawing.h:434
bool m_pushin
is push into allowed
Definition: candefs.h:286
void SetFill(const a2dFill &fill)
Set a fill for the object which will be used instead of the layer fill.
Definition: canobj.cpp:2874
bool m_filled
use fill to fill if set
Definition: candefs.h:259
a2dSmrtPtr< a2dLayers > m_layersetup
default setup for layers in a2dCanvasDocument&#39;s
Definition: canglob.h:970
static const a2dCanvasObjectFlagsMask SubEdit
Definition: candefs.h:184
const a2dFill * a2dTRANSPARENT_FILL
global a2dFill stock object for TRANSPARENT filling
void SetAberArcToPoly(const a2dDoMu &aber)
Arc to Polygon/polyline Maximum abberation.
Definition: canglob.cpp:821
static const a2dCanvasObjectFlagsMask PRERENDERASCHILD
Definition: candefs.h:198
general canvas module declarations and classes
bool m_fixedStyle
if set fixed style (stroke and fill )is assumed. Can be used in tools to detect if style should be ch...
Definition: candefs.h:298
class for storing paths and settings, which are used within the artbase module.
Definition: artglob.h:90
bool m_showshadow
show shadow object if true and shadow property is available
Definition: candefs.h:256
canglob.cpp Source File -- Sun Oct 12 2014 17:04:13 -- Sun Oct 12 2014 -- 1.8.5 -- wxArt2D -- . -- Main Page Reference Documentation