Exemple #1
0
        public static Autodesk.DesignScript.Geometry.Surface ToDSGeo(this SketchUpNET.Surface v, Transform t = null)
        {
            try
            {
                List <Autodesk.DesignScript.Geometry.Curve> curves = new List <Autodesk.DesignScript.Geometry.Curve>();
                foreach (Edge c in v.OuterEdges.Edges)
                {
                    curves.Add(c.ToDSGeo(t).ToNurbsCurve());
                }
                int a = 0;
                Autodesk.DesignScript.Geometry.PolyCurve pc = Autodesk.DesignScript.Geometry.PolyCurve.ByJoinedCurves(curves);
                Autodesk.DesignScript.Geometry.Surface   s  = Autodesk.DesignScript.Geometry.Surface.ByPatch(pc);

                List <Autodesk.DesignScript.Geometry.Surface> inner = v.InnerLoops(t);

                foreach (Autodesk.DesignScript.Geometry.Surface srf in inner)
                {
                    Autodesk.DesignScript.Geometry.Geometry[] geo = s.Split(srf);
                    if (geo.Count() == 2)
                    {
                        s = (Autodesk.DesignScript.Geometry.Surface)geo[0];
                    }
                }
                return(s);
            }
            catch { return(null); }
        }
Exemple #2
0
        /// <summary>
        /// Get Polycurve from Polybeam
        /// </summary>
        /// <param name="polyBeam"> Advance Steel polybeam</param>
        /// <returns name="polyCurve">The PolyCurve from the beam</returns>
        public static Autodesk.DesignScript.Geometry.PolyCurve GetPolyCurve(PolyBeam polyBeam)
        {
            List <Autodesk.DesignScript.Geometry.Curve> intRet = new List <Autodesk.DesignScript.Geometry.Curve>()
            {
            };

            Autodesk.DesignScript.Geometry.PolyCurve ret = null;
            using (var ctx = new SteelServices.DocContext())
            {
                if (polyBeam != null)
                {
                    FilerObject filerObj = Utils.GetObject(polyBeam.Handle);
                    if (filerObj != null)
                    {
                        if (filerObj.IsKindOf(FilerObject.eObjectType.kPolyBeam))
                        {
                            Autodesk.AdvanceSteel.Modelling.PolyBeam selectedObj = filerObj as Autodesk.AdvanceSteel.Modelling.PolyBeam;
                            Polyline3d poly = selectedObj.GetPolyline();
                            intRet = Utils.ToDynPolyCurves(poly, true);
                            ret    = Autodesk.DesignScript.Geometry.PolyCurve.ByJoinedCurves(intRet);
                        }
                        throw new System.Exception("Wrong type of Steel Object found, must be a Polybeam");
                    }
                }
                else
                {
                    throw new System.Exception("No Steel Object found or Line Object is null");
                }
            }
            return(ret);
        }
