public static double GetFieldOfView(this ViewportInfo vpi)
        {
            //vpi.GetCameraAngles(out var halfDiagonal, out _, out _);
            //return halfDiagonal.ToDegrees();

            return(60);
        }
Esempio n. 2
0
        /// <summary>
        /// Initializes the camera on load...
        /// </summary>
        public void SetupCamera()
        {
            if (Camera == null)
            {
                LoadCamera();
            }

            // Fix up viewport values
            var cameraDir = Camera.CameraDirection;

            cameraDir.Unitize();
            Camera.SetCameraDirection(cameraDir);

            var cameraUp = Camera.CameraUp;

            cameraUp.Unitize();
            Camera.SetCameraUp(cameraUp);

            Renderer.Viewport = Camera;

            // save initial viewport settings for restoreView
            InitialPosition           = new ViewportInfo(Camera);
            LastPosition              = new ViewportInfo(Camera);
            CameraIsAtInitialPosition = true;

            GL.Viewport(0, 0, (int)View.Bounds.Size.Width, (int)View.Bounds.Size.Height);
        }
Esempio n. 3
0
 public static void BringCellToVisible(Excel excel, int viewCellRow, int viewCellColumn)
 {
     if ((excel != null) && (excel.ActiveSheet != null))
     {
         ViewportInfo viewportInfo              = excel.GetViewportInfo();
         int          activeRowViewportIndex    = excel.GetActiveRowViewportIndex();
         int          activeColumnViewportIndex = excel.GetActiveColumnViewportIndex();
         int          rowViewportIndex          = activeRowViewportIndex;
         int          columnViewportIndex       = activeColumnViewportIndex;
         if (activeRowViewportIndex == -1)
         {
             if (viewCellRow >= excel.ActiveSheet.FrozenRowCount)
             {
                 rowViewportIndex = 0;
             }
         }
         else if ((activeRowViewportIndex == viewportInfo.RowViewportCount) && (viewCellRow < (excel.ActiveSheet.RowCount - excel.ActiveSheet.FrozenTrailingRowCount)))
         {
             rowViewportIndex = viewportInfo.RowViewportCount - 1;
         }
         if (activeColumnViewportIndex == -1)
         {
             if (viewCellColumn >= excel.ActiveSheet.FrozenColumnCount)
             {
                 columnViewportIndex = 0;
             }
         }
         else if ((activeColumnViewportIndex == viewportInfo.ColumnViewportCount) && (viewCellColumn < (excel.ActiveSheet.ColumnCount - excel.ActiveSheet.FrozenTrailingColumnCount)))
         {
             columnViewportIndex = viewportInfo.ColumnViewportCount - 1;
         }
         BringCellToVisible(excel, rowViewportIndex, columnViewportIndex, viewCellRow, viewCellColumn);
     }
 }
Esempio n. 4
0
 public UserOperation_SetWaterbagInfo(long userId, ViewportInfo vi, Guid guid, float width, Microsoft.Xna.Framework.Vector2[] vecs)
     : base(userId, vi)
 {
     Guid  = guid;
     Width = width;
     Vecs  = vecs;
 }
Esempio n. 5
0
 public UserOperation_SetProperty(long userId, ViewportInfo vi, Guid guid, string propertyName, object value)
     : base(userId, vi)
 {
     Guid         = guid;
     PropertyName = propertyName;
     Value        = value;
 }
Esempio n. 6
0
        /// <summary>
        /// Rotate the camera about world z axis
        /// </summary>
        public static void RotateLeftRight(this ViewportInfo viewport, double angle)
        {
            var axis = Rhino.Geometry.Vector3d.ZAxis;

            Rhino.Geometry.Point3d center = viewport.TargetPoint;
            RotateView(viewport, axis, center, angle);
        }
Esempio n. 7
0
 public UserOperation_Trans(long userId, ViewportInfo vi, Guid guid, ElementTransitionInfo info, SizeF scale)
     : base(userId, vi)
 {
     Guid  = guid;
     Info  = info;
     Scale = scale;
 }
Esempio n. 8
0
 public void ResetOperations(ViewportInfo vi)
 {
     if (Operations.ContainsKey(vi))
     {
         Operations[vi].Clear();
     }
 }
