Esempio n. 1
0
        public Autodesk.Revit.DB.FamilyInstance CreateFromDTO(Document doc, JObject source)
        {
            Common.Models.FamilyInstance famI = source.ToObject <Common.Models.FamilyInstance>();

            Autodesk.Revit.DB.XYZ newOrigin = new Autodesk.Revit.DB.XYZ(famI.Transform.Origin.X, famI.Transform.Origin.Y, famI.Transform.Origin.Z);

            Autodesk.Revit.DB.FamilySymbol fam = doc.GetElement(new ElementId(Int32.Parse(famI.FamilyId))) as Autodesk.Revit.DB.FamilySymbol;
            if (fam == null)
            {
                throw new Exception($"Failed to find family with id {famI.FamilyId}");
            }

            Autodesk.Revit.DB.FamilyInstance newFamily;
            if (famI.HostId != null)
            {
                ElementId hostId = new ElementId(Int32.Parse(famI.HostId));
                newFamily = doc.Create.NewFamilyInstance(
                    newOrigin,
                    fam,
                    doc.GetElement(hostId),
                    StructuralType.NonStructural
                    );
            }
            else
            {
                newFamily = doc.Create.NewFamilyInstance(
                    newOrigin,
                    fam,
                    StructuralType.NonStructural
                    );
            }

            Autodesk.Revit.DB.Transform trans = newFamily.GetTransform();

            double rotation = Math.Atan2(famI.Transform.BasisX.Y, famI.Transform.BasisX.X);

            Autodesk.Revit.DB.XYZ a1 = newOrigin;
            Autodesk.Revit.DB.XYZ a2 = new Autodesk.Revit.DB.XYZ(a1.X, a1.Y, a1.Z + 10);
            Line axis = Line.CreateBound(a1, a2);

            newFamily.Location.Rotate(axis, rotation);

            return(newFamily);
        }
Esempio n. 2
0
        public void MapFromDTO(JObject sourceJSON, Autodesk.Revit.DB.FamilyInstance dest)
        {
            Autodesk.Revit.DB.Transform trans = dest.GetTransform();

            Common.Models.FamilyInstance source = sourceJSON.ToObject <Common.Models.FamilyInstance>();

            Autodesk.Revit.DB.XYZ newOrigin = new Autodesk.Revit.DB.XYZ(source.Transform.Origin.X, source.Transform.Origin.Y, source.Transform.Origin.Z);

            double oldAngle = Math.Atan2(trans.BasisX.Y, trans.BasisX.X);
            double newAngle = Math.Atan2(source.Transform.BasisX.Y, source.Transform.BasisX.X);

            Autodesk.Revit.DB.XYZ translation = newOrigin - trans.Origin;
            double rotation = newAngle - oldAngle;

            Autodesk.Revit.DB.XYZ a1 = trans.Origin;
            Autodesk.Revit.DB.XYZ a2 = new Autodesk.Revit.DB.XYZ(a1.X, a1.Y, a1.Z + 10);
            Line axis = Line.CreateBound(a1, a2);

            dest.Location.Rotate(axis, rotation);
            dest.Location.Move(translation);
        }