Exemple #3
0
        public override Autodesk.DesignScript.Geometry.Curve GetDynCurve()
        {
            lock (access_obj)
            {
                using (var ctx = new SteelServices.DocContext())
                {
                    Autodesk.DesignScript.Geometry.PolyCurve poly = null;
                    var plateFeat = Utils.GetObject(Handle) as Autodesk.AdvanceSteel.Modelling.PlateFeatContour;

                    if (plateFeat != null)
                    {
                        var dynPoints = Utils.ToDynPoints(plateFeat.GetContourPolygon(0), true);
                        poly = Autodesk.DesignScript.Geometry.Polygon.ByPoints(dynPoints, true);
                        foreach (var pt in dynPoints)
                        {
                            pt.Dispose();
                        }
                    }
                    else
                    {
                        var plateFeatx = Utils.GetObject(Handle) as Autodesk.AdvanceSteel.Modelling.PlateContourNotch;
                        if (plateFeatx != null)
                        {
                            Autodesk.AdvanceSteel.Geometry.Matrix3d matrix = plateFeat.CS;
                            poly = Autodesk.DesignScript.Geometry.PolyCurve.ByJoinedCurves(Utils.ToDynPolyCurves(plateFeatx.GetPolygon(), true));
                        }
                    }

                    return(poly);
                }
            }
        }
 public static Autodesk.DesignScript.Geometry.PolyCurve ConvertDynamoPolylineToPolyCurve(Autodesk.AutoCAD.DynamoNodes.Polyline dynamoPolyline)
 {
     Autodesk.AutoCAD.DatabaseServices.Polyline polyline = (Autodesk.AutoCAD.DatabaseServices.Polyline)dynamoPolyline.InternalDBObject;
     Autodesk.DesignScript.Geometry.PolyCurve   retVal   = null;
     if (polyline != null)
     {
         // extract each segment
         Autodesk.DesignScript.Geometry.Curve[] curves; // = new Autodesk.DesignScript.Geometry.Curve[polyline.NumberOfVertices];
         if (polyline.Closed)
         {
             curves = new Autodesk.DesignScript.Geometry.Curve[polyline.NumberOfVertices];
         }
         else
         {
             curves = new Autodesk.DesignScript.Geometry.Curve[polyline.NumberOfVertices - 1];
         }
         // convert segment into Dynamo curve or line
         int curIndex = 0;
         while (curIndex <= polyline.NumberOfVertices)
         {
             if (polyline.GetSegmentType(curIndex) == SegmentType.Arc)
             {
                 Autodesk.DesignScript.Geometry.Arc   curCurve;
                 Autodesk.DesignScript.Geometry.Point centerPt = Autodesk.DesignScript.Geometry.Point.ByCoordinates(
                     polyline.GetArcSegment2dAt(curIndex).Center.X,
                     polyline.GetArcSegment2dAt(curIndex).Center.Y,
                     0.0);
                 Autodesk.DesignScript.Geometry.Point startPt = Autodesk.DesignScript.Geometry.Point.ByCoordinates(
                     polyline.GetArcSegment2dAt(curIndex).StartPoint.X,
                     polyline.GetArcSegment2dAt(curIndex).StartPoint.Y,
                     0.0);
                 Autodesk.DesignScript.Geometry.Point endPt = Autodesk.DesignScript.Geometry.Point.ByCoordinates(
                     polyline.GetArcSegment2dAt(curIndex).EndPoint.X,
                     polyline.GetArcSegment2dAt(curIndex).EndPoint.Y,
                     0.0);
                 curCurve = Autodesk.DesignScript.Geometry.Arc.ByCenterPointStartPointEndPoint(centerPt, endPt, startPt);
                 curves.SetValue(curCurve, curIndex);
             }
             else if (polyline.GetSegmentType(curIndex) == SegmentType.Line)
             {
                 Autodesk.DesignScript.Geometry.Line  curLine;
                 Autodesk.DesignScript.Geometry.Point startPt = Autodesk.DesignScript.Geometry.Point.ByCoordinates(
                     polyline.GetLineSegment2dAt(curIndex).StartPoint.X,
                     polyline.GetLineSegment2dAt(curIndex).StartPoint.Y,
                     0.0);
                 Autodesk.DesignScript.Geometry.Point endPt = Autodesk.DesignScript.Geometry.Point.ByCoordinates(
                     polyline.GetLineSegment2dAt(curIndex).EndPoint.X,
                     polyline.GetLineSegment2dAt(curIndex).EndPoint.Y,
                     0.0);
                 curLine = Autodesk.DesignScript.Geometry.Line.ByStartPointEndPoint(startPt, endPt);
                 curves.SetValue(curLine, curIndex);
             }
             curIndex = curIndex + 1;
         }
         retVal = Autodesk.DesignScript.Geometry.PolyCurve.ByJoinedCurves(curves);
     }
     return(retVal);
 }
 public static Autodesk.DesignScript.Geometry.PolyCurve PolyCurveByParcel(Parcel parcel)
 {
     Autodesk.DesignScript.Geometry.PolyCurve retVal = null;
     if (parcel != null)
     {
         Autodesk.AutoCAD.DatabaseServices.Polyline poly = parcel.BaseCurve as Autodesk.AutoCAD.DatabaseServices.Polyline;
         retVal = ConvertPolylineToPolyCurve(poly);
     }
     return(retVal);
 }
