Exemplo n.º 1
0
        private void StartPoint(GeoPoint p)
        {
            if (!Precision.IsEqual(p, arcCenter))
            {
                arcStartPoint = p;

                if (arcCenterInput.Fixed)
                {
                    try
                    {
                        arcPlane = new Plane(arcCenter, arcCenter - arcStartPoint, base.ActiveDrawingPlane.Normal ^ ((GeoVector)(arcCenter - arcStartPoint)));
                        arcPlane.Align(base.ActiveDrawingPlane, false);
                    }
                    catch (PlaneException)
                    {
                        arcPlane = new Plane(arcCenter, arcCenter - arcStartPoint, ((GeoVector)(arcCenter - arcStartPoint)) ^ base.ActiveDrawingPlane.DirectionX);
                        arcPlane.Align(base.ActiveDrawingPlane, false, true);
                    };
                    arcRad = Geometry.Dist(arcCenter, arcStartPoint);
                    if (arcCenterInput.Fixed & arcEndPointInput.Fixed)
                    {
                        try
                        {
                            arcPlane = new Plane(arcCenter, arcStartPoint, arcEndPoint);
                            arcPlane.Align(base.ActiveDrawingPlane, false, true);
                        }
                        catch (PlaneException) { arcPlane = base.ActiveDrawingPlane; };
                    }
                    double endAbs = arc.SweepParameter + arc.StartParameter;
                    startAng = new Angle(arc.Plane.Project(arcStartPoint), arc.Plane.Project(arcCenter));
                    //                    endAng = new SweepAngle(endAbs - startAng);
                    arc.SetArcPlaneCenterRadiusAngles(arcPlane, arcCenter, arcRad, startAng, endAng);
                }
            }
        }
Exemplo n.º 2
0
        private void Center(GeoPoint p)
        {
            arcCenter        = p;
            gPoint1.Location = p;
            arcPlane         = base.ActiveDrawingPlane;

            if (arcStartPointInput.Fixed)
            {
                arcRad   = Geometry.Dist(arcCenter, arcStartPoint);
                startAng = new Angle(arc.Plane.Project(arcStartPoint), arc.Plane.Project(arcCenter));
            }
            if (arcEndPointInput.Fixed)
            {
                endAng = new SweepAngle(startAng, new Angle(arc.Plane.Project(arcEndPoint), arc.Plane.Project(arcCenter)), ConstrDefaults.DefaultArcDirection);
            }
            if (arcStartPointInput.Fixed & arcEndPointInput.Fixed)
            {
                try
                {
                    arcPlane = new Plane(arcCenter, arcStartPoint, arcEndPoint);
                    arcPlane.Align(base.ActiveDrawingPlane, false, true);
                }
                catch (PlaneException) { arcPlane = base.ActiveDrawingPlane; }
            }
            arc.SetArcPlaneCenterRadiusAngles(arcPlane, arcCenter, arcRad, startAng, endAng);
        }
Exemplo n.º 3
0
        public void It_Returns_A_Plane_Aligned_To_A_Given_Vector()
        {
            // Arrange
            Plane plane = BasePlaneByPoints;

            // Act
            Plane alignedPlane = plane.Align(Vector3.XAxis);

            // Assert
            alignedPlane.XAxis.EpsilonEquals(Vector3.XAxis, GSharkMath.MaxTolerance).Should().BeTrue();
            alignedPlane.YAxis.EpsilonEquals(new Vector3(0.0, -1.0, 0.0), GSharkMath.MaxTolerance).Should().BeTrue();
            alignedPlane.ZAxis.EpsilonEquals(new Vector3(0.0, 0.0, -1.0), GSharkMath.MaxTolerance).Should().BeTrue();
        }
Exemplo n.º 4
0
 private void EndPoint(GeoPoint p)
 {
     arcEndPoint = p;
     //			arc.SweepParameter = new SweepAngle(arc.StartParameter,new Angle(arc.Plane.Project(arcEndPoint),arc.Plane.Project(arcCenter)),ConstrDefaults.DefaultArcDirection);
     arcPlane = base.ActiveDrawingPlane;
     if (arcCenterInput.Fixed & arcStartPointInput.Fixed)
     {
         if (!Precision.IsEqual(arcEndPoint, arcCenter) & !Precision.IsEqual(arcEndPoint, arcStartPoint) & !Precision.IsEqual(arcCenter, arcStartPoint))
         {
             try
             {
                 arcPlane = new Plane(arcCenter, arcStartPoint, arcEndPoint);
                 arcPlane.Align(base.ActiveDrawingPlane, false, true);
             }
             catch (PlaneException) { arcPlane = base.ActiveDrawingPlane; };
         }
     }
     endAng = new SweepAngle(arc.StartParameter, new Angle(arc.Plane.Project(arcEndPoint), arc.Plane.Project(arcCenter)), arcDir);
     arc.SetArcPlaneCenterRadiusAngles(arcPlane, arcCenter, arcRad, startAng, endAng);
 }
