예제 #1
0
        static public bool ruledSolidTest(GeoObjectList geoObjectList, Model model)
        { // Tested für SelectedObjectsAction, ob Eintrag enabled oder nicht
            bool temp;

            if ((geoObjectList.Count == 1) && (geoObjectList[0] is ICurve) && (findPath(geoObjectList[0], model, out temp) != null))
            { // ein Element, Pfad und geschlossen
                return(true);
            }
            if ((geoObjectList.Count == 2) && (geoObjectList[0] is ICurve) && (geoObjectList[1] is ICurve))
            { // zwei Elemente, auf geschlossene Pfade testen
                Path p1 = (findPath(geoObjectList[0], model, out temp));
                Path p2 = (findPath(geoObjectList[1], model, out temp));
                if ((p1 != null) && (p2 != null))
                {
                    if ((p1.GetPlanarState() == PlanarState.Planar) && (p2.GetPlanarState() == PlanarState.Planar)) // jeder Pfad in sich in einer Ebene
                    {                                                                                               // beide eben, jetzt nur noch: unterschiedliche Ebenen:
                        if (!Precision.IsEqual(p1.GetPlane(), p2.GetPlane()))
                        {
                            return(true);
                        }
                    }
                }
            }
            return(false);
        }
예제 #2
0
 virtual public bool OnCommand(string MenuId)
 {
     switch (MenuId)
     {
     case "MenuId.Explode":
         if (Frame.ActiveAction is SelectObjectsAction)
         {
             using (Frame.Project.Undo.UndoFrame)
             {
                 IGeoObjectOwner addTo = dimension.Owner;
                 if (addTo == null)
                 {
                     addTo = Frame.ActiveView.Model;
                 }
                 GeoObjectList toSelect = dimension.Decompose();
                 addTo.Remove(dimension);
                 for (int i = 0; i < toSelect.Count; ++i)
                 {
                     addTo.Add(toSelect[i]);
                 }
                 SelectObjectsAction soa = Frame.ActiveAction as SelectObjectsAction;
                 soa.SetSelectedObjects(toSelect);     // alle Teilobjekte markieren
             }
         }
         return(true);
     }
     return(false);
 }
예제 #3
0
        public Constr3DRuledFace(GeoObjectList geoObjectList, IFrame frame)
        { // constructor für SelectedObjectsAction, ein selektierter Pfad
            bool pathCreatedFromModel;

            if (geoObjectList == null)
            {
                selectedMode = 0;
            }
            else
            {
                //if (geoObjectList.Count == 2)
                //    {  ruledSolidDo(geoObjectList, frame); }
                //else
                selectedMode = 1;
                p1           = findPath(geoObjectList[0], frame.ActiveView.Model, out pathCreatedFromModel);
                if (p1 != null)
                {
                    attrObject     = geoObjectList[0];       // merker, um das passende Attribut zu bekommen
                    iGeoObjectOrg1 = geoObjectList[0];       // zum Weglöschen des Originals in onDone
                    owner1         = geoObjectList[0].Owner; // owner merken für löschen
                    if (pathCreatedFromModel)
                    {
                        iGeoObjectOrg1        = null; // zum nicht Weglöschen des Originals in onDone
                        pathCreatedFromModel1 = p1;   // kopie merken für onDone
                    }
                }
            }
        }
예제 #4
0
 private void MakeBlock(int horLeft, int horRight, int verDown, int verUp, double distX, double distY)
 {   // läuft asynchron
     backgroundBlock = Block.Construct();
     for (int i = -horLeft; i <= horRight; ++i)
     {
         if (i != 0) // i=0 ist das Original, soll nicht verdoppelt werden!
         {
             GeoObjectList li = new GeoObjectList();
             // für jede Kopie ein Clone machen
             li = originals.CloneObjects();
             // AbstandX * Kopienwinkel:
             GeoVector vect = (i * distX) * dirV;
             ModOp     m    = ModOp.Translate(vect);
             li.Modify(m);
             backgroundBlock.Add(li);
         }
         for (int j = -verDown; j <= verUp; ++j)
         {
             if (j != 0) // J=0 ist das Original, soll nicht verdoppelt werden!
             {
                 GeoObjectList liV = new GeoObjectList();
                 // für jede Kopie ein Clone machen
                 liV = originals.CloneObjects();
                 // der senkrechte Winkel auf Kopienwinkel dirV
                 GeoVector dirV_Vert = base.ActiveDrawingPlane.Normal ^ dirV;
                 GeoVector vectV     = (i * distX) * dirV + (j * distY) * dirV_Vert;
                 ModOp     m         = ModOp.Translate(vectV);
                 liV.Modify(m);
                 backgroundBlock.Add(liV);
             }
         }
     }
 }