Exemple #6
0
        /// <summary>
        /// Constructor using a DS Polycurve
        /// </summary>
        /// <param name="polycurve">Input Curve</param>
        public RevitPolyCurve(Autodesk.DesignScript.Geometry.PolyCurve polycurve)
        {
            this.Curves = new List <Curve>();

            foreach (Autodesk.DesignScript.Geometry.Curve curve in polycurve.Curves())
            {
                this.Curves.Add((Curve)curve.Approximate());
            }

            CurveExtensions.SortCurvesContiguous(this.Curves);
        }
Exemple #7
0
        /// <summary>
        /// Create an Advance Steel poly beam between from a dynamo polycurve
        /// </summary>
        /// <param name="polyCurve"> Input Dynamo Polycurve</param>
        /// <param name="orientation">Section orientation</param>
        /// <param name="additionalBeamParameters"> Optional Input Beam Build Properties </param>
        /// <returns name="polyBeam"> beam</returns>
        public static PolyBeam ByPolyCurve(Autodesk.DesignScript.Geometry.PolyCurve polyCurve,
                                           Autodesk.DesignScript.Geometry.Vector orientation,
                                           [DefaultArgument("null")] List <Property> additionalBeamParameters)
        {
            additionalBeamParameters = PreSetDefaults(additionalBeamParameters);
            Polyline3d poly = Utils.ToAstPolyline3d(polyCurve, true);

            if (poly == null)
            {
                throw new System.Exception("No Valid Poly");
            }
            return(new PolyBeam(poly, orientation, additionalBeamParameters));
        }
Exemple #8
0
        public override Autodesk.DesignScript.Geometry.Curve GetDynCurve()
        {
            lock (access_obj)
            {
                using (var ctx = new SteelServices.DocContext())
                {
                    var beam = Utils.GetObject(Handle) as Autodesk.AdvanceSteel.Modelling.PolyBeam;

                    Polyline3d poly = beam.GetPolyline();
                    Autodesk.DesignScript.Geometry.PolyCurve pCurve = Autodesk.DesignScript.Geometry.PolyCurve.ByJoinedCurves(Utils.ToDynPolyCurves(poly, true));
                    return(pCurve);
                }
            }
        }
Exemple #9
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="element"> Input Beam</param>
        /// <param name="polyCurve"> Input Dynamo PolyCurve Object</param>
        /// <param name="lengthVec"> Input vector in the length direction of rectangular polycut</param>
        /// <param name="additionalPlateFeatureParameters"> Optional Input Plate Notch Countour Build Properties </param>
        /// <returns name="polyCut">polyCut</returns>
        public static PlatePolycut FromPolyCurve(AdvanceSteel.Nodes.SteelDbObject element,
                                                 Autodesk.DesignScript.Geometry.PolyCurve polyCurve,
                                                 Autodesk.DesignScript.Geometry.Vector lengthVec,
                                                 [DefaultArgument("null")] List <Property> additionalPlateFeatureParameters)
        {
            Polyline3d curveCreatedPolyline = Utils.ToAstPolyline3d(polyCurve, true);

            additionalPlateFeatureParameters = PreSetDefaults(additionalPlateFeatureParameters);
            return(new PlatePolycut(element,
                                    curveCreatedPolyline,
                                    curveCreatedPolyline.Normal,
                                    Utils.ToAstVector3d(lengthVec, true),
                                    additionalPlateFeatureParameters));
        }