Esempio n. 9
0
        private static bool CalcClippingPlanesInternal(ViewportInfo vp, ClippingInfo clipping)
        {
            bool isPerspective = vp.IsPerspectiveProjection;

            // iCalcBoundingBox() has set clipping.bbox and it cannot
            // be changed or ignored.
            GetBoundingBoxNearFarHelper(
                clipping.bbox,
                isPerspective,
                vp.CameraLocation,
                vp.CameraZ,
                clipping.bbox_near,
                clipping.bbox_far
                );

            // Do sanity checks and update ON_Viewport frustum if it uses
            // parallel projection and near <= 0.0
            CalcClippingPlanesHelper(clipping.bbox_near, clipping.bbox_far, vp);

            // Set target_dist
            clipping.target_dist = (vp.CameraLocation - vp.TargetPoint) * vp.CameraZ;
            if (double.IsNaN(clipping.target_dist))
            {
                clipping.target_dist = 0.5 * (clipping.bbox_near + clipping.bbox_far);
            }

            return(true);
        }
 public ElementInfo_Audio(ResourceInfo res, ViewportInfo vi, bool isPreview, System.Drawing.PointF pos)
     : base(res, vi, isPreview, pos)
 {
     Channel        = ProjectDoc.Instance.FModPlayer.CreateChannel(res.SubPathFileName);
     m_bPlaying     = isPreview;
     IsSoundLooping = isPreview;
 }
Esempio n. 11
0
        public static bool SetupFrustum(ViewportInfo vp, ClippingInfo clipping)
        {
            double n0 = vp.FrustumNear;
            double f0 = vp.FrustumFar;

            // Because picking relies heavily on the projection, we first set the
            // viewport frustum here, capture and save it, then let the conduits
            // do what ever they want with it...eventually the viewport will be put
            // back to the captured state before leaving the pipeline...
            ClippingInfo m_SavedClipping = clipping;

            vp.SetFrustumNearFar(clipping.bbox_near, clipping.bbox_far,
                                 clipping.min_near_dist, clipping.min_near_over_far,
                                 clipping.target_dist
                                 );

            vp.GetFrustum(out m_SavedClipping.left,
                          out m_SavedClipping.right,
                          out m_SavedClipping.bottom,
                          out m_SavedClipping.top,
                          out m_SavedClipping.bbox_near,
                          out m_SavedClipping.bbox_far);

            // Next, set the values that the pipeline will actually use...
            if (!(AdjustFrustum(vp, clipping)))
            {
                return(false);
            }

            return(true);
        }
Esempio n. 12
0
        private void ZoomExtentsWithGesture(UIGestureRecognizer gesture)
        {
            if (Camera == null)
            {
                return;
            }

            if (gesture.State == UIGestureRecognizerState.Ended)
            {
                ShouldStartRestoreToInitialPosition = CameraIsAtInitialPosition;

                ViewportInfo targetPosition = new ViewportInfo();

                if (ShouldStartRestoreToInitialPosition)
                {
                    // animate from current position (which is initial position) back to last position
                    targetPosition = LastPosition;
                }
                else
                {
                    // animate from current position to initial position
                    targetPosition = InitialPosition;
                    LastPosition   = new ViewportInfo(Camera);
                }

                StartRestoreViewTo(targetPosition);
            }
        }
Esempio n. 13
0
        /// <summary>
        /// 打印设置
        /// </summary>
        /// <param name="p_memento"></param>
        void Init(Memento p_memento)
        {
            Grid grid = VisualTreeHelper.GetParent(_excel) as Grid;

            p_memento.Height = grid.Height;
            p_memento.Width  = grid.Width;
            p_memento.VerticalScrollBarVisibility   = _excel.VerticalScrollBarVisibility;
            p_memento.HorizontalScrollBarVisibility = _excel.HorizontalScrollBarVisibility;
            p_memento.TabStripVisibility            = _excel.TabStripVisibility;
            p_memento.ShowRowRangeGroup             = _excel.ShowRowRangeGroup;
            p_memento.ShowColumnRangeGroup          = _excel.ShowColumnRangeGroup;
            p_memento.ShowFreezeLine = _excel.ShowFreezeLine;
            p_memento.ShowSelection  = _excel.ShowSelection;

            _excel.VerticalScrollBarVisibility   = ScrollBarVisibility.Hidden;
            _excel.HorizontalScrollBarVisibility = ScrollBarVisibility.Hidden;
            _excel.TabStripVisibility            = Visibility.Collapsed;
            _excel.ShowRowRangeGroup             = false;
            _excel.ShowColumnRangeGroup          = false;
            _excel.ShowSelection = false;
            _excel.HideDecorationWhenPrinting = true;
            _excel.ShowFreezeLine             = false;

            Worksheet sheet = _excel.Sheets[_sheetIndex];

            sheet.ZoomFactor = 1f;
            ViewportInfo info = new ViewportInfo(sheet, 1, 1);

            sheet.SetViewportInfo(info);
        }
