12 #ifdef __cplusplus_cli
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 );
161 System::Object^ m_pObject;
166 public ref class MQWndHandle : System::Windows::Forms::IWin32Window
169 MQWndHandle() { m_Handle = (System::IntPtr)MQ_GetWindowHandle(); }
170 virtual property System::IntPtr Handle { System::IntPtr
get() {
return m_Handle; } }
171 static operator System::IntPtr (
MQWndHandle^ src ) {
172 if ( src !=
nullptr )
return src->Handle;
173 return System::IntPtr();
176 System::IntPtr m_Handle;
190 void DrawTriangle( System::Drawing::Graphics^ g, array<System::Drawing::Point>^ points, array<System::Drawing::Color>^ colors,
float border_radius,
bool isExcludeInside =
true );
198 void DrawTriangle( System::Drawing::Graphics^ g, array<System::Drawing::PointF>^ points, array<System::Drawing::Color>^ colors,
float border_radius,
bool isExcludeInside =
true );
204 void FillTriangle( System::Drawing::Graphics^ g, array<System::Drawing::Point>^ points, array<System::Drawing::Color>^ colors );
210 void FillTriangle( System::Drawing::Graphics^ g, array<System::Drawing::PointF>^ points, array<System::Drawing::Color>^ colors );
218 template <
typename T>
class StationPluginDefaultTemplate :
public T {
220 StationPluginDefaultTemplate(){}
221 virtual void GetPlugInID(DWORD*,DWORD*) { }
222 virtual const char *GetPlugInName(
void) {
return NULL; }
223 virtual const char *EnumString(
void) {
return NULL; }
225 virtual BOOL Activate(MQDocument doc, BOOL flag) {
return TRUE; }
226 virtual void Exit() {}
227 typedef typename T::DRAW_OBJECT_VIISIBILITY DRAW_OBJECT_VIISIBILITY;
228 typedef typename T::SCENE_OPTION SCENE_OPTION;
229 MQObject CreateDrawingObject(MQDocument doc,
typename T::DRAW_OBJECT_VIISIBILITY visibility, BOOL instant) {
230 return T::CreateDrawingObject(doc,visibility,instant);
232 MQMaterial CreateDrawingMaterial(MQDocument doc,
int& index, BOOL instant) {
return T::CreateDrawingMaterial(doc,index,instant); }
233 void DeleteDrawingObject(MQDocument doc, MQObject obj) { T::DeleteDrawingObject(doc,obj); }
234 void DeleteDrawingMaterial(MQDocument doc, MQMaterial mat) { T::DeleteDrawingMaterial(doc,mat); }
235 int GetCurrentUndoState(MQDocument doc) {
return T::GetCurrentUndoState(doc); }
236 void GetSceneOption(MQScene scene,
typename T::SCENE_OPTION& option) { T::GetSceneOption(scene,option); }
238 template <
typename T>
class CommandPluginDefaultTemplate :
public StationPluginDefaultTemplate<T> {
240 CommandPluginDefaultTemplate(){}
241 void UpdateUndo() { T::UpdateUndo(); }
242 void RedrawScene(MQScene scene) { T::RedrawScene(scene); }
243 void RedrawAllScene() { T::RedrawAllScene(); }
244 void GetEditOption(
typename T::EDIT_OPTION& option) { T::GetEditOption(option); }
245 MQPoint GetSnappedPos(MQScene scene,
const MQPoint& p,
typename T::SNAP_GRID_TYPE type) {
return T::GetSnappedPos(scene,p,type); }
246 BOOL HitTest(MQScene scene, POINT p,
typename T::HIT_TEST_PARAM& param) {
return T::HitTest(scene,p,param); }
247 HCURSOR GetResourceCursor(
typename T::MQCURSOR_TYPE cursor_type) {
return T::GetResourceCursor(cursor_type); }
248 void SetMouseCursor(HCURSOR cursor) { T::SetMouseCursor(cursor); }
249 void SetStatusString(
const char *str) { T::SetStatusString(str); }
252 template <
typename T>
class PluginDefault;
253 template <>
class PluginDefault<MQStationPlugin> :
public StationPluginDefaultTemplate<MQStationPlugin> {
public: PluginDefault(){} };
254 template <>
class PluginDefault<MQCommandPlugin> :
public CommandPluginDefaultTemplate<MQCommandPlugin> {
public: PluginDefault(){} };
256 typedef PluginDefault<MQCommandPlugin> CommandPluginDefault;
260 public ref class PluginMainHolder {
262 static bool Regist( IBasePlugin^ pluginBody );
263 static property MQBasePlugin* pluginMain { MQBasePlugin*
get(); }
264 static BOOL Activate(MQDocument doc, BOOL flag);
265 static bool ExecuteCallback(MQDocument doc,
void *option);
268 static BOOL IsActivated(MQDocument doc);
269 static void OnMinimize(MQDocument doc, BOOL flag);
270 static int OnReceiveUserMessage(MQDocument doc, DWORD src_product, DWORD src_id,
const char *description,
void *message);
271 static void OnDraw(MQDocument doc, MQScene scene,
int Width,
int Height);
272 static void OnNewDocument(MQDocument doc,
const char *filename, MQStationPlugin::NEW_DOCUMENT_PARAM& param);
273 static void OnEndDocument(MQDocument doc);
274 static void OnSaveDocument(MQDocument doc,
const char *filename, MQStationPlugin::SAVE_DOCUMENT_PARAM& param);
275 static BOOL OnUndo(MQDocument doc,
int undo_state);
276 static BOOL OnRedo(MQDocument doc,
int redo_state);
277 static void OnUpdateUndo(MQDocument doc,
int undo_state,
int undo_size);
278 static void OnObjectModified(MQDocument doc);
279 static void OnObjectSelected(MQDocument doc);
280 static void OnUpdateObjectList(MQDocument doc);
281 static void OnMaterialModified(MQDocument doc);
282 static void OnUpdateMaterialList(MQDocument doc);
283 static void OnUpdateScene(MQDocument doc, MQScene scene);
284 static BOOL OnLeftButtonDown(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
285 static BOOL OnLeftButtonMove(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
286 static BOOL OnLeftButtonUp(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
287 static BOOL OnMiddleButtonDown(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
288 static BOOL OnMiddleButtonMove(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
289 static BOOL OnMiddleButtonUp(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
290 static BOOL OnRightButtonDown(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
291 static BOOL OnRightButtonMove(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
292 static BOOL OnRightButtonUp(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
293 static BOOL OnMouseMove(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
294 static BOOL OnMouseWheel(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
295 static BOOL OnKeyDown(MQDocument doc, MQScene scene,
int key, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
296 static BOOL OnKeyUp(MQDocument doc, MQScene scene,
int key, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
298 static System::Object^ m_lock =
gcnew System::Object();
299 static IBasePlugin^ m_pluginMain =
nullptr;
300 static bool m_firstRequestFailedFlag =
false;
305 template <
typename T>
class Adapter :
public T {
307 typedef T PluginType;
308 MQObject CreateDrawingObject( MQDocument doc, MQStationPlugin::DRAW_OBJECT_VIISIBILITY visibility, BOOL instant ) {
309 return T::CreateDrawingObject(doc,visibility,instant);
311 MQMaterial CreateDrawingMaterial( MQDocument doc,
int& index, BOOL instant ) {
312 return T::CreateDrawingMaterial( doc, index, instant );
314 void DeleteDrawingObject(MQDocument doc, MQObject obj) { T::DeleteDrawingObject(doc,obj); }
315 void DeleteDrawingMaterial(MQDocument doc, MQMaterial mat) { T::DeleteDrawingMaterial(doc,mat); }
316 int GetCurrentUndoState(MQDocument doc) {
return T::GetCurrentUndoState(doc); }
317 void GetSceneOption(MQScene scene, MQStationPlugin::SCENE_OPTION& option) { T::GetSceneOption(scene,option); }
318 void UpdateUndo() { T::UpdateUndo(); }
319 void RedrawScene(MQScene scene){ T::RedrawScene(scene); }
320 void RedrawAllScene() { T::RedrawAllScene(); }
321 void GetEditOption(MQCommandPlugin::EDIT_OPTION& option) { T::GetEditOption(option); }
322 MQPoint GetSnappedPos(MQScene scene,
const MQPoint& p, MQCommandPlugin::SNAP_GRID_TYPE type) {
323 return T::GetSnappedPos(scene,p,type);
325 BOOL HitTest(MQScene scene, POINT p, MQCommandPlugin::HIT_TEST_PARAM& param) {
return T::HitTest(scene, p, param); }
326 HCURSOR GetResourceCursor(MQCommandPlugin::MQCURSOR_TYPE cursor_type) {
return T::GetResourceCursor(cursor_type); }
327 void SetMouseCursor(HCURSOR cursor) { T::SetMouseCursor(cursor); }
328 void SetStatusString(
const char *str) { T::SetStatusString(str); }
333 virtual bool ExecuteCallback(MQDocument doc,
void *option) {
334 return PluginMainHolder::ExecuteCallback(doc, option);
336 virtual void Exit() {
337 PluginMainHolder::Exit();
339 virtual BOOL Activate(MQDocument doc, BOOL flag) {
340 return PluginMainHolder::Activate(doc, flag);
342 virtual BOOL IsActivated(MQDocument doc) {
343 return PluginMainHolder::IsActivated(doc);
345 virtual void OnMinimize(MQDocument doc, BOOL flag) {
346 PluginMainHolder::OnMinimize(doc, flag);
348 virtual int OnReceiveUserMessage(MQDocument doc, DWORD src_product, DWORD src_id,
const char *description,
void *message) {
349 return PluginMainHolder::OnReceiveUserMessage(doc, src_product, src_id, description, message);
351 virtual void OnDraw(MQDocument doc, MQScene scene,
int Width,
int Height) {
352 PluginMainHolder::OnDraw(doc, scene, Width, Height);
354 virtual void OnNewDocument(MQDocument doc,
const char *filename, MQStationPlugin::NEW_DOCUMENT_PARAM& param) {
355 PluginMainHolder::OnNewDocument(doc, filename, param);
357 virtual void OnEndDocument(MQDocument doc) {
358 PluginMainHolder::OnEndDocument(doc);
360 virtual void OnSaveDocument(MQDocument doc,
const char *filename, MQStationPlugin::SAVE_DOCUMENT_PARAM& param) {
361 PluginMainHolder::OnSaveDocument(doc, filename, param);
363 virtual BOOL OnUndo(MQDocument doc,
int undo_state) {
364 return PluginMainHolder::OnUndo(doc, undo_state);
366 virtual BOOL OnRedo(MQDocument doc,
int redo_state) {
367 return PluginMainHolder::OnRedo(doc, redo_state);
369 virtual void OnUpdateUndo(MQDocument doc,
int undo_state,
int undo_size) {
370 PluginMainHolder::OnUpdateUndo(doc, undo_state, undo_size);
372 virtual void OnObjectModified(MQDocument doc) {
373 PluginMainHolder::OnObjectModified(doc);
375 virtual void OnObjectSelected(MQDocument doc) {
376 PluginMainHolder::OnObjectSelected(doc);
378 virtual void OnUpdateObjectList(MQDocument doc) {
379 PluginMainHolder::OnUpdateObjectList(doc);
381 virtual void OnMaterialModified(MQDocument doc) {
382 PluginMainHolder::OnMaterialModified(doc);
384 virtual void OnUpdateMaterialList(MQDocument doc) {
385 PluginMainHolder::OnUpdateMaterialList(doc);
387 virtual void OnUpdateScene(MQDocument doc, MQScene scene) {
388 PluginMainHolder::OnUpdateScene(doc, scene);
394 class StationPluginsUnmanaged :
public MQ0x::PluginBase<Adapter<MQStationPlugin>> {
396 StationPluginsUnmanaged(
const char* productName,
const char* pluginFullName,
const char* displayName,
const DWORD idProduct,
const DWORD idPlugin )
397 : PluginBase( productName, pluginFullName, displayName, idProduct, idPlugin )
402 class CommandPluginsUnmanaged :
public MQ0x::PluginBase<Adapter<MQCommandPlugin>> {
404 CommandPluginsUnmanaged(
const char* productName,
const char* pluginFullName,
const char* displayName,
const DWORD idProduct,
const DWORD idPlugin )
405 : PluginBase( productName, pluginFullName, displayName, idProduct, idPlugin )
408 virtual BOOL IsActivated(MQDocument doc) {
409 return PluginMainHolder::IsActivated(doc);
411 virtual BOOL OnLeftButtonDown(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state) {
412 return PluginMainHolder::OnLeftButtonDown(doc, scene, state);
414 virtual BOOL OnLeftButtonMove(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state) {
415 return PluginMainHolder::OnLeftButtonMove(doc, scene, state);
417 virtual BOOL OnLeftButtonUp(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state) {
418 return PluginMainHolder::OnLeftButtonUp(doc, scene, state);
420 virtual BOOL OnMiddleButtonDown(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state) {
421 return PluginMainHolder::OnMiddleButtonDown(doc, scene, state);
423 virtual BOOL OnMiddleButtonMove(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state) {
424 return PluginMainHolder::OnMiddleButtonMove(doc, scene, state);
426 virtual BOOL OnMiddleButtonUp(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state) {
427 return PluginMainHolder::OnMiddleButtonUp(doc, scene, state);
429 virtual BOOL OnRightButtonDown(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state) {
430 return PluginMainHolder::OnRightButtonDown(doc, scene, state);
432 virtual BOOL OnRightButtonMove(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state) {
433 return PluginMainHolder::OnRightButtonMove(doc, scene, state);
435 virtual BOOL OnRightButtonUp(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state) {
436 return PluginMainHolder::OnRightButtonUp(doc, scene, state);
438 virtual BOOL OnMouseMove(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state) {
439 return PluginMainHolder::OnMouseMove(doc, scene, state);
441 virtual BOOL OnMouseWheel(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state) {
442 return PluginMainHolder::OnMouseWheel(doc, scene, state);
444 virtual BOOL OnKeyDown(MQDocument doc, MQScene scene,
int key, MQCommandPlugin::MOUSE_BUTTON_STATE& state) {
445 return PluginMainHolder::OnKeyDown(doc, scene, key, state);
447 virtual BOOL OnKeyUp(MQDocument doc, MQScene scene,
int key, MQCommandPlugin::MOUSE_BUTTON_STATE& state) {
448 return PluginMainHolder::OnKeyUp(doc, scene, key, state);
480 virtual BOOL Activate(MQDocument doc, BOOL flag) {
return TRUE; }
481 virtual void Exit() {}
482 virtual BOOL Initialize() {
return TRUE; }
483 virtual bool ExecuteCallback(MQDocument doc,
void *option);
484 virtual BOOL IsActivated(MQDocument doc);
485 virtual void OnMinimize(MQDocument doc, BOOL flag);
486 virtual int OnReceiveUserMessage(MQDocument doc, DWORD src_product, DWORD src_id,
const char *description,
void *message);
487 virtual void OnDraw(MQDocument doc, MQScene scene,
int Width,
int Height);
488 virtual void OnNewDocument(MQDocument doc,
const char *filename, MQStationPlugin::NEW_DOCUMENT_PARAM& param);
489 virtual void OnEndDocument(MQDocument doc);
490 virtual void OnSaveDocument(MQDocument doc,
const char *filename, MQStationPlugin::SAVE_DOCUMENT_PARAM& param);
491 virtual BOOL OnUndo(MQDocument doc,
int undo_state);
492 virtual BOOL OnRedo(MQDocument doc,
int redo_state);
493 virtual void OnUpdateUndo(MQDocument doc,
int undo_state,
int undo_size);
494 virtual void OnObjectModified(MQDocument doc);
495 virtual void OnObjectSelected(MQDocument doc);
496 virtual void OnUpdateObjectList(MQDocument doc);
497 virtual void OnMaterialModified(MQDocument doc);
498 virtual void OnUpdateMaterialList(MQDocument doc);
499 virtual void OnUpdateScene(MQDocument doc, MQScene scene);
500 property MQBasePlugin* basePlugin {
virtual MQBasePlugin*
get()
abstract; }
501 int SendUserMessage(MQDocument doc, DWORD target_product, DWORD target_id,
const char *description,
void *param);
503 void BeginCallback(
void *option);
504 void GetPlugInID(DWORD *Product, DWORD *ID);
505 property DWORD ProductID { DWORD
get(); }
506 property DWORD PluginID { DWORD
get(); }
507 const char* GetPlugInName();
509 const char* EnumString();
511 property MQStationPlugin* stationPlugin {
virtual MQStationPlugin*
get()
abstract; }
533 virtual BOOL OnLeftButtonDown(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
534 virtual BOOL OnLeftButtonMove(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
535 virtual BOOL OnLeftButtonUp(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
536 virtual BOOL OnMiddleButtonDown(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
537 virtual BOOL OnMiddleButtonMove(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
538 virtual BOOL OnMiddleButtonUp(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
539 virtual BOOL OnRightButtonDown(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
540 virtual BOOL OnRightButtonMove(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
541 virtual BOOL OnRightButtonUp(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
542 virtual BOOL OnMouseMove(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
543 virtual BOOL OnMouseWheel(MQDocument doc, MQScene scene, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
544 virtual BOOL OnKeyDown(MQDocument doc, MQScene scene,
int key, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
545 virtual BOOL OnKeyUp(MQDocument doc, MQScene scene,
int key, MQCommandPlugin::MOUSE_BUTTON_STATE& state);
556 template <
class T_MANAGEDBASE,
class T_UNMANAGED>
559 StationPluginTemplate(
const char* productName,
const char* pluginFullName,
const char* displayName ) :
560 m_pluginBody(
new T_UNMANAGED( productName, pluginFullName, displayName,
562 StationPluginTemplate(
const char* productName,
const char* pluginFullName,
const char* displayName,
const DWORD idProduct,
const DWORD idPlugin ) :
563 m_pluginBody(
new T_UNMANAGED( productName, pluginFullName, displayName, idProduct, idPlugin ) ) {}
565 property MQBasePlugin* basePlugin {
virtual MQBasePlugin*
get()
override {
return static_cast<MQBasePlugin*
>(m_pluginBody); } }
581 if ( m_pluginBody == NULL )
return NULL;
582 return m_pluginBody->BasePlugin();
586 typedef PluginDefault<typename T_UNMANAGED::PluginType> PluginDefault;
587 typedef typename PluginDefault::DRAW_OBJECT_VIISIBILITY DRAW_OBJECT_VIISIBILITY;
588 typedef typename PluginDefault::SCENE_OPTION SCENE_OPTION;
589 property MQStationPlugin* stationPlugin {
virtual MQStationPlugin*
get()
override {
return m_pluginBody; } }
590 property T_UNMANAGED* pluginBody {
virtual T_UNMANAGED*
get() {
return m_pluginBody; } }
591 MQObject CreateDrawingObject( MQDocument doc, DRAW_OBJECT_VIISIBILITY visibility, BOOL instant ) {
592 if ( m_pluginBody != NULL )
return m_pluginBody->CreateDrawingObject(doc,visibility,instant);
593 return PluginDefault().CreateDrawingObject(doc,visibility,instant);
595 MQObject CreateDrawingObject( MQDocument doc, DRAW_OBJECT_VIISIBILITY visibility ) {
596 return CreateDrawingObject(doc,visibility,TRUE);
598 MQMaterial CreateDrawingMaterial( MQDocument doc,
int& index, BOOL instant ) {
599 if ( m_pluginBody != NULL )
return m_pluginBody->CreateDrawingMaterial(doc,index,instant);
600 return PluginDefault().CreateDrawingMaterial(doc,index,instant);
602 MQMaterial CreateDrawingMaterial( MQDocument doc,
int& index ) {
return CreateDrawingMaterial(doc,index,TRUE); }
603 void DeleteDrawingObject(MQDocument doc, MQObject obj) {
604 if ( m_pluginBody != NULL ) m_pluginBody->DeleteDrawingObject(doc,obj);
605 PluginDefault().DeleteDrawingMaterial(doc,mat);
607 void DeleteDrawingMaterial(MQDocument doc, MQMaterial mat) {
608 if ( m_pluginBody != NULL ) m_pluginBody->DeleteDrawingMaterial(doc,mat);
609 PluginDefault().DeleteDrawingMaterial(doc,mat);
611 int GetCurrentUndoState(MQDocument doc) {
612 if ( m_pluginBody != NULL )
return m_pluginBody->GetCurrentUndoState(doc);
613 return PluginDefault().GetCurrentUndoState(doc);
615 void GetSceneOption(MQScene scene, SCENE_OPTION& option) {
if ( m_pluginBody != NULL ) m_pluginBody->GetSceneOption(scene,option); }
617 T_UNMANAGED *m_pluginBody;
622 StationPlugin(
const char* productName,
const char* pluginFullName,
const char* displayName ) :
624 StationPlugin(
const char* productName,
const char* pluginFullName,
const char* displayName,
const DWORD idProduct,
const DWORD idPlugin ) :
630 CommandPlugin(
const char* productName,
const char* pluginFullName,
const char* displayName ) :
632 CommandPlugin(
const char* productName,
const char* pluginFullName,
const char* displayName,
const DWORD idProduct,
const DWORD idPlugin ) :
636 if ( pluginBody != NULL ) pluginBody->UpdateUndo();
637 PluginDefault().UpdateUndo();
639 void RedrawScene(MQScene scene){
640 if ( pluginBody != NULL ) pluginBody->RedrawScene(scene);
641 PluginDefault().RedrawScene(scene);
643 void RedrawAllScene() {
644 if ( pluginBody != NULL ) pluginBody->RedrawAllScene();
645 PluginDefault().RedrawAllScene();
647 void GetEditOption(MQCommandPlugin::EDIT_OPTION& option) {
648 if ( pluginBody != NULL ) pluginBody->GetEditOption(option);
649 PluginDefault().GetEditOption(option);
651 MQPoint GetSnappedPos(MQScene scene,
const MQPoint& p, MQCommandPlugin::SNAP_GRID_TYPE type) {
652 if ( pluginBody != NULL )
return pluginBody->GetSnappedPos(scene,p,type);
653 return PluginDefault().GetSnappedPos(scene,p,type);
655 BOOL HitTest(MQScene scene, POINT p, MQCommandPlugin::HIT_TEST_PARAM& param) {
656 if ( pluginBody != NULL )
return pluginBody->HitTest(scene, p, param);
657 return PluginDefault().HitTest(scene,p,param);
659 HCURSOR GetResourceCursor(MQCommandPlugin::MQCURSOR_TYPE cursor_type) {
660 if ( pluginBody != NULL )
return pluginBody->GetResourceCursor(cursor_type);
661 return PluginDefault().GetResourceCursor(cursor_type);
663 void SetMouseCursor(HCURSOR cursor) {
664 if ( pluginBody != NULL ) pluginBody->SetMouseCursor(cursor);
665 PluginDefault().SetMouseCursor(cursor);
667 void SetStatusString(
const char *str) {
668 if ( pluginBody != NULL ) pluginBody->SetStatusString(str);
669 PluginDefault().SetStatusString(str);
674 using namespace Plugins;