예제 #5
0
 private bool showCirc()
 {
     block = Block.Construct();
     for (int i = 1; i < copCount; ++i)
     {
         GeoObjectList li = new GeoObjectList();
         // für jede Kopie ein Clone machen
         li = originals.CloneObjects();
         ModOp m = ModOp.Rotate(rotationPoint, base.ActiveDrawingPlane.Normal, i * copAngle);
         if (!objRot) // Objekte drehen mit: einfach modifizieren
         {
             li.Modify(m);
         }
         else
         {   // Objekte drehen nicht mit: Translation des gedrehten centerpoints
             ModOp mt = ModOp.Translate(new GeoVector(centerPoint, m * centerPoint));
             li.Modify(mt);
         }
         block.Add(li);
     }
     if (block.Count > 0)
     {
         base.ActiveObject = block;
         return(true);
     }
     else
     {
         base.ActiveObject = null;
         return(false);
     }
 }
예제 #6
0
 static public void SpaceDown(GeoObjectList gl, Projection projection, Project pr)
 {
     using (pr.Undo.UndoFrame)
     {
         IGeoObject[] geoArray = new IGeoObject[gl.Count];
         for (int i = 0; i < gl.Count; ++i) // umkopieren auf ein Array, um den Sort machen zu können
         {
             geoArray[i] = gl[i];
         }
         // hier nun Sort, der Compare steht oben als lokal class und braucht die Parameter: Sort nach y = false und pm
         Array.Sort(geoArray, 0, geoArray.Length, new CompareGeoObject(false, projection));
         // die Rechtecke des ersten und letzten Objeks für die Gesamtausdehnung
         BoundingRect reStart = IGeoObjectImpl.GetExtent(geoArray[0], projection, false);
         BoundingRect reEnd   = IGeoObjectImpl.GetExtent(geoArray[geoArray.Length - 1], projection, false);
         double       reTotal = reEnd.Top - reStart.Bottom; // Gesamtausdehnung
         double       distRe  = 0;
         for (int i = 0; i < geoArray.Length; ++i)          // Summe der Ausdehnung der Einzelnen:
         {
             BoundingRect re = IGeoObjectImpl.GetExtent(geoArray[i], projection, false);
             distRe = distRe + re.Height;
         }
         double space = (reTotal - distRe) / (geoArray.Length - 1); // Gesamt - Summe Einzelne / Zwischenräume
         double pos   = reStart.Top;
         for (int i = 1; i < geoArray.Length - 1; ++i)              // vom zweiten bis zum vorletzten, die Äußeren bleiben unverändert
         {
             BoundingRect re      = IGeoObjectImpl.GetExtent(geoArray[i], projection, false);
             GeoVector2D  trans2D = new GeoVector2D(0, pos + space - re.Bottom);
             pos = pos + space + re.Height; // pos hochzählen auf den oberen Rand des aktuellen
             GeoVector trans = projection.DrawingPlane.ToGlobal(trans2D);
             ModOp     m     = ModOp.Translate(trans);
             geoArray[i].Modify(m);
         }
     }
 }
예제 #7
0
 public override void OnDone()
 {
     // ist die Shift Taste gehalten, so werden Kopien gemacht, d.h. der die Elemente
     // des blocks werden eingefügt. Ansonsten werden die original-Objekte verändert
     // TODO: Feedback über Cursor bei Shift-Taste fehlt noch
     // TODO: die neuen oder veränderten Objekte sollten markiert sein.
     using (Frame.Project.Undo.UndoFrame)
     {
         ModOp m = ModOp.Translate(offset);
         if (((Frame.UIService.ModifierKeys & Keys.Shift) != 0) || copyObject)
         {
             GeoObjectList cloned = new GeoObjectList();
             foreach (IGeoObject go in originals)
             {
                 IGeoObject cl = go.Clone();
                 cl.Modify(m);
                 //					go.Owner.Add(cl);
                 cloned.Add(cl);
             }
             base.Frame.Project.GetActiveModel().Add(cloned);
         }
         else
         {
             originals.Modify(m);
         }
     }
     base.ActiveObject = null; // damit es nicht gleich eingefügt wird
     base.OnDone();
 }