Esempio n. 14
0
 /// <summary>
 /// Rotates camera around the x axis
 /// </summary>
 public static void RotateUpDown(this ViewportInfo viewport, double angle)
 {
     Rhino.Geometry.Vector3d cameraX;
     Rhino.Geometry.Point3d  center;
     center  = viewport.TargetPoint;
     cameraX = viewport.CameraX;
     RotateView(viewport, cameraX, center, angle);
 }
Esempio n. 15
0
 public ElementInfo_Video(ResourceInfo res, ViewportInfo vi, bool isPreview, System.Drawing.PointF pos)
     : base(res, vi, isPreview, pos)
 {
     for (int i = 0; i < 4; ++i)
     {
         m_Vectors[i] = new VertexPositionColorTexture();
     }
 }
        public Point3D To3DPoint(Vector point)
        {
            LineRange r = new LineRange();

            ViewportInfo.Point2DtoPoint3D(viewPort, point.ToPoint(), out r);

            return(r.PointFromZ(-100));
        }
Esempio n. 17
0
 public CubicCurveRibbon(ViewportInfo vi)
 {
     ParentViewport  = vi;
     ResetLifeTime   = 0;
     Width           = ProjectDoc.Instance.DefaultCubicCurveRibbonWidth;
     FillColor       = ProjectDoc.Instance.DefaultCubicCurveRibbonColor;
     DetailPrecision = 0.02F;
 }
Esempio n. 18
0
 /// <summary>
 /// Compute silhouettes of a shape for a specified projection.
 /// </summary>
 /// <param name="geometry">Geometry whose silhouettes need to be computed. Can be Brep, BrepFace, Mesh, or Extrusion.</param>
 /// <param name="silhouetteType">Types of silhouette to compute.</param>
 /// <param name="viewport">Projection.</param>
 /// <param name="tolerance">Tolerance to use for determining projecting relationships.
 /// Surfaces and curves that are closer than tolerance, may be treated as projecting.
 /// When in doubt use RhinoDoc.ModelAbsoluteTolerance.</param>
 /// <param name="angleToleranceRadians">Angular tolerance to use for determining projecting relationships.
 /// A surface normal N that satisfies N o cameraDirection &lt; Sin(angleToleranceRadians) may be considered projecting.
 /// When in doubt use RhinoDoc.ModelAngleToleranceRadians.</param>
 /// <returns>Array of silhouette curves.</returns>
 public static Silhouette[] Compute(
     GeometryBase geometry,
     SilhouetteType silhouetteType,
     ViewportInfo viewport,
     double tolerance,
     double angleToleranceRadians)
 {
     return(Compute(geometry, silhouetteType, viewport, tolerance, angleToleranceRadians, null, System.Threading.CancellationToken.None));
 }
        private void ConvertViewportToFlexSpace(Rect viewport, ref ViewportInfo info)
        {
            switch (flexDirection)
            {
            case AxisDirection.LeftToRight:
                info.startInMainAxis = viewport.xMin;
                info.endInMainAxis   = viewport.xMax;
                break;

            case AxisDirection.RightToLeft:
                info.startInMainAxis = viewport.xMax;
                info.endInMainAxis   = viewport.xMin;
                break;

            case AxisDirection.UpToDown:
                info.startInMainAxis = viewport.yMax;
                info.endInMainAxis   = viewport.yMin;
                break;

            case AxisDirection.DownToUp:
                info.startInMainAxis = viewport.yMin;
                info.endInMainAxis   = viewport.yMax;
                break;
            }

            if (isFlexHorizontal)
            {
                switch (crossAxisDirection)
                {
                case CrossAxisDirection.Default:
                    info.startInCrossAxis = viewport.yMin;
                    info.endInCrossAxis   = viewport.yMax;
                    break;

                case CrossAxisDirection.Reverse:
                    info.startInCrossAxis = viewport.yMax;
                    info.endInCrossAxis   = viewport.yMin;
                    break;
                }
            }
            else
            {
                switch (crossAxisDirection)
                {
                case CrossAxisDirection.Default:
                    info.startInCrossAxis = viewport.xMin;
                    info.endInCrossAxis   = viewport.xMax;
                    break;

                case CrossAxisDirection.Reverse:
                    info.startInCrossAxis = viewport.xMax;
                    info.endInCrossAxis   = viewport.xMin;
                    break;
                }
            }
        }
