12 #ifdef __cplusplus_cli
13 #include "mqsdx/MQ0x.hpp"
18 #pragma region Interface
24 public:
virtual BOOL Activate(MQDocument doc, BOOL flag);
27 public:
virtual const char *EnumFileExt(
int index);
30 public:
virtual const char *EnumFileType(
int index);
33 public:
virtual BOOL Execute(
int index, MQDocument doc);
36 public:
virtual void Exit();
39 public:
virtual BOOL ExportFile(
int index,
const char *filename, MQDocument doc);
42 public:
virtual BOOL ImportFile(
int index,
const char *filename, MQDocument doc);
45 public:
virtual BOOL Initialize();
48 public:
virtual BOOL IsActivated(MQDocument doc);
51 public:
virtual void OnMinimize(MQDocument doc, BOOL flag);
54 public:
virtual int OnReceiveUserMessage(MQDocument doc, DWORD src_product, DWORD src_id,
const char *description,
void *message);
57 public:
virtual void OnDraw(MQDocument doc, MQScene scene,
int width,
int height);
60 public:
virtual void OnNewDocument(MQDocument doc,
const char *filename, MQStationPlugin::NEW_DOCUMENT_PARAM& param);
63 public:
virtual void OnEndDocument(MQDocument doc);
66 public:
virtual void OnSaveDocument(MQDocument doc,
const char *filename, MQStationPlugin::SAVE_DOCUMENT_PARAM& param);
69 public:
virtual BOOL OnUndo(MQDocument doc,
int undo_state);
72 public:
virtual BOOL OnRedo(MQDocument doc,
int redo_state);
75 public:
virtual void OnUpdateUndo(MQDocument doc,
int undo_state,
int undo_size);
78 public:
virtual void OnObjectModified(MQDocument doc);
81 public:
virtual void OnObjectSelected(MQDocument doc);
84 public:
virtual void OnUpdateObjectList(MQDocument doc);
87 public:
virtual void OnMaterialModified(MQDocument doc);
90 public:
virtual void OnUpdateMaterialList(MQDocument doc);
93 public:
virtual void OnUpdateScene(MQDocument doc, MQScene scene);
96 public:
virtual bool ExecuteCallback(MQDocument doc,
void *option);
99 public:
virtual BOOL OnLeftButtonDown(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
102 public:
virtual BOOL OnLeftButtonMove(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
105 public:
virtual BOOL OnLeftButtonUp(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
108 public:
virtual BOOL OnMiddleButtonDown(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
111 public:
virtual BOOL OnMiddleButtonMove(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
114 public:
virtual BOOL OnMiddleButtonUp(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
117 public:
virtual BOOL OnRightButtonDown(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
120 public:
virtual BOOL OnRightButtonMove(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
123 public:
virtual BOOL OnRightButtonUp(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
126 public:
virtual BOOL OnMouseMove(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
129 public:
virtual BOOL OnMouseWheel(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
132 public:
virtual BOOL OnKeyDown(MQDocument doc, MQScene scene,
int key, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
135 public:
virtual BOOL OnKeyUp(MQDocument doc, MQScene scene,
int key, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
138 public:
property MQBasePlugin* basePlugin {
virtual MQBasePlugin*
get(); }
157 Lock( System::Object^ pObject );
160 System::Object^ m_pObject;
167 public ref class MQWndHandle : System::Windows::Forms::IWin32Window
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();
177 System::IntPtr m_Handle;
190 System::String^
Repeat(System::String^ src,
int ct);
197 m_Builder =
gcnew System::Text::StringBuilder();
198 this->IndentUnit = IndentUnit;
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; }
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) );
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(); }
214 System::String^ m_IndentUnit;
215 System::Text::StringBuilder^ m_Builder;
219 System::String^
FromException(System::Exception^ ex, System::String^ indentUnit,
int indentDepth );
221 inline System::String^
FromException(System::Exception^ ex, System::String^ indentUnit ) {
232 template <
typename T>
class StationPluginDefaultTemplate :
public T {
234 StationPluginDefaultTemplate(){}
235 virtual void GetPlugInID(DWORD*,DWORD*) { }
236 virtual const char *GetPlugInName(
void) {
return NULL; }
237 virtual const char *EnumString(
void) {
return NULL; }
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);
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); }
252 template <
typename T>
class CommandPluginDefaultTemplate :
public StationPluginDefaultTemplate<T> {
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); }
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;
274 public ref class PluginMainHolder {
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);
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);
312 static System::Object^ m_lock =
gcnew System::Object();
313 static IBasePlugin^ m_pluginMain =
nullptr;
314 static bool m_firstRequestFailedFlag =
false;
319 template <
typename T>
class Adapter :
public T {
321 typedef T PluginType;
322 MQObject CreateDrawingObject( MQDocument doc, MQStationPlugin::DRAW_OBJECT_VIISIBILITY visibility, BOOL instant ) {
323 return T::CreateDrawingObject(doc,visibility,instant);
325 MQMaterial CreateDrawingMaterial( MQDocument doc,
int& index, BOOL instant ) {
326 return T::CreateDrawingMaterial( doc, index, instant );
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);
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); }
347 virtual bool ExecuteCallback(MQDocument doc,
void *option) {
348 return PluginMainHolder::ExecuteCallback(doc, option);
350 virtual void Exit() {
351 PluginMainHolder::Exit();
353 virtual BOOL Activate(MQDocument doc, BOOL flag) {
354 return PluginMainHolder::Activate(doc, flag);
356 virtual BOOL IsActivated(MQDocument doc) {
357 return PluginMainHolder::IsActivated(doc);
359 virtual void OnMinimize(MQDocument doc, BOOL flag) {
360 PluginMainHolder::OnMinimize(doc, flag);
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);
365 virtual void OnDraw(MQDocument doc, MQScene scene,
int width,
int height) {
366 PluginMainHolder::OnDraw(doc, scene, width, height);
368 virtual void OnNewDocument(MQDocument doc,
const char *filename, MQStationPlugin::NEW_DOCUMENT_PARAM& param) {
369 PluginMainHolder::OnNewDocument(doc, filename, param);
371 virtual void OnEndDocument(MQDocument doc) {
372 PluginMainHolder::OnEndDocument(doc);
374 virtual void OnSaveDocument(MQDocument doc,
const char *filename, MQStationPlugin::SAVE_DOCUMENT_PARAM& param) {
375 PluginMainHolder::OnSaveDocument(doc, filename, param);
377 virtual BOOL OnUndo(MQDocument doc,
int undo_state) {
378 return PluginMainHolder::OnUndo(doc, undo_state);
380 virtual BOOL OnRedo(MQDocument doc,
int redo_state) {
381 return PluginMainHolder::OnRedo(doc, redo_state);
383 virtual void OnUpdateUndo(MQDocument doc,
int undo_state,
int undo_size) {
384 PluginMainHolder::OnUpdateUndo(doc, undo_state, undo_size);
386 virtual void OnObjectModified(MQDocument doc) {
387 PluginMainHolder::OnObjectModified(doc);
389 virtual void OnObjectSelected(MQDocument doc) {
390 PluginMainHolder::OnObjectSelected(doc);
392 virtual void OnUpdateObjectList(MQDocument doc) {
393 PluginMainHolder::OnUpdateObjectList(doc);
395 virtual void OnMaterialModified(MQDocument doc) {
396 PluginMainHolder::OnMaterialModified(doc);
398 virtual void OnUpdateMaterialList(MQDocument doc) {
399 PluginMainHolder::OnUpdateMaterialList(doc);
401 virtual void OnUpdateScene(MQDocument doc, MQScene scene) {
402 PluginMainHolder::OnUpdateScene(doc, scene);
408 class StationPluginsUnmanaged :
public MQ0x::PluginBase<Adapter<MQStationPlugin>> {
410 StationPluginsUnmanaged(
const char* productName,
const char* pluginFullName,
const char* displayName,
const DWORD idProduct,
const DWORD idPlugin )
411 : PluginBase( productName, pluginFullName, displayName, idProduct, idPlugin )
416 class CommandPluginsUnmanaged :
public MQ0x::PluginBase<Adapter<MQCommandPlugin>> {
418 CommandPluginsUnmanaged(
const char* productName,
const char* pluginFullName,
const char* displayName,
const DWORD idProduct,
const DWORD idPlugin )
419 : PluginBase( productName, pluginFullName, displayName, idProduct, idPlugin )
422 virtual BOOL IsActivated(MQDocument doc) {
423 return PluginMainHolder::IsActivated(doc);
425 virtual BOOL OnLeftButtonDown(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state) {
426 return PluginMainHolder::OnLeftButtonDown(doc, scene, state);
428 virtual BOOL OnLeftButtonMove(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state) {
429 return PluginMainHolder::OnLeftButtonMove(doc, scene, state);
431 virtual BOOL OnLeftButtonUp(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state) {
432 return PluginMainHolder::OnLeftButtonUp(doc, scene, state);
434 virtual BOOL OnMiddleButtonDown(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state) {
435 return PluginMainHolder::OnMiddleButtonDown(doc, scene, state);
437 virtual BOOL OnMiddleButtonMove(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state) {
438 return PluginMainHolder::OnMiddleButtonMove(doc, scene, state);
440 virtual BOOL OnMiddleButtonUp(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state) {
441 return PluginMainHolder::OnMiddleButtonUp(doc, scene, state);
443 virtual BOOL OnRightButtonDown(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state) {
444 return PluginMainHolder::OnRightButtonDown(doc, scene, state);
446 virtual BOOL OnRightButtonMove(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state) {
447 return PluginMainHolder::OnRightButtonMove(doc, scene, state);
449 virtual BOOL OnRightButtonUp(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state) {
450 return PluginMainHolder::OnRightButtonUp(doc, scene, state);
452 virtual BOOL OnMouseMove(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state) {
453 return PluginMainHolder::OnMouseMove(doc, scene, state);
455 virtual BOOL OnMouseWheel(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state) {
456 return PluginMainHolder::OnMouseWheel(doc, scene, state);
458 virtual BOOL OnKeyDown(MQDocument doc, MQScene scene,
int key, MQCommandPlugin::MOUSE_BUTTON_STATE& state) {
459 return PluginMainHolder::OnKeyDown(doc, scene, key, state);
461 virtual BOOL OnKeyUp(MQDocument doc, MQScene scene,
int key, MQCommandPlugin::MOUSE_BUTTON_STATE& state) {
462 return PluginMainHolder::OnKeyUp(doc, scene, key, state);
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);
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();
525 const char* EnumString();
527 property MQStationPlugin* stationPlugin {
virtual MQStationPlugin*
get()
abstract; }
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);
583 template <
class T_MANAGEDBASE,
class T_UNMANAGED>
586 StationPluginTemplate(
const char* productName,
const char* pluginFullName,
const char* displayName ) :
587 m_pluginBody(
new T_UNMANAGED( productName, pluginFullName, displayName,
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 ) ) {}
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();
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);
624 MQObject CreateDrawingObject( MQDocument doc, DRAW_OBJECT_VIISIBILITY visibility ) {
625 return CreateDrawingObject(doc,visibility,TRUE);
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);
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);
636 void DeleteDrawingMaterial(MQDocument doc, MQMaterial mat) {
637 if ( m_pluginBody != NULL ) m_pluginBody->DeleteDrawingMaterial(doc,mat);
638 PluginDefault().DeleteDrawingMaterial(doc,mat);
640 int GetCurrentUndoState(MQDocument doc) {
641 if ( m_pluginBody != NULL )
return m_pluginBody->GetCurrentUndoState(doc);
642 return PluginDefault().GetCurrentUndoState(doc);
644 void GetSceneOption(MQScene scene, SCENE_OPTION& option) {
if ( m_pluginBody != NULL ) m_pluginBody->GetSceneOption(scene,option); }
646 T_UNMANAGED *m_pluginBody;
651 StationPlugin(
const char* productName,
const char* pluginFullName,
const char* displayName ) :
653 StationPlugin(
const char* productName,
const char* pluginFullName,
const char* displayName,
const DWORD idProduct,
const DWORD idPlugin ) :
659 CommandPlugin(
const char* productName,
const char* pluginFullName,
const char* displayName ) :
661 CommandPlugin(
const char* productName,
const char* pluginFullName,
const char* displayName,
const DWORD idProduct,
const DWORD idPlugin ) :
665 if ( pluginBody != NULL ) pluginBody->UpdateUndo();
666 PluginDefault().UpdateUndo();
668 void RedrawScene(MQScene scene){
669 if ( pluginBody != NULL ) pluginBody->RedrawScene(scene);
670 PluginDefault().RedrawScene(scene);
672 void RedrawAllScene() {
673 if ( pluginBody != NULL ) pluginBody->RedrawAllScene();
674 PluginDefault().RedrawAllScene();
676 void GetEditOption(MQCommandPlugin::EDIT_OPTION& option) {
677 if ( pluginBody != NULL ) pluginBody->GetEditOption(option);
678 PluginDefault().GetEditOption(option);
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);
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);
688 HCURSOR GetResourceCursor(MQCommandPlugin::MQCURSOR_TYPE cursor_type) {
689 if ( pluginBody != NULL )
return pluginBody->GetResourceCursor(cursor_type);
690 return PluginDefault().GetResourceCursor(cursor_type);
692 void SetMouseCursor(HCURSOR cursor) {
693 if ( pluginBody != NULL ) pluginBody->SetMouseCursor(cursor);
694 PluginDefault().SetMouseCursor(cursor);
696 void SetStatusString(
const char *str) {
697 if ( pluginBody != NULL ) pluginBody->SetStatusString(str);
698 PluginDefault().SetStatusString(str);