예제 #8
0
        static public bool ruledFaceTest(GeoObjectList geoObjectList, Model model)
        { // Tested für SelectedObjectsAction, ob Eintrag enabled oder nicht
            bool temp;

            if ((geoObjectList.Count == 1) && (geoObjectList[0] is ICurve) && (findPath(geoObjectList[0], model, out temp) != null))
            { // ein Element, Pfad
                return(true);
            }
            if ((geoObjectList.Count == 2) && (geoObjectList[0] is ICurve) && (geoObjectList[1] is ICurve))
            { // zwei Elemente, auf Pfade testen
                Path p1 = (findPath(geoObjectList[0], model, out temp));
                Path p2 = (findPath(geoObjectList[1], model, out temp));
                if ((p1 != null) && (p2 != null))
                {
                    if ((p1.IsClosed && p2.IsClosed) || (!p1.IsClosed && !p2.IsClosed))                                                         // OPenCascade will nur geschlossene oder nur offene
                    {
                        if (((p1 as ICurve).GetPlanarState() == PlanarState.Planar) && ((p2 as ICurve).GetPlanarState() == PlanarState.Planar)) // jeder Pfad in sich in einer Ebene
                        {                                                                                                                       // beide eben, jetzt nur noch: unterschiedliche Ebenen:
                            if (!Precision.IsEqual(p1.GetPlane(), p2.GetPlane()))
                            {
                                return(true);
                            }
                        }
                        if ((((p1 as ICurve).GetPlanarState() == PlanarState.Planar) || (p1 as ICurve).GetPlanarState() == PlanarState.UnderDetermined) && (((p2 as ICurve).GetPlanarState() == PlanarState.Planar) || (p2 as ICurve).GetPlanarState() == PlanarState.UnderDetermined)) // jeder Pfad in sich in einer Ebene
                        {                                                                                                                                                                                                                                                               // beide eben, jetzt nur noch: unterschiedliche Ebenen:
                            return(true);
                        }
                    }
                }
            }
            return(false);
        }
예제 #9
0
 public override void OnDone()
 {
     if (base.ActiveObject != null)
     {
         using (base.Frame.Project.Undo.UndoFrame)
         {
             CurrentMouseView.Canvas.Cursor = "WaitCursor";
             GeoObjectList ToAdd  = new GeoObjectList();
             Model         m      = base.Frame.ActiveView.Model;
             BRepOperation brepOp = new BRepOperation(toSplit.Shells[0], plane);
             (Shell[] upper, Shell[] lower) = BRepOperation.SplitByPlane(toSplit.Shells[0], plane);
             for (int i = 0; i < upper.Length; i++)
             {
                 ToAdd.Add(Solid.MakeSolid(upper[i]));
             }
             for (int i = 0; i < lower.Length; i++)
             {
                 ToAdd.Add(Solid.MakeSolid(lower[i]));
             }
             m.Remove(toSplit);
             m.Add(ToAdd);
             base.ActiveObject = null;
             base.OnDone();
         }
     }
 }