Esempio n. 20
0
        /// <summary>
        /// Dynamically set the frustum based on the clipping
        /// </summary>
        protected void SetFrustum(ViewportInfo viewport, Rhino.Geometry.BoundingBox bBox)
        {
            ClippingInfo clipping = new ClippingInfo();

            clipping.bbox = bBox;
            if (ClippingPlanes.CalcClippingPlanes(viewport, clipping))
            {
                ClippingPlanes.SetupFrustum(viewport, clipping);
            }
        }
Esempio n. 21
0
        /// <summary>
        /// GestoreOrbit performs a gesture-based orbit about an anchorLocation to a location.
        /// </summary>
        public static void GestureOrbit(this ViewportInfo viewport, Size viewSize, System.Drawing.PointF anchorLocation, System.Drawing.PointF location)
        {
            int   screenWidth    = viewSize.Width;
            float f              = (float)(Math.PI / screenWidth);
            float horizontalDiff = anchorLocation.X - location.X;

            RotateLeftRight(viewport, (horizontalDiff * f));
            float verticalDiff = anchorLocation.Y - location.Y;

            RotateUpDown(viewport, (verticalDiff * f));
        }
Esempio n. 22
0
        /// <summary>
        /// GestoreOrbit performs a gesture-based orbit about an anchorLocation to a location.
        /// </summary>
        public static void GestureOrbit(this ViewportInfo viewport, CGSize viewSize, CoreGraphics.CGPoint anchorLocation, CoreGraphics.CGPoint location)
        {
            var    screenWidth    = viewSize.Width;
            nfloat f              = (float)(Math.PI / screenWidth);
            nfloat horizontalDiff = anchorLocation.X - location.X;

            RotateLeftRight(viewport, (horizontalDiff * f));
            nfloat verticalDiff = anchorLocation.Y - location.Y;

            RotateUpDown(viewport, (verticalDiff * f));
        }
Esempio n. 23
0
        /// <summary>
        /// Find the Perspective viewport in the 3dm file and sets up the default view.
        /// </summary>
        public void LoadCamera()
        {
            if (App.Manager.CurrentModel == null)
            {
                return;
            }

            Camera = new ViewportInfo();
            bool cameraIsInitialized = false;

            int viewCount = App.Manager.CurrentModel.ModelFile.Views.Count;

            // find first perspective viewport projection in file
            if (viewCount > 0)
            {
                foreach (var view in App.Manager.CurrentModel.ModelFile.Views)
                {
                    if (view.Viewport.IsPerspectiveProjection)
                    {
                        cameraIsInitialized = true;
                        Camera             = view.Viewport;
                        Camera.TargetPoint = view.Viewport.TargetPoint;
                        Camera.SetScreenPort(0, (int)View.Bounds.Size.Width, 0, (int)View.Bounds.Size.Height, 1, 1000);
                        Camera.FrustumAspect = Camera.ScreenPortAspect;
                        Camera.SetFrustumNearFar(App.Manager.CurrentModel.BBox);
                        break;
                    }
                }
            }

            // If there isn't one, then cook up a viewport from scratch...
            if (!cameraIsInitialized)
            {
                Camera.SetScreenPort(0, (int)View.Bounds.Size.Width, 0, (int)View.Bounds.Size.Height, 1, 1000);
                Camera.TargetPoint = new Rhino.Geometry.Point3d(0, 0, 0);
                var plane = new Rhino.Geometry.Plane(Rhino.Geometry.Point3d.Origin, new Rhino.Geometry.Vector3d(-1, -1, -1));
                Camera.SetCameraLocation(new Rhino.Geometry.Point3d(10, 10, 10));
                var dir = new Rhino.Geometry.Vector3d(-1, -1, -1);
                dir.Unitize();
                Camera.SetCameraDirection(dir);
                Camera.SetCameraUp(plane.YAxis);
                Camera.SetFrustum(-1, 1, -1, 1, 0.1, 1000);
                Camera.FrustumAspect           = Camera.ScreenPortAspect;
                Camera.IsPerspectiveProjection = true;
                Camera.Camera35mmLensLength    = 50;
                if (App.Manager.CurrentModel != null)
                {
                    if (App.Manager.CurrentModel.AllMeshes != null)
                    {
                        Camera.DollyExtents(App.Manager.CurrentModel.AllMeshes, 1.0);
                    }
                }
            }
        }