Exemplo n.º 5
0
        private bool extrudeOrg()
        {
            if (selectedObjectsList == null)
            {
                return(false);
            }
            IGeoObject iGeoObjectSel;

            blk = Block.Construct(); // zur Darstellung
            if (base.ActiveObject != null)
            {
                blk.CopyAttributes(base.ActiveObject);
            }
            // der block wird das neue aktive Objekt, er muss die Attribute tragen, weil sie später
            // wieder von ihm verlangt werden
            Boolean success         = false;                    // hat er wenigstens eins gefunden
            int     extrudeModeTemp = extrudeMode;              // Merker, da extrudeMode evtl. umgeschaltet wird

            for (int i = 0; i < selectedObjectsList.Count; i++) // läuft über alle selektierten Objekte. Evtl nur eins bei Konstruktion
            {
                extrudeMode                 = extrudeModeTemp;
                iGeoObjectSel               = selectedObjectsList[i]; // zur Vereinfachung
                geoObjectOrgList[i]         = iGeoObjectSel;          // zum Weglöschen des Originals in onDone
                ownerList[i]                = iGeoObjectSel.Owner;    // owner merken für löschen
                pathCreatedFromModelList[i] = null;
                shapeList[i]                = null;
                Path p = null;
                if (iGeoObjectSel is ICurve)
                {
                    p = CADability.GeoObject.Path.CreateFromModel(iGeoObjectSel as ICurve, Frame.ActiveView.Model, Frame.ActiveView.Projection, true);
                    if (p == null)
                    {     // also nur Einzelelement
                        if (iGeoObjectSel is Path)
                        { // schon fertig
                            p = iGeoObjectSel.Clone() as Path;
                        }
                        else
                        {  // Pfad aus Einzelobjekt machen:
                            p = Path.Construct();
                            p.Set(new ICurve[] { iGeoObjectSel.Clone() as ICurve });
                        }
                    }
                    else
                    {                                       // CreateFromModel hat was zusammengesetzt
                        geoObjectOrgList[i]         = null; // zum nicht Weglöschen des Originals in onDone
                        pathCreatedFromModelList[i] = p;    // kopie merken für onDone
                        p = p.Clone() as Path;
                        p.Flatten();
                    }
                }
                if (p != null)
                { // Objekt hat keine Ebene und Objektebene eingestellt: Höheneingabe sperren
                    //                heightInput.ReadOnly = ((p.GetPlanarState() != PlanarState.Planar) && planeMode);
                    if (planeMode)
                    {
                        if (p.GetPlanarState() != PlanarState.Planar)
                        {
                            heightInput.ReadOnly = true;
                            //                        heightOffsetInput.ReadOnly = true;
                            //                        VectorOrHeight = true;
                            extrudeMode = 2;
                            optionalOrg();
                        }
                        else
                        {
                            Plane pl = p.GetPlane();
                            pl.Align(base.ActiveDrawingPlane, false, true);

                            //                        planeVector = pl.Normal;
                            vector       = height * pl.Normal;
                            vectorOffset = heightOffset * pl.Normal;
                        }
                    }
                    if (!vectorOffset.IsNullVector())
                    {
                        ModOp m = ModOp.Translate(vectorOffset);
                        p.Modify(m);
                    }
                    IGeoObject shape;
                    if (pipePath == null)
                    {
                        shape = Make3D.MakePrism(p, vector, Frame.Project, true);
                    }
                    else
                    {
                        shape = Make3D.MakePipe(p, pipePath, Frame.Project);
                    }
                    if (shape != null)
                    {
                        //                        shape.CopyAttributes(iGeoObjectSel as IGeoObject);
                        shape.CopyAttributes(blk);
                        // die Attribute müssen vom Block übernommen werden
                        shapeList[i] = shape;         // fertiger Körper in shapeList
                        blk.Add(shape);               // zum Darstellen
                        base.FeedBack.AddSelected(p); // zum Markieren des Ursprungsobjekts
                        success = true;
                    }
                }
                //            VectorOrHeight = VectorOrHeightTemp;
            }
            extrudeMode = extrudeModeTemp;
            if (success)
            {
                base.ActiveObject     = blk; // darstellen
                base.ShowActiveObject = true;
                return(true);
            }
            else
            {
                optionalOrg();
                heightInput.ReadOnly  = false;
                base.ShowActiveObject = false;
                base.FeedBack.ClearSelected();
                return(false);
            }
        }