mqsdx  310.0.0
MQPluginSDK Extention Library / mqsdkをC++またはCLI(.Net)拡張するサポートライブラリ
 全て クラス 関数 変数 型定義 プロパティ グループ ページ
K:/Dancer_iMac/mqsdkUVTexIntegra/mqsdx/MQCLI.hpp
1 /*
2 First author tiritomato 2013.
3 
4 mqsdx is distributed under the GNU Lesser General Public License 3.0(LGPLv3).
5 
6 support blog (Japanese only)
7 http://d.hatena.ne.jp/tiri_tomato/
8 */
9 
10 #pragma once
11 
12 #ifdef __cplusplus_cli
13 #include "mqsdx/MQ0x.hpp"
14 
16 namespace MQCLI {
17 
18 #pragma region Interface
19 
23  public interface class IActivate {
24  public: virtual BOOL Activate(MQDocument doc, BOOL flag);
25  };
26  public interface class IEnumFileExt {
27  public: virtual const char *EnumFileExt(int index);
28  };
29  public interface class IEnumFileType {
30  public: virtual const char *EnumFileType(int index);
31  };
32  public interface class IExecute {
33  public: virtual BOOL Execute(int index, MQDocument doc);
34  };
35  public interface class IExit {
36  public: virtual void Exit();
37  };
38  public interface class IExportFile {
39  public: virtual BOOL ExportFile(int index, const char *filename, MQDocument doc);
40  };
41  public interface class IImportFile {
42  public: virtual BOOL ImportFile(int index, const char *filename, MQDocument doc);
43  };
44  public interface class IInitialize {
45  public: virtual BOOL Initialize();
46  };
47  public interface class IIsActivated {
48  public: virtual BOOL IsActivated(MQDocument doc);
49  };
50  public interface class IOnMinimize {
51  public: virtual void OnMinimize(MQDocument doc, BOOL flag);
52  };
53  public interface class IOnReceiveUserMessage {
54  public: virtual int OnReceiveUserMessage(MQDocument doc, DWORD src_product, DWORD src_id, const char *description, void *message);
55  };
56  public interface class IOnDraw {
57  public: virtual void OnDraw(MQDocument doc, MQScene scene, int width, int height);
58  };
59  public interface class IOnNewDocument {
60  public: virtual void OnNewDocument(MQDocument doc, const char *filename, MQStationPlugin::NEW_DOCUMENT_PARAM& param);
61  };
62  public interface class IOnEndDocument {
63  public: virtual void OnEndDocument(MQDocument doc);
64  };
65  public interface class IOnSaveDocument {
66  public: virtual void OnSaveDocument(MQDocument doc, const char *filename, MQStationPlugin::SAVE_DOCUMENT_PARAM& param);
67  };
68  public interface class IOnUndo {
69  public: virtual BOOL OnUndo(MQDocument doc, int undo_state);
70  };
71  public interface class IOnRedo {
72  public: virtual BOOL OnRedo(MQDocument doc, int redo_state);
73  };
74  public interface class IOnUpdateUndo {
75  public: virtual void OnUpdateUndo(MQDocument doc, int undo_state, int undo_size);
76  };
77  public interface class IOnObjectModified {
78  public: virtual void OnObjectModified(MQDocument doc);
79  };
80  public interface class IOnObjectSelected {
81  public: virtual void OnObjectSelected(MQDocument doc);
82  };
83  public interface class IOnUpdateObjectList {
84  public: virtual void OnUpdateObjectList(MQDocument doc);
85  };
86  public interface class IOnMaterialModified {
87  public: virtual void OnMaterialModified(MQDocument doc);
88  };
89  public interface class IOnUpdateMaterialList {
90  public: virtual void OnUpdateMaterialList(MQDocument doc);
91  };
92  public interface class IOnUpdateScene {
93  public: virtual void OnUpdateScene(MQDocument doc, MQScene scene);
94  };
95  public interface class IExecuteCallback {
96  public: virtual bool ExecuteCallback(MQDocument doc, void *option);
97  };
98  public interface class IOnLeftButtonDown {
99  public: virtual BOOL OnLeftButtonDown(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
100  };
101  public interface class IOnLeftButtonMove {
102  public: virtual BOOL OnLeftButtonMove(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
103  };
104  public interface class IOnLeftButtonUp {
105  public: virtual BOOL OnLeftButtonUp(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
106  };
107  public interface class IOnMiddleButtonDown {
108  public: virtual BOOL OnMiddleButtonDown(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
109  };
110  public interface class IOnMiddleButtonMove {
111  public: virtual BOOL OnMiddleButtonMove(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
112  };
113  public interface class IOnMiddleButtonUp {
114  public: virtual BOOL OnMiddleButtonUp(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
115  };
116  public interface class IOnRightButtonDown {
117  public: virtual BOOL OnRightButtonDown(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
118  };
119  public interface class IOnRightButtonMove {
120  public: virtual BOOL OnRightButtonMove(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
121  };
122  public interface class IOnRightButtonUp {
123  public: virtual BOOL OnRightButtonUp(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
124  };
125  public interface class IOnMouseMove {
126  public: virtual BOOL OnMouseMove(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
127  };
128  public interface class IOnMouseWheel {
129  public: virtual BOOL OnMouseWheel(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
130  };
131  public interface class IOnKeyDown {
132  public: virtual BOOL OnKeyDown(MQDocument doc, MQScene scene, int key, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
133  };
134  public interface class IOnKeyUp {
135  public: virtual BOOL OnKeyUp(MQDocument doc, MQScene scene, int key, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
136  };
137  public interface class IBasePlugin {
138  public: property MQBasePlugin* basePlugin { virtual MQBasePlugin* get(); }
139  };
141 #pragma endregion
142 
145 
155  public ref class Lock {
156  public:
157  Lock( System::Object^ pObject );
158  ~Lock();
159  private:
160  System::Object^ m_pObject;
161  };
162 
167  public ref class MQWndHandle : System::Windows::Forms::IWin32Window
168  {
169  public:
170  MQWndHandle() { m_Handle = (System::IntPtr)MQ_GetWindowHandle(); }
171  virtual property System::IntPtr Handle { System::IntPtr get() { return m_Handle; } }
172  static operator System::IntPtr ( MQWndHandle^ src ) {
173  if ( src != nullptr ) return src->Handle;
174  return System::IntPtr();
175  }
176  private:
177  System::IntPtr m_Handle;
178  };
180 
181  namespace String {
184 
190  System::String^ Repeat(System::String^ src, int ct);
191 
194  public ref class IndentBuilder {
195  public:
196  IndentBuilder( System::String^ IndentUnit ) {
197  m_Builder = gcnew System::Text::StringBuilder();
198  this->IndentUnit = IndentUnit;
199  }
200  property System::String^ IndentUnit {
201  System::String^ get() { return m_IndentUnit; }
202  void set( System::String^ value ) { m_IndentUnit = value!=nullptr?value:System::String::Empty; }
203  }
204  void Append( System::String^ str, int indentDepth ) {
205  if ( str == nullptr ) return;
206  System::String^ indent = Repeat(IndentUnit, System::Math::Max(indentDepth,0));
207  m_Builder->Append( indent + str->Replace(System::Environment::NewLine,System::Environment::NewLine + indent) );
208  }
209  void Append( System::String^ str ) { Append(str, 0); }
210  void AppendLine( System::String^ str, int indentDepth ) { Append( str, indentDepth ); m_Builder->AppendLine(); }
211  void AppendLine( System::String^ str ) { AppendLine(str ,0); }
212  virtual System::String^ ToString() override { return m_Builder->ToString(); }
213  private:
214  System::String^ m_IndentUnit;
215  System::Text::StringBuilder^ m_Builder;
216  };
217 
219  System::String^ FromException(System::Exception^ ex, System::String^ indentUnit, int indentDepth );
221  inline System::String^ FromException(System::Exception^ ex, System::String^ indentUnit ) {
222  return FromException(ex,indentUnit,0);
223  }
225  inline System::String^ FromException(System::Exception^ ex) { return FromException( ex, "\t" ); }
226 
228  }
229 
231 
232  template <typename T> class StationPluginDefaultTemplate : public T {
233  public:
234  StationPluginDefaultTemplate(){}
235  virtual void GetPlugInID(DWORD*,DWORD*) { }
236  virtual const char *GetPlugInName(void) { return NULL; }
237  virtual const char *EnumString(void) { return NULL; }
238  virtual BOOL Initialize() { return TRUE; }
239  virtual BOOL Activate(MQDocument doc, BOOL flag) { return TRUE; }
240  virtual void Exit() {}
241  typedef typename T::DRAW_OBJECT_VIISIBILITY DRAW_OBJECT_VIISIBILITY;
242  typedef typename T::SCENE_OPTION SCENE_OPTION;
243  MQObject CreateDrawingObject(MQDocument doc, typename T::DRAW_OBJECT_VIISIBILITY visibility, BOOL instant) {
244  return T::CreateDrawingObject(doc,visibility,instant);
245  }
246  MQMaterial CreateDrawingMaterial(MQDocument doc, int& index, BOOL instant) { return T::CreateDrawingMaterial(doc,index,instant); }
247  void DeleteDrawingObject(MQDocument doc, MQObject obj) { T::DeleteDrawingObject(doc,obj); }
248  void DeleteDrawingMaterial(MQDocument doc, MQMaterial mat) { T::DeleteDrawingMaterial(doc,mat); }
249  int GetCurrentUndoState(MQDocument doc) { return T::GetCurrentUndoState(doc); }
250  void GetSceneOption(MQScene scene, typename T::SCENE_OPTION& option) { T::GetSceneOption(scene,option); }
251  };
252  template <typename T> class CommandPluginDefaultTemplate : public StationPluginDefaultTemplate<T> {
253  public:
254  CommandPluginDefaultTemplate(){}
255  void UpdateUndo() { T::UpdateUndo(); }
256  void RedrawScene(MQScene scene) { T::RedrawScene(scene); }
257  void RedrawAllScene() { T::RedrawAllScene(); }
258  void GetEditOption(typename T::EDIT_OPTION& option) { T::GetEditOption(option); }
259  MQPoint GetSnappedPos(MQScene scene, const MQPoint& p, typename T::SNAP_GRID_TYPE type) { return T::GetSnappedPos(scene,p,type); }
260  BOOL HitTest(MQScene scene, POINT p, typename T::HIT_TEST_PARAM& param) { return T::HitTest(scene,p,param); }
261  HCURSOR GetResourceCursor(typename T::MQCURSOR_TYPE cursor_type) { return T::GetResourceCursor(cursor_type); }
262  void SetMouseCursor(HCURSOR cursor) { T::SetMouseCursor(cursor); }
263  void SetStatusString(const char *str) { T::SetStatusString(str); }
264  };
266  template <typename T> class PluginDefault;
267  template <> class PluginDefault<MQStationPlugin> : public StationPluginDefaultTemplate<MQStationPlugin> { public: PluginDefault(){} };
268  template <> class PluginDefault<MQCommandPlugin> : public CommandPluginDefaultTemplate<MQCommandPlugin> { public: PluginDefault(){} };
270  typedef PluginDefault<MQCommandPlugin> CommandPluginDefault;
272 
274  public ref class PluginMainHolder {
275  public:
276  static bool Regist( IBasePlugin^ pluginBody );
277  static property MQBasePlugin* pluginMain { MQBasePlugin* get(); }
278  static BOOL Activate(MQDocument doc, BOOL flag);
279  static bool ExecuteCallback(MQDocument doc, void *option);
280  static void Exit();
281  static BOOL Initialize();
282  static BOOL IsActivated(MQDocument doc);
283  static void OnMinimize(MQDocument doc, BOOL flag);
284  static int OnReceiveUserMessage(MQDocument doc, DWORD src_product, DWORD src_id, const char *description, void *message);
285  static void OnDraw(MQDocument doc, MQScene scene, int width, int height);
286  static void OnNewDocument(MQDocument doc, const char *filename, MQStationPlugin::NEW_DOCUMENT_PARAM& param);
287  static void OnEndDocument(MQDocument doc);
288  static void OnSaveDocument(MQDocument doc, const char *filename, MQStationPlugin::SAVE_DOCUMENT_PARAM& param);
289  static BOOL OnUndo(MQDocument doc, int undo_state);
290  static BOOL OnRedo(MQDocument doc, int redo_state);
291  static void OnUpdateUndo(MQDocument doc, int undo_state, int undo_size);
292  static void OnObjectModified(MQDocument doc);
293  static void OnObjectSelected(MQDocument doc);
294  static void OnUpdateObjectList(MQDocument doc);
295  static void OnMaterialModified(MQDocument doc);
296  static void OnUpdateMaterialList(MQDocument doc);
297  static void OnUpdateScene(MQDocument doc, MQScene scene);
298  static BOOL OnLeftButtonDown(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
299  static BOOL OnLeftButtonMove(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
300  static BOOL OnLeftButtonUp(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
301  static BOOL OnMiddleButtonDown(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
302  static BOOL OnMiddleButtonMove(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
303  static BOOL OnMiddleButtonUp(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
304  static BOOL OnRightButtonDown(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
305  static BOOL OnRightButtonMove(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
306  static BOOL OnRightButtonUp(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
307  static BOOL OnMouseMove(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
308  static BOOL OnMouseWheel(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
309  static BOOL OnKeyDown(MQDocument doc, MQScene scene, int key, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
310  static BOOL OnKeyUp(MQDocument doc, MQScene scene, int key, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
311  private:
312  static System::Object^ m_lock = gcnew System::Object();
313  static IBasePlugin^ m_pluginMain = nullptr;
314  static bool m_firstRequestFailedFlag = false;
315  };
317 
319  template <typename T> class Adapter : public T {
320  public:
321  typedef T PluginType;
322  MQObject CreateDrawingObject( MQDocument doc, MQStationPlugin::DRAW_OBJECT_VIISIBILITY visibility, BOOL instant ) {
323  return T::CreateDrawingObject(doc,visibility,instant);
324  }
325  MQMaterial CreateDrawingMaterial( MQDocument doc, int& index, BOOL instant ) {
326  return T::CreateDrawingMaterial( doc, index, instant );
327  }
328  void DeleteDrawingObject(MQDocument doc, MQObject obj) { T::DeleteDrawingObject(doc,obj); }
329  void DeleteDrawingMaterial(MQDocument doc, MQMaterial mat) { T::DeleteDrawingMaterial(doc,mat); }
330  int GetCurrentUndoState(MQDocument doc) { return T::GetCurrentUndoState(doc); }
331  void GetSceneOption(MQScene scene, MQStationPlugin::SCENE_OPTION& option) { T::GetSceneOption(scene,option); }
332  void UpdateUndo() { T::UpdateUndo(); }
333  void RedrawScene(MQScene scene){ T::RedrawScene(scene); }
334  void RedrawAllScene() { T::RedrawAllScene(); }
335  void GetEditOption(MQCommandPlugin::EDIT_OPTION& option) { T::GetEditOption(option); }
336  MQPoint GetSnappedPos(MQScene scene, const MQPoint& p, MQCommandPlugin::SNAP_GRID_TYPE type) {
337  return T::GetSnappedPos(scene,p,type);
338  }
339  BOOL HitTest(MQScene scene, POINT p, MQCommandPlugin::HIT_TEST_PARAM& param) { return T::HitTest(scene, p, param); }
340  HCURSOR GetResourceCursor(MQCommandPlugin::MQCURSOR_TYPE cursor_type) { return T::GetResourceCursor(cursor_type); }
341  void SetMouseCursor(HCURSOR cursor) { T::SetMouseCursor(cursor); }
342  void SetStatusString(const char *str) { T::SetStatusString(str); }
343  private:
344  virtual BOOL Initialize() {
346  }
347  virtual bool ExecuteCallback(MQDocument doc, void *option) {
348  return PluginMainHolder::ExecuteCallback(doc, option);
349  }
350  virtual void Exit() {
351  PluginMainHolder::Exit();
352  }
353  virtual BOOL Activate(MQDocument doc, BOOL flag) {
354  return PluginMainHolder::Activate(doc, flag);
355  }
356  virtual BOOL IsActivated(MQDocument doc) {
357  return PluginMainHolder::IsActivated(doc);
358  }
359  virtual void OnMinimize(MQDocument doc, BOOL flag) {
360  PluginMainHolder::OnMinimize(doc, flag);
361  }
362  virtual int OnReceiveUserMessage(MQDocument doc, DWORD src_product, DWORD src_id, const char *description, void *message) {
363  return PluginMainHolder::OnReceiveUserMessage(doc, src_product, src_id, description, message);
364  }
365  virtual void OnDraw(MQDocument doc, MQScene scene, int width, int height) {
366  PluginMainHolder::OnDraw(doc, scene, width, height);
367  }
368  virtual void OnNewDocument(MQDocument doc, const char *filename, MQStationPlugin::NEW_DOCUMENT_PARAM& param) {
369  PluginMainHolder::OnNewDocument(doc, filename, param);
370  }
371  virtual void OnEndDocument(MQDocument doc) {
372  PluginMainHolder::OnEndDocument(doc);
373  }
374  virtual void OnSaveDocument(MQDocument doc, const char *filename, MQStationPlugin::SAVE_DOCUMENT_PARAM& param) {
375  PluginMainHolder::OnSaveDocument(doc, filename, param);
376  }
377  virtual BOOL OnUndo(MQDocument doc, int undo_state) {
378  return PluginMainHolder::OnUndo(doc, undo_state);
379  }
380  virtual BOOL OnRedo(MQDocument doc, int redo_state) {
381  return PluginMainHolder::OnRedo(doc, redo_state);
382  }
383  virtual void OnUpdateUndo(MQDocument doc, int undo_state, int undo_size) {
384  PluginMainHolder::OnUpdateUndo(doc, undo_state, undo_size);
385  }
386  virtual void OnObjectModified(MQDocument doc) {
387  PluginMainHolder::OnObjectModified(doc);
388  }
389  virtual void OnObjectSelected(MQDocument doc) {
390  PluginMainHolder::OnObjectSelected(doc);
391  }
392  virtual void OnUpdateObjectList(MQDocument doc) {
393  PluginMainHolder::OnUpdateObjectList(doc);
394  }
395  virtual void OnMaterialModified(MQDocument doc) {
396  PluginMainHolder::OnMaterialModified(doc);
397  }
398  virtual void OnUpdateMaterialList(MQDocument doc) {
399  PluginMainHolder::OnUpdateMaterialList(doc);
400  }
401  virtual void OnUpdateScene(MQDocument doc, MQScene scene) {
402  PluginMainHolder::OnUpdateScene(doc, scene);
403  }
404  };
406 
408  class StationPluginsUnmanaged : public MQ0x::PluginBase<Adapter<MQStationPlugin>> {
409  public:
410  StationPluginsUnmanaged( const char* productName, const char* pluginFullName, const char* displayName, const DWORD idProduct, const DWORD idPlugin )
411  : PluginBase( productName, pluginFullName, displayName, idProduct, idPlugin )
412  {
413  }
414  };
415 
416  class CommandPluginsUnmanaged : public MQ0x::PluginBase<Adapter<MQCommandPlugin>> {
417  public:
418  CommandPluginsUnmanaged( const char* productName, const char* pluginFullName, const char* displayName, const DWORD idProduct, const DWORD idPlugin )
419  : PluginBase( productName, pluginFullName, displayName, idProduct, idPlugin )
420  {
421  }
422  virtual BOOL IsActivated(MQDocument doc) {
423  return PluginMainHolder::IsActivated(doc);
424  }
425  virtual BOOL OnLeftButtonDown(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state) {
426  return PluginMainHolder::OnLeftButtonDown(doc, scene, state);
427  }
428  virtual BOOL OnLeftButtonMove(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state) {
429  return PluginMainHolder::OnLeftButtonMove(doc, scene, state);
430  }
431  virtual BOOL OnLeftButtonUp(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state) {
432  return PluginMainHolder::OnLeftButtonUp(doc, scene, state);
433  }
434  virtual BOOL OnMiddleButtonDown(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state) {
435  return PluginMainHolder::OnMiddleButtonDown(doc, scene, state);
436  }
437  virtual BOOL OnMiddleButtonMove(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state) {
438  return PluginMainHolder::OnMiddleButtonMove(doc, scene, state);
439  }
440  virtual BOOL OnMiddleButtonUp(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state) {
441  return PluginMainHolder::OnMiddleButtonUp(doc, scene, state);
442  }
443  virtual BOOL OnRightButtonDown(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state) {
444  return PluginMainHolder::OnRightButtonDown(doc, scene, state);
445  }
446  virtual BOOL OnRightButtonMove(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state) {
447  return PluginMainHolder::OnRightButtonMove(doc, scene, state);
448  }
449  virtual BOOL OnRightButtonUp(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state) {
450  return PluginMainHolder::OnRightButtonUp(doc, scene, state);
451  }
452  virtual BOOL OnMouseMove(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state) {
453  return PluginMainHolder::OnMouseMove(doc, scene, state);
454  }
455  virtual BOOL OnMouseWheel(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state) {
456  return PluginMainHolder::OnMouseWheel(doc, scene, state);
457  }
458  virtual BOOL OnKeyDown(MQDocument doc, MQScene scene, int key, MQCommandPlugin::MOUSE_BUTTON_STATE& state) {
459  return PluginMainHolder::OnKeyDown(doc, scene, key, state);
460  }
461  virtual BOOL OnKeyUp(MQDocument doc, MQScene scene, int key, MQCommandPlugin::MOUSE_BUTTON_STATE& state) {
462  return PluginMainHolder::OnKeyUp(doc, scene, key, state);
463  }
464  };
466 
472  public ref class StationPluginsInterfacedBase abstract :
473  IActivate,
474  IExit,
475  IInitialize,
477  IIsActivated,
478  IOnMinimize,
480  IOnDraw,
484  IOnUndo,
485  IOnRedo,
494  {
495  public:
496  virtual BOOL Activate(MQDocument doc, BOOL flag) { return TRUE; }
497  virtual void Exit() {}
498  virtual BOOL Initialize() { return TRUE; }
499  virtual bool ExecuteCallback(MQDocument doc, void *option);
500  virtual BOOL IsActivated(MQDocument doc);
501  virtual void OnMinimize(MQDocument doc, BOOL flag);
502  virtual int OnReceiveUserMessage(MQDocument doc, DWORD src_product, DWORD src_id, const char *description, void *message);
503  virtual void OnDraw(MQDocument doc, MQScene scene, int width, int height);
504  virtual void OnNewDocument(MQDocument doc, const char *filename, MQStationPlugin::NEW_DOCUMENT_PARAM& param);
505  virtual void OnEndDocument(MQDocument doc);
506  virtual void OnSaveDocument(MQDocument doc, const char *filename, MQStationPlugin::SAVE_DOCUMENT_PARAM& param);
507  virtual BOOL OnUndo(MQDocument doc, int undo_state);
508  virtual BOOL OnRedo(MQDocument doc, int redo_state);
509  virtual void OnUpdateUndo(MQDocument doc, int undo_state, int undo_size);
510  virtual void OnObjectModified(MQDocument doc);
511  virtual void OnObjectSelected(MQDocument doc);
512  virtual void OnUpdateObjectList(MQDocument doc);
513  virtual void OnMaterialModified(MQDocument doc);
514  virtual void OnUpdateMaterialList(MQDocument doc);
515  virtual void OnUpdateScene(MQDocument doc, MQScene scene);
516  property MQBasePlugin* basePlugin { virtual MQBasePlugin* get() abstract; }
517  int SendUserMessage(MQDocument doc, DWORD target_product, DWORD target_id, const char *description, void *param);
518  void WindowClose();
519  void BeginCallback(void *option);
520  void GetPlugInID(DWORD *Product, DWORD *ID);
521  property DWORD ProductID { DWORD get(); }
522  property DWORD PluginID { DWORD get(); }
523  const char* GetPlugInName();
524  int GetPlugInType();
525  const char* EnumString();
526  protected:
527  property MQStationPlugin* stationPlugin { virtual MQStationPlugin* get() abstract; }
528  };
529 
545  IOnMouseMove,
547  IOnKeyDown,
548  IOnKeyUp
549  {
550  public:
551  virtual BOOL OnLeftButtonDown(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
552  virtual BOOL OnLeftButtonMove(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
553  virtual BOOL OnLeftButtonUp(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
554  virtual BOOL OnMiddleButtonDown(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
555  virtual BOOL OnMiddleButtonMove(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
556  virtual BOOL OnMiddleButtonUp(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
557  virtual BOOL OnRightButtonDown(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
558  virtual BOOL OnRightButtonMove(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
559  virtual BOOL OnRightButtonUp(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
560  virtual BOOL OnMouseMove(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
561  virtual BOOL OnMouseWheel(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
562  virtual BOOL OnKeyDown(MQDocument doc, MQScene scene, int key, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
563  virtual BOOL OnKeyUp(MQDocument doc, MQScene scene, int key, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
564  };
565 
583  template <class T_MANAGEDBASE, class T_UNMANAGED>
584  public ref class StationPluginTemplate : T_MANAGEDBASE {
585  public:
586  StationPluginTemplate( const char* productName, const char* pluginFullName, const char* displayName ) :
587  m_pluginBody( new T_UNMANAGED( productName, pluginFullName, displayName,
588  MQ0x::CollectionHashCode<DWORD>(productName), MQ0x::CollectionHashCode<DWORD>(pluginFullName) ) ) {}
589  StationPluginTemplate( const char* productName, const char* pluginFullName, const char* displayName, const DWORD idProduct, const DWORD idPlugin ) :
590  m_pluginBody( new T_UNMANAGED( productName, pluginFullName, displayName, idProduct, idPlugin ) ) {}
591 
592  property MQBasePlugin* basePlugin { virtual MQBasePlugin* get() override { return static_cast<MQBasePlugin*>(m_pluginBody); } }
610  if ( m_pluginBody == NULL ) return NULL;
611  return m_pluginBody->BasePlugin();
612  }
613  }
614  protected:
615  typedef PluginDefault<typename T_UNMANAGED::PluginType> PluginDefault;
616  typedef typename PluginDefault::DRAW_OBJECT_VIISIBILITY DRAW_OBJECT_VIISIBILITY;
617  typedef typename PluginDefault::SCENE_OPTION SCENE_OPTION;
618  property MQStationPlugin* stationPlugin { virtual MQStationPlugin* get() override { return m_pluginBody; } }
619  property T_UNMANAGED* pluginBody { virtual T_UNMANAGED* get() { return m_pluginBody; } }
620  MQObject CreateDrawingObject( MQDocument doc, DRAW_OBJECT_VIISIBILITY visibility, BOOL instant ) {
621  if ( m_pluginBody != NULL ) return m_pluginBody->CreateDrawingObject(doc,visibility,instant);
622  return PluginDefault().CreateDrawingObject(doc,visibility,instant);
623  }
624  MQObject CreateDrawingObject( MQDocument doc, DRAW_OBJECT_VIISIBILITY visibility ) {
625  return CreateDrawingObject(doc,visibility,TRUE);
626  }
627  MQMaterial CreateDrawingMaterial( MQDocument doc, int& index, BOOL instant ) {
628  if ( m_pluginBody != NULL ) return m_pluginBody->CreateDrawingMaterial(doc,index,instant);
629  return PluginDefault().CreateDrawingMaterial(doc,index,instant);
630  }
631  MQMaterial CreateDrawingMaterial( MQDocument doc, int& index ) { return CreateDrawingMaterial(doc,index,TRUE); }
632  void DeleteDrawingObject(MQDocument doc, MQObject obj) {
633  if ( m_pluginBody != NULL ) m_pluginBody->DeleteDrawingObject(doc,obj);
634  PluginDefault().DeleteDrawingMaterial(doc,mat);
635  }
636  void DeleteDrawingMaterial(MQDocument doc, MQMaterial mat) {
637  if ( m_pluginBody != NULL ) m_pluginBody->DeleteDrawingMaterial(doc,mat);
638  PluginDefault().DeleteDrawingMaterial(doc,mat);
639  }
640  int GetCurrentUndoState(MQDocument doc) {
641  if ( m_pluginBody != NULL ) return m_pluginBody->GetCurrentUndoState(doc);
642  return PluginDefault().GetCurrentUndoState(doc);
643  }
644  void GetSceneOption(MQScene scene, SCENE_OPTION& option) { if ( m_pluginBody != NULL ) m_pluginBody->GetSceneOption(scene,option); }
645  private:
646  T_UNMANAGED *m_pluginBody;
647  };
648 
649  public ref class StationPlugin : StationPluginTemplate<StationPluginsInterfacedBase,StationPluginsUnmanaged> {
650  public:
651  StationPlugin( const char* productName, const char* pluginFullName, const char* displayName ) :
652  StationPluginTemplate( productName, pluginFullName, displayName ) {}
653  StationPlugin( const char* productName, const char* pluginFullName, const char* displayName, const DWORD idProduct, const DWORD idPlugin ) :
654  StationPluginTemplate( productName, pluginFullName, displayName, idProduct, idPlugin ) {}
655  };
656 
657  public ref class CommandPlugin : StationPluginTemplate<CommandPluginsInterfacedBase,CommandPluginsUnmanaged> {
658  public:
659  CommandPlugin( const char* productName, const char* pluginFullName, const char* displayName ) :
660  StationPluginTemplate( productName, pluginFullName, displayName ) {}
661  CommandPlugin( const char* productName, const char* pluginFullName, const char* displayName, const DWORD idProduct, const DWORD idPlugin ) :
662  StationPluginTemplate( productName, pluginFullName, displayName, idProduct, idPlugin ) {}
663  protected:
664  void UpdateUndo() {
665  if ( pluginBody != NULL ) pluginBody->UpdateUndo();
666  PluginDefault().UpdateUndo();
667  }
668  void RedrawScene(MQScene scene){
669  if ( pluginBody != NULL ) pluginBody->RedrawScene(scene);
670  PluginDefault().RedrawScene(scene);
671  }
672  void RedrawAllScene() {
673  if ( pluginBody != NULL ) pluginBody->RedrawAllScene();
674  PluginDefault().RedrawAllScene();
675  }
676  void GetEditOption(MQCommandPlugin::EDIT_OPTION& option) {
677  if ( pluginBody != NULL ) pluginBody->GetEditOption(option);
678  PluginDefault().GetEditOption(option);
679  }
680  MQPoint GetSnappedPos(MQScene scene, const MQPoint& p, MQCommandPlugin::SNAP_GRID_TYPE type) {
681  if ( pluginBody != NULL ) return pluginBody->GetSnappedPos(scene,p,type);
682  return PluginDefault().GetSnappedPos(scene,p,type);
683  }
684  BOOL HitTest(MQScene scene, POINT p, MQCommandPlugin::HIT_TEST_PARAM& param) {
685  if ( pluginBody != NULL ) return pluginBody->HitTest(scene, p, param);
686  return PluginDefault().HitTest(scene,p,param);
687  }
688  HCURSOR GetResourceCursor(MQCommandPlugin::MQCURSOR_TYPE cursor_type) {
689  if ( pluginBody != NULL ) return pluginBody->GetResourceCursor(cursor_type);
690  return PluginDefault().GetResourceCursor(cursor_type);
691  }
692  void SetMouseCursor(HCURSOR cursor) {
693  if ( pluginBody != NULL ) pluginBody->SetMouseCursor(cursor);
694  PluginDefault().SetMouseCursor(cursor);
695  }
696  void SetStatusString(const char *str) {
697  if ( pluginBody != NULL ) pluginBody->SetStatusString(str);
698  PluginDefault().SetStatusString(str);
699  }
700  };
701 
705 
706  bool Initialize( StationPlugin^ pluginBody );
707  bool Initialize( CommandPlugin^ pluginBody );
709 
710 }
711 
712 #endif