예제 #10
0
        // Interface für MultiGeoPointInput mi

        public void SetGeoPoint(int Index, GeoPoint ThePoint)
        {
            if (dimDir == DimDirection.Sloping) //Schrägbemassung
            {
                if (Index == 0)
                {
                    base.BasePoint = ThePoint;           // Referenzpunkt für die Richtungsbestimmung
                }
                if ((Index == 1) & (!dimDirInput.Fixed)) // nur, falls nicht explizit die Richtung bestimmt wurde
                {                                        // Schrägbemassung: der zweite Punkt definiert mit dem 1. die Lage
                    dim.DimLineDirection = new GeoVector(dim.GetPoint(0), ThePoint);
                }
            }
            // das folgende dient nur dazu, den Cursor umzuschalten, falls Bemassung getroffen ist
            if (dim.PointCount == 2)
            {
                GeoObjectList li = base.GetObjectsUnderCursor(base.CurrentMousePoint);
                for (int i = 0; i < li.Count; ++i)
                {
                    if (li[i] is Dimension)
                    {
                        Dimension             dimTemp = (li[i] as Dimension);
                        int                   ind;
                        Dimension.HitPosition hi = dimTemp.GetHitPosition(base.Frame.ActiveView.Projection, base.ProjectedPoint(CurrentMousePoint), out ind);
                        if ((hi & Dimension.HitPosition.DimLine) != 0)
                        {
                            base.Frame.ActiveView.SetCursor(CursorTable.GetCursor("Trim.cur"));
                        }
                        //TODO: Bemassungscursor!
                    }
                }
            }
            dim.SetPoint(Index, ThePoint);
        }
 public ParametricsDistanceActionOld(Edge fromHere, Edge toHere, Line feedback, Plane plane, IFrame frame)
 {
     distanceFromHere = fromHere;
     distanceToHere   = toHere;
     offsetStartPoint = feedback.StartPoint;
     offsetFeedBack   = frame.ActiveView.Projection.MakeArrow(feedback.StartPoint, feedback.EndPoint, plane, Projection.ArrowMode.circleArrow);
     feedbackPlane    = plane;
     originalOffset   = feedback.EndPoint - feedback.StartPoint;
     shell            = fromHere.PrimaryFace.Owner as Shell;
     facesToMove      = new List <Face>();
     facesToKeep      = new List <Face>();
     if (toHere != null)
     {
         if (!toHere.PrimaryFace.Surface.IsExtruded(originalOffset))
         {
             facesToMove.Add(toHere.PrimaryFace);
         }
         if (!toHere.SecondaryFace.Surface.IsExtruded(originalOffset))
         {
             facesToMove.Add(toHere.SecondaryFace);
         }
         facesToMoveIsFixed = true;
     }
     if (fromHere != null)
     {
         if (!fromHere.PrimaryFace.Surface.IsExtruded(originalOffset))
         {
             facesToKeep.Add(fromHere.PrimaryFace);
         }
         if (!fromHere.SecondaryFace.Surface.IsExtruded(originalOffset))
         {
             facesToKeep.Add(fromHere.SecondaryFace);
         }
     }
 }
예제 #12
0
        private void SetDimLocation(GeoPoint p)
        {   // der Lagepunkt der Bemassung
            dim.DimLineRef = p;
            if ((dimMethodPoint & !curveInput.Fixed) | (!dimMethodPoint & !dimPointInput.Fixed))
            {
                dim.SetPoint(0, new GeoPoint(p.x - base.WorldLength(15), p.y - base.WorldLength(15)));
            }
            base.ShowActiveObject = true;
            // jetzt erfogt der Test, ob eine andere Bemassung vom Typ DimLocation getroffen wurde
            dimAddTo = null; // dient als merker für DimLocationOnMouseClick, Methode s.u.
                             // Testen, ob eine Bemassung getroffen wurde
            GeoObjectList li = base.GetObjectsUnderCursor(base.CurrentMousePoint);

            for (int i = 0; i < li.Count; ++i)
            {
                if (li[i] is Dimension)
                { // die getroffene Bem. nutzen
                    Dimension dimTemp = (li[i] as Dimension);
                    if (dimTemp.DimType == Dimension.EDimType.DimLocation)
                    {            // nur Bemassung gleichen Typs
                        int ind; // wo getroffen? nur an Hilfslinie, nicht am Text
                        Dimension.HitPosition hi = dimTemp.GetHitPosition(base.Frame.ActiveView.Projection, base.ProjectedPoint(CurrentMousePoint), out ind);
                        if ((hi & Dimension.HitPosition.DimLine) != 0)
                        { // jetzt also: Bemassung merken
                            dimAddTo = dimTemp;
                            // und zur Kennung optisch den Refpunkt setzen
                            dim.DimLineRef = dimTemp.DimLineRef;
                        }
                    }
                }
            }
            PerpFoot();
        }