Exemple #10
0
        /// <summary>
        /// Create an Advance Steel Unfolded Beam between two points from a polycurve
        /// </summary>
        /// <param name="polyCurve"></param>
        /// <param name="orientation"> Input reference vector of arc</param>
        /// <param name="startPoint"> Input Start Point of Unfolded Beam</param>
        /// <param name="endPoint"> Input End Point of Unfolded Beam</param>
        /// <param name="thickness">  Input thickness of Unfolded Beam</param>
        /// <param name="additionalBeamParameters"> Optional Input Beam Build Properties </param>
        /// <returns name="unFoldedBeam"> beam</returns>
        public static UnFoldedBeam ByPolyCurve(Autodesk.DesignScript.Geometry.PolyCurve polyCurve,
                                               Autodesk.DesignScript.Geometry.Vector orientation,
                                               Autodesk.DesignScript.Geometry.Point startPoint,
                                               Autodesk.DesignScript.Geometry.Point endPoint,
                                               double thickness,
                                               [DefaultArgument("null")] List <Property> additionalBeamParameters)
        {
            additionalBeamParameters = PreSetDefaults(additionalBeamParameters, Utils.ToInternalDistanceUnits(thickness, true));
            Polyline3d poly = Utils.ToAstPolyline3d(polyCurve, true);

            if (poly == null)
            {
                throw new System.Exception("No Valid Poly");
            }
            return(new UnFoldedBeam(poly, startPoint, endPoint, orientation, additionalBeamParameters));
        }
Exemple #11
0
        public static Dictionary <string, object> getRebarCenterLineCurve(
            List <Revit.Elements.Element> rebar,
            bool adjustForSelfIntersection = false,
            bool suppressHooks             = true,
            bool suppressBendRadius        = true,
            bool multiplanarOption         = true
            )
        {
            string        message = "";
            Document      doc     = DocumentManager.Instance.CurrentDBDocument;
            DynaFunctions f       = new DynaFunctions();
            //UIApplication uiapp = DocumentManager.Instance.CurrentUIApplication;
            //Autodesk.Revit.ApplicationServices.Application app = uiapp.Application;
            //UIDocument uidoc = DocumentManager.Instance.CurrentUIApplication.ActiveUIDocument;
            List <Autodesk.DesignScript.Geometry.PolyCurve> curves = new List <Autodesk.DesignScript.Geometry.PolyCurve>();
            MultiplanarOption mp = MultiplanarOption.IncludeOnlyPlanarCurves;

            foreach (Revit.Elements.Element r in rebar)
            {
                switch (multiplanarOption)
                {
                case true: mp = MultiplanarOption.IncludeOnlyPlanarCurves; break;

                case false: mp = MultiplanarOption.IncludeAllMultiplanarCurves; break;
                }
                Autodesk.Revit.DB.Element el = doc.GetElement(r.UniqueId.ToString());
                Rebar         reb            = el as Rebar;
                IList <Curve> sketch         = reb.GetCenterlineCurves(adjustForSelfIntersection, suppressHooks, suppressBendRadius, mp, 0);
                List <Autodesk.DesignScript.Geometry.Curve> crv = new List <Autodesk.DesignScript.Geometry.Curve>();
                foreach (Curve s in sketch)
                {
                    Autodesk.DesignScript.Geometry.Curve c = Revit.GeometryConversion.RevitToProtoCurve.ToProtoType(s, true);
                    crv.Add(c);
                }
                Autodesk.DesignScript.Geometry.PolyCurve pc = Autodesk.DesignScript.Geometry.PolyCurve.ByJoinedCurves(crv);
                curves.Add(pc);
            }

            return(new Dictionary <string, object>
            {
                { "polyCurves", curves },
                //{ "Message", message },
            });
        }