Esempio n. 24
0
        /// <summary>
        /// Returns a bounding box for the custom render meshes for the given object.
        /// </summary>
        /// <param name="vp">The viewport being rendered.</param>
        /// <param name="obj">The Rhino object of interest.</param>
        /// <param name="requestingPlugIn">UUID of the RDK plug-in requesting the meshes.</param>
        /// <param name="preview">Type of mesh to build.</param>
        /// <returns>A bounding box value.</returns>
        public virtual BoundingBox BoundingBox(ViewportInfo vp, RhinoObject obj, Guid requestingPlugIn, bool preview)
        {
            var min = new Point3d();
            var max = new Point3d();

            if (UnsafeNativeMethods.Rdk_RMPBoundingBoxImpl(m_runtime_serial_number, vp.ConstPointer(), obj.ConstPointer(), requestingPlugIn, preview ? 1 : 0, ref min, ref max))
            {
                return(new BoundingBox(min, max));
            }

            return(new BoundingBox());
        }
Esempio n. 25
0
 /// <summary>
 /// Rotates a viewport about an axis relative to a center point
 /// </summary>
 public static void RotateView(this ViewportInfo viewport, Rhino.Geometry.Vector3d axis, Rhino.Geometry.Point3d center, double angle)
 {
     Rhino.Geometry.Point3d   cameraLocation = viewport.CameraLocation;
     Rhino.Geometry.Vector3d  cameraY        = viewport.CameraY;
     Rhino.Geometry.Vector3d  cameraZ        = viewport.CameraZ;
     Rhino.Geometry.Transform rotation       = Rhino.Geometry.Transform.Rotation(angle, axis, center);
     cameraLocation = rotation * cameraLocation;
     cameraY        = rotation * cameraY;
     cameraZ        = -(rotation * cameraZ);
     viewport.SetCameraLocation(cameraLocation);
     viewport.SetCameraDirection(cameraZ);
     viewport.SetCameraUp(cameraY);
 }
Esempio n. 26
0
        /// <summary>
        /// Sets the viewport's camera location, target and up vector
        /// </summary>
        public static void SetTarget(this ViewportInfo viewport, Rhino.Geometry.Point3d targetLocation, Rhino.Geometry.Point3d cameraLocation, Rhino.Geometry.Vector3d cameraUp)
        {
            Rhino.Geometry.Vector3d cameraDirection = targetLocation - cameraLocation;
            cameraDirection.Unitize();

            if (!viewport.CameraDirection.IsTiny())
            {
                Rhino.Geometry.Vector3d cameraDirection0 = -viewport.CameraZ;
                Rhino.Geometry.Vector3d cameraY          = viewport.CameraY;
                const double            tiltAngle        = 0;

                viewport.SetCameraLocation(cameraLocation);
                viewport.SetCameraDirection(cameraDirection);

                bool didSetTarget = false;
                didSetTarget = viewport.SetCameraUp(cameraUp);

                if (!didSetTarget)
                {
                    didSetTarget = viewport.SetCameraUp(cameraY);
                    cameraUp     = cameraY;
                }

                if (!didSetTarget)
                {
                    Rhino.Geometry.Vector3d rotationAxis = Rhino.Geometry.Vector3d.CrossProduct(cameraDirection0, cameraDirection);
                    double sinAngle = rotationAxis.Length;
                    double cosAngle = cameraDirection0 * cameraDirection;
                    Rhino.Geometry.Transform rot = Rhino.Geometry.Transform.Rotation(sinAngle, cosAngle, rotationAxis, Rhino.Geometry.Point3d.Origin);
                    cameraUp     = rot * cameraY;
                    didSetTarget = viewport.SetCameraUp(cameraUp);
                }

                if (didSetTarget)
                {
                    // Apply tilt angle to new camera and target location
                    if (Math.Abs(tiltAngle) > 1.0e-6)
                    {
                        Rhino.Geometry.Transform rot = Rhino.Geometry.Transform.Rotation(tiltAngle, -cameraDirection0, cameraLocation);
                        cameraUp     = rot * cameraUp;
                        didSetTarget = viewport.SetCameraUp(cameraUp);
                    }

                    if (didSetTarget)
                    {
                        viewport.TargetPoint = targetLocation;
                    }
                }
            }
        }
        public ElementInfo_StaticImage(ResourceInfo res, ViewportInfo vi, bool isPreview, System.Drawing.PointF pos)
            : base(res, vi, isPreview, pos)
        {
            if (vi != null && vi.BackImage != null)
            {
                m_ManualScale.Width  = vi.BackImage.CurImageScale;
                m_ManualScale.Height = vi.BackImage.CurImageScale;
            }

            for (int i = 0; i < 4; ++i)
            {
                m_Vectors[i] = new VertexPositionColorTexture();
            }
        }