예제 #13
0
        private void initNurbsSurface()
        {
            // die NurbsSurface brauchen wir hier für die Ableitungen. Die sind nur schwer aus der Kurvendefinition herauszukriegen
            // Hier also erstmal mit NURBS. Besser wäre es, aus der eigentlichen Definition, da muss man aber Gehirnschmalz reinstecken
            // die NURBS Fläche läuft von 0 bis 1, also synchron zu PointAt. PointAt ist aber genauer
            GeoPoint[,] pnts = new CADability.GeoPoint[8, 8];
            double[] uknots = new double[pnts.GetLength(0)];
            double[] vknots = new double[pnts.GetLength(1)];
            for (int i = 0; i < uknots.Length; i++)
            {
                uknots[i] = (double)i / (uknots.Length - 1);
            }
            for (int i = 0; i < vknots.Length; i++)
            {
                vknots[i] = (double)i / (vknots.Length - 1);
            }
            for (int i = 0; i < pnts.GetLength(0); i++)
            {
                for (int j = 0; j < pnts.GetLength(1); j++)
                {
                    pnts[i, j] = PointAt(new GeoPoint2D(uknots[i], vknots[j]));
                }
            }
            try
            {
                forDerivation = new NurbsSurface(pnts, 3, 3, uknots, vknots, false, false);
                forDerivation.ScaleKnots(0, 1, 0, 1);
#if DEBUG
                GeoObjectList dbg = forDerivation.DebugGrid;
#endif
            }
            catch (NurbsException) { }
        }
예제 #14
0
 /// <summary>
 /// Add all objects from l, which are or contain curves. The curves are projected onto the provided plane.
 /// If l contains composite objects (e.g. Block, Path) the objects are decomposed.
 /// </summary>
 /// <param name="l"></param>
 /// <param name="pln"></param>
 public void Add(GeoObjectList l, Plane pln)
 {
     for (int i = 0; i < l.Count; i++)
     {
         AddPrimitiv(l[i], pln);
     }
 }
예제 #15
0
 static public GeoObjectList AssertColor(GeoObjectList list)
 {
     foreach (IGeoObject go in list)
     {
         if (go is IColorDef cd && cd.ColorDef == null)
         {
             if (go is GeoObject.Point)
             {
                 cd.ColorDef = PointColor;
             }
             if (go is ICurve)
             {
                 cd.ColorDef = CurveColor;
             }
             if (go is Face)
             {
                 cd.ColorDef = FaceColor;
             }
             if (go is Shell)
             {
                 cd.ColorDef = FaceColor;
             }
             if (go is Solid)
             {
                 cd.ColorDef = FaceColor;
             }
         }
     }
     return(list);
 }
예제 #16
0
        protected override bool FindTangentialPoint(MouseEventArgs e, IView vw, out GeoPoint found)
        {
            double mindist = double.MaxValue;

            found = GeoPoint.Origin;
            if (base.CurrentInput == lengthInput && iCurve is Line)
            {
                GeoObjectList l = base.GetObjectsUnderCursor(e.Location);
                l.DecomposeAll();
                for (int i = 0; i < l.Count; i++)
                {
                    if (l[i] is ICurve)
                    {
                        double[] tanpos = (l[i] as ICurve).TangentPosition(iCurve.StartDirection);
                        if (tanpos != null)
                        {
                            for (int j = 0; j < tanpos.Length; j++)
                            {
                                GeoPoint p = (l[i] as ICurve).PointAt(tanpos[j]);
                                double   d = base.WorldPoint(e.Location) | p;
                                if (d < mindist)
                                {
                                    mindist = d;
                                    found   = p;
                                }
                            }
                        }
                    }
                }
            }
            return(mindist != double.MaxValue);
        }
예제 #17
0
 public override void OnDone()
 {
     if (base.ActiveObject != null)
     {
         using (base.Frame.Project.Undo.UndoFrame)
         {
             Frame.ActiveView.Canvas.Cursor = "WaitCursor";
             GeoObjectList ToAdd = new GeoObjectList();
             Model         m     = base.Frame.ActiveView.Model;
             PlaneSurface  pls   = new PlaneSurface(plane);
             for (int i = 0; i < m.Count; ++i) // durch das ganze Modell laufen
             {
                 ICurve[] crvs = Intersect(m[i], pls);
                 if (crvs != null)
                 {
                     for (int k = 0; k < crvs.Length; k++)
                     {
                         IGeoObject go = crvs[k] as IGeoObject;
                         go.CopyAttributes(base.ActiveObject);
                         ToAdd.Add(go);
                     }
                 }
             }
             m.Add(ToAdd);
             base.KeepAsLastStyle(ActiveObject);
             base.ActiveObject = null;
             base.OnDone();
         }
     }
 }
