00001
00011
00012
00013 #if (_MSC_VER > 1000) || defined(SGI_COMPILER)
00014 #pragma once
00015 #endif
00016
00017 #ifndef __XSITOOLCONTEXT_H__
00018 #define __XSITOOLCONTEXT_H__
00019
00020 #include <xsi_context.h>
00021 #include <xsi_line.h>
00022 #include <xsi_plane.h>
00023 #include <xsi_image.h>
00024 #include <xsi_camera.h>
00025 #include <xsi_kinematicstate.h>
00026 #include <xsi_pickbuffer.h>
00027
00028 namespace XSI {
00029
00030
00375
00376
00377 class SICPPSDKDECL ToolContext : public Context
00378 {
00379 public:
00381 ToolContext();
00382
00384 ~ToolContext();
00385
00389 ToolContext(const CRef& in_ref);
00390
00394 ToolContext(const ToolContext& in_obj);
00395
00400 bool IsA( siClassID in_ClassID) const;
00401
00405 siClassID GetClassID() const;
00406
00411 ToolContext& operator=(const ToolContext& in_obj);
00412
00418 ToolContext& operator=(const CRef& in_ref);
00419
00420
00424
00431 CStatus GetMousePosition( LONG &x, LONG &y ) const;
00432
00435 bool IsLeftButtonDown() const;
00436
00439 bool IsMiddleButtonDown() const;
00440
00443 bool IsRightButtonDown() const;
00444
00447 bool IsDoubleClick() const;
00448
00451 bool IsShiftKeyDown() const;
00452
00455 bool IsControlKeyDown() const;
00456
00465 CStatus RegisterShortcutKey( ULONG in_virtualKeycode, const CString &in_description, ULONG in_modifiers = 0, bool in_repeats = false );
00466
00473 CStatus UnRegisterShortcutKey( ULONG in_virtualKeycode, ULONG in_modifiers = 0 );
00481 bool IsShortcutKeyDown( ULONG in_virtualKeycode, ULONG in_modifiers = 0 ) const;
00482
00486 ULONG GetShortcutKey() const;
00487
00491 ULONG GetShortcutKeyModifiers() const;
00494
00498
00505 CStatus GetViewSize( LONG &width, LONG &height ) const;
00506
00516 CStatus GetViewport( LONG &x, LONG &y, LONG &width, LONG &height ) const;
00517
00520 bool IsInteracting() const;
00521
00524 bool IsActiveView() const;
00525
00528 bool IsNavigating() const;
00529
00534 LONG GetViewIndex() const;
00535
00539 Camera GetCamera() const;
00540
00543
00547
00553 CStatus SetCursor( siToolCursor in_cursorId );
00554
00560 CStatus SetToolDescription( const CString &in_message );
00561
00567 CStatus EnableSnapping( bool in_enable );
00568
00574 CStatus GetViewPlane( MATH::CPlane &out_plane ) const;
00575
00581 CStatus GetGridPlane( MATH::CPlane &out_plane ) const;
00582
00588 CStatus SetManipulationPlane( const MATH::CPlane &in_plane );
00589
00594 CStatus ClearManipulationPlane();
00595
00598 bool WasAborted() const;
00599
00604 CStatus ExitTool();
00605
00610 bool GetFlag( LONG in_flag ) const;
00611
00619 CStatus SetFlag( LONG in_flag, bool in_enable );
00625
00636 CStatus GetWorldPosition( LONG x, LONG y, MATH::CVector3 &out_world ) const;
00637
00648 CStatus GetWorldRay( LONG x, LONG y, MATH::CLine &out_ray ) const;
00649
00659 CStatus WorldToView( const MATH::CVector3 &in_world, MATH::CVector3 &out_view ) const;
00660
00668 CStatus ViewToWorld( const MATH::CVector3 &in_view, MATH::CVector3 &out_world ) const;
00669
00677 CStatus WorldToCamera( const MATH::CVector3 &in_world, MATH::CVector3 &out_camera ) const;
00678
00686 CStatus CameraToWorld( const MATH::CVector3 &in_view, MATH::CVector3 &out_world ) const;
00687
00693 CStatus GetWorldToViewMatrix( MATH::CMatrix4 &out_worldToView ) const;
00694
00700 CStatus GetWorldToCameraMatrix( MATH::CMatrix4 &out_worldToCamera ) const;
00706
00713 CStatus Redraw( bool in_allViews = true );
00714
00722 CStatus DrawTextString( const CString &in_str, siAlignment in_hPos = siLeftAlign, siAlignment in_vPos = siBottomAlign );
00723
00732 CStatus GetTextSize( const CString &in_str, LONG &out_width, LONG &out_height, LONG &out_descent ) const;
00733
00744 CStatus EditTextString( CString &io_str, LONG x, LONG y, LONG width, LONG height );
00745
00750 CStatus BeginViewDraw();
00751
00756 CStatus EndViewDraw();
00757
00760 bool IsViewDraw() const;
00761
00772 CStatus BeginPickDraw( LONG x, LONG y, LONG width, LONG height);
00773
00778 CStatus EndPickDraw();
00779
00782 bool IsPickDraw() const;
00785
00789
00797 CStatus BeginParameterUpdate(const Parameter &in_param, double in_time = DBL_MAX);
00798
00807 CStatus UpdateParameter(const Parameter &in_param, const CValue &in_value);
00808
00816 CStatus EndParameterUpdate(const Parameter &in_param);
00817
00826 CStatus BeginKinematicStateUpdate(const KinematicState &in_kine, double in_time = DBL_MAX);
00827
00836 CStatus UpdateKinematicState(const KinematicState &in_kine, const MATH::CTransformation &in_value);
00837
00845 CStatus EndKinematicStateUpdate(const KinematicState &in_kine);
00846
00855 CStatus BeginTransformUpdate(const CRefArray &in_objects, double in_time = DBL_MAX);
00856
00872 CStatus UpdateTransform(
00873 const CRefArray & in_objects,
00874 const MATH::CTransformation & in_value,
00875 siTransformFilter in_srt,
00876 siRefMode in_refMode = siLocal,
00877 siDeltaMode in_delta = siRelative,
00878 siAxesFilter in_axesFilter = siXYZ,
00879 bool in_usePivot = false,
00880 const MATH::CVector3 & in_pivot = MATH::CVector3(),
00881 const MATH::CTransformation & in_reference = MATH::CTransformation()
00882 );
00883
00891 CStatus EndTransformUpdate(const CRefArray &in_objects);
00894
00898
00904 siSnapType GetSnapType() const;
00905
00911 CRef GetSnapObject() const;
00912
00918 CRef GetSnapComponent() const;
00919
00948 CStatus Snap( LONG x, LONG y, LONG size, ULONG in_snaptype, const CStringArray& in_families, const CRefArray &in_objects, MATH::CVector3 &out_world ) const;
00951
00955
01001 CStatus Pick( const CLongArray &in_points, siPickMode in_pickMode, siPickType in_pickType, const CString &in_filter, const CRefArray &in_objects, CRefArray &out_picked ) const;
01002
01034 PickBuffer GetPickBuffer( LONG x, LONG y, LONG width, LONG height, const CString &in_filter, const CRefArray &in_objects, siViewMode in_viewMode = siShaded ) const;
01037
01041
01052 CStatus ShowContextMenu( LONG x, LONG y, siAlignment in_hPos = siLeftAlign, siAlignment in_vPos = siTopAlign );
01055
01059
01065 Image LoadImageFromFile( const CString &in_filename, bool in_relativePath = true );
01068 private:
01069 ToolContext * operator&() const;
01070 ToolContext * operator&();
01071 };
01072
01073 };
01074 #endif // __XSITOOLCONTEXT_H__