xsi_toolcontext.h
Go to the documentation of this file.
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__