예제 #18
0
 private Constr3DPathExtrude()
 { // wird über ":this" von den beiden nächsten Constructoren aufgerufen, initialisiert die Listen
     selectedObjectsList      = new GeoObjectList();
     geoObjectOrgList         = new List <IGeoObject>();
     shapeList                = new List <IGeoObject>();
     ownerList                = new List <IGeoObjectOwner>();
     pathCreatedFromModelList = new List <Path>();
 }
        protected override bool FindTangentialPoint(MouseEventArgs e, IView vw, out GeoPoint found)
        {
            double mindist = double.MaxValue;

            found = GeoPoint.Origin;
            if (CurrentInput == width && startPointInput.Fixed)
            {
                GeoObjectList l = base.GetObjectsUnderCursor(e.Location);
                l.DecomposeAll();
                for (int i = 0; i < l.Count; i++)
                {
                    if (l[i] is ICurve)
                    {
                        double[] tanpos = (l[i] as ICurve).TangentPosition(line.ParallelogramSecondaryDirection);
                        if (tanpos != null)
                        {
                            for (int j = 0; j < tanpos.Length; j++)
                            {
                                GeoPoint p = (l[i] as ICurve).PointAt(tanpos[j]);
                                double   d = base.WorldPoint(e.Location) | p;
                                if (d < mindist)
                                {
                                    mindist = d;
                                    found   = p;
                                }
                            }
                        }
                    }
                }
            }
            if (CurrentInput == height && startPointInput.Fixed)
            {
                GeoObjectList l = base.GetObjectsUnderCursor(e.Location);
                l.DecomposeBlocks(true);
                l.DecomposeBlockRefs();
                for (int i = 0; i < l.Count; i++)
                {
                    if (l[i] is ICurve)
                    {
                        double[] tanpos = (l[i] as ICurve).TangentPosition(line.StartDirection);
                        if (tanpos != null)
                        {
                            for (int j = 0; j < tanpos.Length; j++)
                            {
                                GeoPoint p = (l[i] as ICurve).PointAt(tanpos[j]);
                                double   d = base.WorldPoint(e.Location) | p;
                                if (d < mindist)
                                {
                                    mindist = d;
                                    found   = p;
                                }
                            }
                        }
                    }
                }
            }
            return(mindist != double.MaxValue);
        }
예제 #20
0
        virtual public bool OnCommand(string MenuId)
        {
            switch (MenuId)
            {
            case "MenuId.Reverse":
                polyline.Reverse();
                return(true);

            case "MenuId.CurveSplit":
                Frame.SetAction(new ConstrSplitCurve(polyline));
                return(true);

            case "MenuId.Explode":
                if (Frame.ActiveAction is SelectObjectsAction)
                {
                    using (Frame.Project.Undo.UndoFrame)
                    {
                        IGeoObjectOwner addTo = polyline.Owner;
                        if (addTo == null)
                        {
                            addTo = Frame.ActiveView.Model;
                        }
                        GeoObjectList toSelect = polyline.Decompose();
                        addTo.Remove(polyline);
                        for (int i = 0; i < toSelect.Count; ++i)
                        {
                            addTo.Add(toSelect[i]);
                        }
                        SelectObjectsAction soa = Frame.ActiveAction as SelectObjectsAction;
                        soa.SetSelectedObjects(toSelect);     // alle Teilobjekte markieren
                    }
                }
                return(true);

            case "MenuId.Aequidist":
                Frame.SetAction(new ConstructAequidist(polyline));
                return(true);

            case "MenuId.Path.Vertex.StartWithMe":
            {
                if (polyline.IsClosed)
                {
                    GeoPointProperty gpp = Frame.ContextMenuSource as GeoPointProperty;
                    if (gpp != null)
                    {
                        if (gpp.UserData.ContainsData("Index"))
                        {
                            int index = (int)gpp.UserData.GetData("Index");
                            polyline.CyclicalPermutation(index);
                        }
                    }
                }
            }
                return(true);
            }
            return(false);
        }