Esempio n. 28
0
        void CachFloatingObjectsMovingResizingLayoutModels()
        {
            ViewportInfo viewportInfo        = GetViewportInfo();
            int          columnViewportCount = viewportInfo.ColumnViewportCount;
            int          rowViewportCount    = viewportInfo.RowViewportCount;

            _cachedFloatingObjectMovingResizingLayoutModel = new FloatingObjectLayoutModel[rowViewportCount + 2, columnViewportCount + 2];
            for (int i = -1; i <= rowViewportCount; i++)
            {
                for (int j = -1; j <= columnViewportCount; j++)
                {
                    _cachedFloatingObjectMovingResizingLayoutModel[i + 1, j + 1] = new FloatingObjectLayoutModel(GetViewportFloatingObjectLayoutModel(i, j));
                }
            }
        }
Esempio n. 29
0
 /// <summary>
 /// Compute silhouettes of a shape for a specified projection.
 /// </summary>
 /// <param name="geometry">Geometry whose silhouettes need to be computed. Can be Brep, BrepFace, Mesh, or Extrusion.</param>
 /// <param name="silhouetteType">Types of silhouette to compute.</param>
 /// <param name="viewport">Projection.</param>
 /// <param name="tolerance">Tolerance to use for determining projecting relationships.
 /// Surfaces and curves that are closer than tolerance, may be treated as projecting.
 /// When in doubt use RhinoDoc.ModelAbsoluteTolerance.</param>
 /// <param name="angleToleranceRadians">Angular tolerance to use for determining projecting relationships.
 /// A surface normal N that satisfies N o cameraDirection &lt; Sin(angleToleranceRadians) may be considered projecting.
 /// When in doubt use RhinoDoc.ModelAngleToleranceRadians.</param>
 /// <param name="clippingPlanes">Optional collection of clipping planes.</param>
 /// <param name="cancelToken">Computation cancellation token.</param>
 /// <returns>Array of silhouette curves.</returns>
 public static Silhouette[] Compute(
     GeometryBase geometry,
     SilhouetteType silhouetteType,
     ViewportInfo viewport,
     double tolerance,
     double angleToleranceRadians,
     IEnumerable <Plane> clippingPlanes,
     System.Threading.CancellationToken cancelToken)
 {
     if (viewport.IsParallelProjection)
     {
         return(Compute(geometry, silhouetteType, viewport.CameraDirection, tolerance, angleToleranceRadians, clippingPlanes, cancelToken));
     }
     return(Compute(geometry, silhouetteType, viewport.CameraLocation, tolerance, angleToleranceRadians, clippingPlanes, cancelToken));
 }
Esempio n. 30
0
 public ElementInfo_Waterbag(ResourceInfo res, ViewportInfo vi, bool isPreview, System.Drawing.PointF pos)
     : base(res, vi, isPreview, pos)
 {
     Name = "水带";
     if (CommonTexture == null)
     {
         try
         {
             CommonTexture = Texture2D.FromFile(ProjectDoc.Instance.HostGame.GraphicsDevice, Options.SystemResourceRootPath + "waterbag.tga");
         }
         catch { }
     }
     AddJoint(new System.Drawing.Point((int)pos.X, (int)pos.Y));
     AddJoint(new System.Drawing.Point((int)pos.X + 50, (int)pos.Y));
 }