Exemple #12
0
        public static List <Autodesk.DesignScript.Geometry.Surface> InnerLoops(this SketchUpNET.Surface v, Transform t = null)
        {
            List <Autodesk.DesignScript.Geometry.Surface> surfaces = new List <Autodesk.DesignScript.Geometry.Surface>();

            foreach (Loop loop in v.InnerEdges)
            {
                List <Autodesk.DesignScript.Geometry.Curve> curves = new List <Autodesk.DesignScript.Geometry.Curve>();
                foreach (Edge c in loop.Edges)
                {
                    curves.Add(c.ToDSGeo(t).ToNurbsCurve());
                }
                int a = 0;
                Autodesk.DesignScript.Geometry.PolyCurve pc = Autodesk.DesignScript.Geometry.PolyCurve.ByJoinedCurves(curves);
                Autodesk.DesignScript.Geometry.Surface   s  = Autodesk.DesignScript.Geometry.Surface.ByPatch(pc);
                surfaces.Add(s);
            }

            return(surfaces);
        }
Exemple #13
0
 /// <summary>
 /// Sets the Polycurve in an Advance Steel Polybeam
 /// </summary>
 /// <param name="polyBeam"> Advance Steel polyBeam</param>
 /// <param name="polyCurve"> Input Dynamo Polycurve</param>
 /// <returns></returns>
 public static void SetPolyCurve(PolyBeam polyBeam,
                                 Autodesk.DesignScript.Geometry.PolyCurve polyCurve)
 {
     using (var ctx = new SteelServices.DocContext())
     {
         if (polyBeam != null)
         {
             FilerObject filerObj = Utils.GetObject(polyBeam.Handle);
             if (filerObj != null)
             {
                 if (filerObj.IsKindOf(FilerObject.eObjectType.kPolyBeam))
                 {
                     Autodesk.AdvanceSteel.Modelling.PolyBeam selectedObj = filerObj as Autodesk.AdvanceSteel.Modelling.PolyBeam;
                     selectedObj.SetPolyline(Utils.ToAstPolyline3d(polyCurve, true));
                 }
                 throw new System.Exception("Wrong type of Steel Object found, must be a Polybeam");
             }
         }
         else
         {
             throw new System.Exception("No Steel Object found or Line Object is null");
         }
     }
 }
        public static IList <Autodesk.DesignScript.Geometry.Point> PointsFromPolyCurve(Autodesk.DesignScript.Geometry.PolyCurve polycurve)
        {
            IList <Autodesk.DesignScript.Geometry.Point> points = new List <Autodesk.DesignScript.Geometry.Point>();

            if (polycurve != null)
            {
                double x, y, z;

                Autodesk.DesignScript.Geometry.Curve[] curves = polycurve.Curves();
                foreach (Autodesk.DesignScript.Geometry.Curve curve in curves)
                {
                    x = curve.StartPoint.X;
                    y = curve.StartPoint.Y;
                    z = curve.StartPoint.Z;
                    points.Add(Autodesk.DesignScript.Geometry.Point.ByCoordinates(x, y, z));
                }
                x = polycurve.EndPoint.X;
                y = polycurve.EndPoint.Y;
                z = polycurve.EndPoint.Z;
                points.Add(Autodesk.DesignScript.Geometry.Point.ByCoordinates(x, y, z));
            }
            return(points);
        }
 public static Autodesk.AutoCAD.DatabaseServices.Polyline ConvertPolyCurveToPolyline(Autodesk.DesignScript.Geometry.PolyCurve polyCurve)
 {
     Autodesk.AutoCAD.DatabaseServices.Polyline retVal = new Autodesk.AutoCAD.DatabaseServices.Polyline();
     if (polyCurve != null)
     {
         // extract each segment
         Autodesk.DesignScript.Geometry.Curve[] curves = new Autodesk.DesignScript.Geometry.Curve[polyCurve.NumberOfCurves];
         // convert segment into AutoCAD polyline
         int curIndex = 0;
         while (curIndex < polyCurve.NumberOfCurves)
         {
             double bulge = 0.0;
             Autodesk.DesignScript.Geometry.Curve curCurve = polyCurve.CurveAtIndex(curIndex);
             // trying to figure out if the segment is an arc or line...for some reason it thinks lines are arcs
             var typeOfcurve = curCurve.GetType();
             if (typeOfcurve == typeof(Autodesk.DesignScript.Geometry.Arc))
             {
                 // set the bulge for the curve
                 //bulge = BulgeFromCurve(curCurve, true);
                 bulge = 0.5;
             }
             // otherwise, it's a line, and default bulge applies
             retVal.AddVertexAt(curIndex, new Point2d(curCurve.StartPoint.X, curCurve.StartPoint.Y), bulge, 0.0, 0.0);
             curIndex = curIndex + 1;
         }
         if (polyCurve.StartPoint == polyCurve.EndPoint)
         {
             retVal.Closed = true;
         }
         else
         {
             retVal.AddVertexAt(curIndex, new Point2d(polyCurve.EndPoint.X, polyCurve.EndPoint.Y), 0.0, 0.0, 0.0);
         }
         //retVal = Autodesk.DesignScript.Geometry.PolyCurve.ByJoinedCurves(curves);
     }
     return(retVal);
 }
        public static List <CurvePartition> ByCurveLoops(List <List <Curve> > curveLoops)
        {
            if (curveLoops.Count == 1)
            {
                return new List <CurvePartition>()
                       {
                           new CurvePartition()
                           {
                               OuterCurves = curveLoops[0]
                           }
                       }
            }
            ;

            var tesselatedCurveLoops = new List <Tuple <BoundingBox, List <XYZ>, List <Curve> > >();

            foreach (var curveLoop in curveLoops)
            {
                var verts = TesselateCurveLoop(curveLoop).ToList();

                List <Autodesk.DesignScript.Geometry.Curve> curves =
                    new List <Autodesk.DesignScript.Geometry.Curve>();
                foreach (var curve in curveLoop)
                {
                    curves.Add(curve.ToProtoType(false));
                }
                var geom = new List <Autodesk.DesignScript.Geometry.Geometry>();
                geom.Add(PolyCurve.ByJoinedCurves(curves));
                tesselatedCurveLoops.Add(new Tuple <BoundingBox, List <XYZ>, List <Curve> >(BoundingBox.ByGeometry(geom), verts, curveLoop));
                curves.ForEach(x => x.Dispose());
                curves.Clear();
                geom.ForEach(x => x.Dispose());
                geom.Clear();
            }

            var outerCurveLoops = new List <Tuple <BoundingBox, List <XYZ>, List <Curve> > >();
            var innerCurveLoops = new List <Tuple <BoundingBox, List <XYZ>, List <Curve> > >();

            // collect the outer loops, which are not contained in any other loop
            for (int i = 0, j = tesselatedCurveLoops.Count - 1; i < tesselatedCurveLoops.Count; j = i++)
            {
                var curveLoop = tesselatedCurveLoops[i];
                var isOuter   = tesselatedCurveLoops.Where((_, l) => i != l)
                                .All(bound => !curveLoop.Item2.IsContainedIn(bound.Item1));

                if (isOuter)
                {
                    outerCurveLoops.Add(curveLoop);
                }
                else
                {
                    innerCurveLoops.Add(curveLoop);
                }
            }

            var curvesPartitions = new List <CurvePartition>();

            // for each outer loop, collect the loops that are inside of it
            // forming the partitions of the original curve loop set
            foreach (var outerLoop in outerCurveLoops)
            {
                var comp = new List <List <Curve> > {
                    outerLoop.Item3
                };
                var mask          = new List <bool>();
                var curvePatition = new CurvePartition();
                curvePatition.OuterCurves.AddRange(outerLoop.Item3);
                foreach (var innerLoop in innerCurveLoops)
                {
                    if (innerLoop.Item2.IsContainedIn(outerLoop.Item1))
                    {
                        mask.Add(false);
                        comp.Add(innerLoop.Item3);
                        curvePatition.InnerCurves.Add(innerLoop.Item3);
                    }
                    else
                    {
                        mask.Add(true);
                    }
                }
                // remove innerEdge loops that have already been added to a partition
                innerCurveLoops = innerCurveLoops.Where((_, j) => mask[j]).ToList();
                // add the new partition
                curvesPartitions.Add(curvePatition);
            }

            return(curvesPartitions);
        }