예제 #21
0
        //public static bool faceTestExtrude(GeoObjectList selectedObjects)
        //{
        //    for (int i = 0; i < selectedObjects.Count; i++)
        //    {   // nur eins muss passen
        //       if ((selectedObjects[i] is Face) || (selectedObjects[i] is Shell) || ((selectedObjects[i] is ICurve) && (selectedObjects[i] as ICurve).IsClosed)) return true;
        //    }
        //    return false;
        //}


        //private Constr3DMakeFace()
        //{ // wird über ":this" von den beiden nächsten Constructoren aufgerufen, initialisiert die Listen
        //    selectedObjectsList = new GeoObjectList();
        //    geoObjectOrgList = new List<IGeoObject>();
        //    faceList = new List<IGeoObject>();
        //    ownerList = new List<IGeoObjectOwner>();
        //    pathCreatedFromModelList = new List<Path>();
        //}

        public Constr3DMakeFace()
        //           : this()
        {
            selectedObjectsList      = new GeoObjectList();
            geoObjectOrgList         = new List <IGeoObject>();
            faceList                 = new List <IGeoObject>();
            ownerList                = new List <IGeoObjectOwner>();
            pathCreatedFromModelList = new List <Path>();
        }
예제 #22
0
 public ReflectObjects(GeoObjectList list)
 {
     block = Block.Construct();
     foreach (IGeoObject go in list)
     {
         block.Add(go.Clone());
     }
     originals = new GeoObjectList(list); // originale merken
 }
예제 #23
0
        /// <summary>
        /// Calculates intersection objects. The objects in the list toIntersect are
        /// intersected with the plane intersectWith.
        /// </summary>
        /// <param name="toIntersect">list of objects to intersect</param>
        /// <param name="intersectWith">plane to intersect with</param>
        /// <returns>intersection objects</returns>
        public static GeoObjectList Intersect(GeoObjectList toIntersect, Plane intersectWith)
        {
            // vorläufige Implementierung, muss mit der Opencascade Umstellung geändert werden
            GeoObjectList res = new GeoObjectList();

            for (int i = 0; i < toIntersect.Count; ++i)
            {
            }
            return(res);
        }
예제 #24
0
 public Constr3DPathExtrude(GeoObjectList selectedObjectsList) : this()
 {
     selectedMode = (selectedObjectsList != null);
     if (selectedMode)
     {
         this.selectedObjectsList = selectedObjectsList.Clone();
         ListDefault(selectedObjectsList.Count); // setzt alle Listen auf gleiche Länge, Inhalte "null"
     }
     ;
 }
예제 #25
0
 public MoveObjects(GeoObjectList list)
 {
     block = Block.Construct();
     foreach (IGeoObject go in list)
     {
         block.Add(go.Clone());
     }
     originals = new GeoObjectList(list);
     offset    = new GeoVector(0.0, 0.0, 0.0);
 }
예제 #26
0
        private int offsetVal; // 0: 0°, 1: 90°, 2: 180°, 3: 270°(-90°)

        public RotateObjects(GeoObjectList list)
        {
            block         = Block.Construct();
            originals     = new GeoObjectList(list);
            rotationAngle = new Angle(0.0);
            for (int i = 0; i < originals.Count; ++i)
            {
                block.Add(originals[i].Clone());
            }
        }
