// Plane
        public Plane PlaneToSpeckle(AC.Plane plane)
        {
            Vector xAxis  = VectorToSpeckle(plane.GetCoordinateSystem().Xaxis);
            Vector yAxis  = VectorToSpeckle(plane.GetCoordinateSystem().Yaxis);
            var    _plane = new Plane(PointToSpeckle(plane.PointOnPlane), VectorToSpeckle(plane.Normal), xAxis, yAxis, ModelUnits);

            return(_plane);
        }
        private Node AnalyticalNodeToSpeckle(ReferencePoint revitNode)
        {
            var cs        = revitNode.GetCoordinateSystem();
            var localAxis = new Plane(PointToSpeckle(cs.Origin), VectorToSpeckle(cs.BasisZ), VectorToSpeckle(cs.BasisX), VectorToSpeckle(cs.BasisY));
            var basePoint = PointToSpeckle(cs.Origin); // alternative to revitNode.Position
                                                       //var speckleNode = new Node(basePoint, revitNode.Name, null, localAxis);
            var speckleNode = new Node();

            GetAllRevitParamsAndIds(speckleNode, revitNode);

            return(speckleNode);
        }
 public AC.Plane PlaneToNative(Plane plane)
 {
     return(new AC.Plane(PointToNative(plane.origin), VectorToNative(plane.normal)));
 }
        private Base BoundaryConditionsToSpeckle(BoundaryConditions revitBoundary)
        {
            var points = new List <XYZ> {
            };
            var nodes  = new List <Node> {
            };

            var cs        = revitBoundary.GetDegreesOfFreedomCoordinateSystem();
            var localAxis = new Plane(PointToSpeckle(cs.Origin), VectorToSpeckle(cs.BasisZ), VectorToSpeckle(cs.BasisX), VectorToSpeckle(cs.BasisY));

            var restraintType = revitBoundary.GetBoundaryConditionsType();
            var state         = 0;

            switch (restraintType)
            {
            case BoundaryConditionsType.Point:
                var point = revitBoundary.Point;
                points.Add(point);
                state = GetParamValue <int>(revitBoundary, BuiltInParameter.BOUNDARY_PARAM_PRESET); // 1 fixed, 2 pinned, 3 roller, 4 user/variable
                break;

            case BoundaryConditionsType.Line:
                var curve = revitBoundary.GetCurve();
                points.Add(curve.GetEndPoint(0));
                points.Add(curve.GetEndPoint(1));
                state = GetParamValue <int>(revitBoundary, BuiltInParameter.BOUNDARY_PARAM_PRESET_LINEAR);
                break;

            case BoundaryConditionsType.Area:
                var loops = revitBoundary.GetLoops();
                foreach (var loop in loops)
                {
                    foreach (var areaCurve in loop)
                    {
                        points.Add(areaCurve.GetEndPoint(1));
                    }
                }
                points = points.Distinct().ToList();
                state  = GetParamValue <int>(revitBoundary, BuiltInParameter.BOUNDARY_PARAM_PRESET_AREA);
                break;

            default:
                break;
            }



            var restraint = GetRestraintCode(revitBoundary, restraintType, state);

            foreach (var point in points)
            {
                var speckleNode = new Node();
                //var speckleNode = new Node(PointToSpeckle(point), null, restraint, localAxis);

                GetAllRevitParamsAndIds(speckleNode, revitBoundary);

                nodes.Add(speckleNode);
            }

            var speckleBoundaryCondition = new Base();

            if (nodes.Count > 1)
            {
                speckleBoundaryCondition["nodes"] = nodes;
            }
            else
            {
                speckleBoundaryCondition = nodes[0];
            }

            return(speckleBoundaryCondition);
        }