예제 #27
0
        virtual public bool OnCommand(string MenuId)
        {
            switch (MenuId)
            {
            case "MenuId.Explode":
                if (Frame.ActiveAction is SelectObjectsAction)
                {
                    SelectObjectsAction soa = Frame.ActiveAction as SelectObjectsAction;
                    soa.SetSelectedObjects(new GeoObjectList());
                    //Application.DoEvents();
                    using (Frame.Project.Undo.UndoFrame)
                    {
                        IGeoObjectOwner addTo = block.Owner;
                        if (addTo == null)
                        {
                            addTo = Frame.ActiveView.Model;
                        }
                        addTo.Remove(block);
                        GeoObjectList toSelect = block.Decompose();
                        for (int i = 0; i < toSelect.Count; i++)
                        {
                            addTo.Add(toSelect[i]);
                        }

                        soa.SetSelectedObjects(toSelect);     // alle Teilobjekte markieren
                    }
                }
                return(true);

            case "MenuId.SelectedObject.ToBackground":
                if (ContextMenuSource != null)
                {
                    block.MoveToBack(ContextMenuSource);
                    subEntries = null;
                    if (propertyPage != null)
                    {
                        propertyPage.Refresh(this);
                    }
                }
                return(true);

            case "MenuId.SelectedObject.ToForeground":
                if (ContextMenuSource != null)
                {
                    block.MoveToFront(ContextMenuSource);
                    subEntries = null;
                    if (propertyPage != null)
                    {
                        propertyPage.Refresh(this);
                    }
                }
                return(true);
            }
            return(false);
        }
예제 #28
0
        public void InsertGeoPoint(int Index, GeoPoint ThePoint)
        {
            if (dim.PointCount >= 2)
            {   // nach dem 2.Punkt ist keine Änderung der Methode mehr möglich!
                dimMethod.ReadOnly = true;
                // Testen, ob eine Bemassung getroffen wurde
                GeoObjectList li = base.GetObjectsUnderCursor(base.CurrentMousePoint);
                if (Settings.GlobalSettings.GetBoolValue("Dimension.AutoExtend", true)) // eingeführt am 30.08.2016
                {
                    for (int i = 0; i < li.Count; ++i)
                    {
                        if (li[i] is Dimension)
                        { // die getroffene Bem. nutzen
                            Dimension dimTemp = (li[i] as Dimension);
                            // nur wenn die Typen stimmen!
                            if ((dimTemp.DimType == Dimension.EDimType.DimPoints) | (dimTemp.DimType == Dimension.EDimType.DimCoord))
                            {
                                int ind; // wo getroffen?
                                Dimension.HitPosition hi = dimTemp.GetHitPosition(base.Frame.ActiveView.Projection, base.ProjectedPoint(CurrentMousePoint), out ind);
                                if ((hi & Dimension.HitPosition.DimLine) != 0)
                                { // jetzt also: neuen Punkt einfügen, der kommt aus dim.
                                    dimTemp.AddPoint(dim.GetPoint(0));
                                    base.ActiveObject = null;
                                    base.OnDone();
                                    dimTemp.SortPoints();
                                    dimTemp.Recalc();
                                    return;
                                }
                            }
                        }
                    }
                }
            }
            if ((dim.PointCount == 2) & (methodSelect == 0))
            {   // ZweiPunktBemassung: Jetzt ist Schluss!
                mi.Fixed = true;
                if (!dimLocationInput.Fixed)
                {
                    CADability.GeoObject.Point gPoint1 = ActionFeedBack.FeedbackPoint(base.Frame, PointSymbol.Cross);
                    gPoint1.Location = ThePoint;
                    base.FeedBack.Add(gPoint1);
                    base.SetFocus(dimLocationInput, true);
                }
                else
                {
                    base.OnDone();
                }
                return;
            }
            dim.AddPoint(ThePoint);

            CADability.GeoObject.Point gPoint = ActionFeedBack.FeedbackPoint(base.Frame, PointSymbol.Cross);
            gPoint.Location = ThePoint;
            base.FeedBack.Add(gPoint);
        }
예제 #29
0
 public void Add(GeoObjectList toAdd)
 {
     for (int i = 0; i < toAdd.Count; i++)
     {
         IGeoObject      clone = toAdd[i].Clone();
         IntegerProperty ip    = new IntegerProperty(i, "Debug.Hint");
         clone.UserData.Add("Debug", ip);
         AssertColor(clone);
         toShow.Add(clone);
     }
 }
예제 #30
0
        private Block blk;                            // da werden die Objekte drinn gesammelt

        public static bool pathTest(GeoObjectList selectedObjects)
        {
            for (int i = 0; i < selectedObjects.Count; i++)
            {   // nur eins muss passen
                if ((selectedObjects[i] is ICurve))
                {
                    return(true);
                }
            }
            return(false);
        }