algorithmic modeling for Rhino
There are many object/family types in both Rhino and especially Revit. It seems that some solutions might take Rhino solids and get them to Mass objects. Another solution might take a surface and create a curtain wall from it. And the list goes on and on.
To start a discussion, What are the important family types to support in Revit?
Is it OK just to do massing? Curtain walls? What might be the most basic set of families that need to be supported making a workflow useful?
Tags:
I'm using revit and I think that while there are a lot of families, the main thing would solve a good communicate with the most basic group of families such as walls, floors, slabs, roofs and later would be very useful to comunicarce with families of columas and beams.
I hope this group will develop, for my part I am studying the Revit API with Pythonenvironment, but can not find much information rather than the link to add Scott.
When you say you would like to access Revit from the Python environment, which environment? using Revit's API or RhinoPython?
The order that I've been developing types/families in IFC (primarily based on user request and needs) has been Mass (still more to do on this), Slabs, Beams/Column/Members, Walls/CurtainWalls and Roofs.
If I was to start making a wish list to RMA (as a 3rd party developer), I'd personally start with Rhino and more objects with "explicit history" to break down the object attributes. Grasshopper by it's nature permits this. But Rhino generally stores items as a Brep with no knowledge of whether is an extrusion, loft, sweep etc. And the subtraction features (which might represent a mitre or a drill hole) need to be "reverse engineered" to be exchanged as the relevant construction attribute in software such as Revit or Tekla.
Not all users/projects use Grasshopper (or use Grasshopper all the way through) so there is still a demand to export Rhino to Revit that is more difficult from my point of view. The new light weight extrusion is a fantastic improvement that I've seen enable a 2 GB file to be saved as 200MB. But it also stores each element with it's own profile curve so a means to "aggregate" similar extrusions with a common profile curve would also be a welcome improvement.
I look forward to discussing this further, and seeing what others thoughts are.
For project components such as beam, members, columns etc, you will get the best results if you set up an IFC Beam type (like a revit family) including profile information, and assign it to a line (or other curve) with an orientation.
Does this blog post help? http://geometrygym.blogspot.com/2012/05/gh-to-revit-families-cardin...
Your question about generating the explicit geometry (ie user extrusion) can be more difficult to work with. It is generally possible to detect the profile and extrusion orientation, but this soon becomes near impossible if it's a sweep etc (this relates in part to my suggestion for RMA storing history information on breps rather than just faces and trims).
For building envelopes (or perhaps referred to as building mass) Revit provides a set of tools that can generate nurbs surfaces and the like, more details here: http://thebuildingcoder.typepad.com/blog/2009/07/revit-form-creatio...
Usually, i import geometries as masses and the convert part of then as roofs and walls.
Most of complex geometries i leave them as masses.
And this becomes the discussion. Massing objects work great in many cases, but there are limitations to using massing objects in Revit.
Is it best to use massing objects or be able developed columns, panels, exported the seperate objects in Revit.
Perhaps it is just an additional workflow?
When using Massing objects, is there any part of the workflow that does not work at this time?
i don't like to use masses. in many cases, it doesn't accept the geometry as a wall or ceiling or anithing. and then a i need to rebuild it a lot of times and do a lot of tries untill it accept.
for me, the IFC looks like the best option for advanced users. But it looks kind of buggy and i do not want to use a lot of time to insert a lot of descriptions that will not be so important ins the BIM model for me. Usually, i just want to extract technical drawings from that.
Yes, this is good to know. So the use a massing objects is limited.
Here's one example of a workflow using massing, this time the revit massing family opened in Vasari. Files soon posted to http://geometrygym.blogspot.com
I was looking through the Revit API. Here is a list of Objects we can create with the API and the information needed to create them. So is there a specific set of walls r floors that look interesting?
#region Assembly RevitAPI.dll, v2.0.50727
// C:\Program Files\Autodesk\Revit Architecture 2012\Program\RevitAPI.dll
#endregion
using Autodesk.Revit.DB;
using Autodesk.Revit.DB.Architecture;
using Autodesk.Revit.DB.Electrical;
using Autodesk.Revit.DB.Mechanical;
using Autodesk.Revit.DB.Plumbing;
using Autodesk.Revit.DB.Structure;
using System;
using System.Collections.Generic;
namespace Autodesk.Revit.Creation
{
// Summary:
// The Document Creation object is used to create new instances of elements
// within the Autodesk Revit project.
//
public class Document : ItemFactoryBase
{
Wall NewWall(CurveArray profile, bool structural);
Wall NewWall(Curve curve, Level level, bool structural);
Wall NewWall(CurveArray profile, WallType wallType, Level level, bool structural);
Wall NewWall(CurveArray profile, WallType wallType, Level level, bool structural, XYZ normal);
Wall NewWall(Curve curve, WallType wallType, Level level, double height, double offset, bool flip, bool structural);
ElementSet NewWalls(List<ProfiledWallCreationData> dataList);
ElementSet NewWalls(List<RectangularWallCreationData> dataList);
Opening NewOpening(Element hostElement, CurveArray profile, bool bPerpendicularFace);
Opening NewOpening(Element famInstElement, CurveArray profile, eRefFace iFace);
Opening NewOpening(Level bottomLevel, Level topLevel, CurveArray profile);
Opening NewOpening(Wall wall, XYZ pntStart, XYZ pntEnd);
CurtainSystem NewCurtainSystem(FaceArray faces, CurtainSystemType curtainSystemType);
ElementSet NewCurtainSystem(ReferenceArray faces, CurtainSystemType curtainSystemType);
Floor NewFloor(CurveArray profile, bool structural);
Floor NewFloor(CurveArray profile, FloorType floorType, Level level, bool structural);
Floor NewFloor(CurveArray profile, FloorType floorType, Level level, bool structural, XYZ normal);
Floor NewFoundationSlab(CurveArray profile, FloorType floorType, Level level, bool structural, XYZ normal);
ContFooting NewFoundationWall(ContFootingType contFootingType, Wall wall);
Floor NewSlab(CurveArray profile, Level level, Line slopedArrow, double slope, bool isStructural);
SlabEdge NewSlabEdge(SlabEdgeType SlabEdgeType, Reference reference);
SlabEdge NewSlabEdge(SlabEdgeType SlabEdgeType, ReferenceArray references);
RebarBarType NewRebarBarType();
BeamSystem NewBeamSystem(CurveArray profile, Level level);
BeamSystem NewBeamSystem(CurveArray profile, SketchPlane sketchPlane);
BeamSystem NewBeamSystem(CurveArray profile, Level level, XYZ direction, bool is3d);
BeamSystem NewBeamSystem(CurveArray profile, SketchPlane sketchPlane, XYZ direction, bool is3d);
ExtrusionRoof NewExtrusionRoof(CurveArray profile, ReferencePlane refPlane, Level level, RoofType roofType, double extrusionStart, double extrusionEnd);
Fascia NewFascia(FasciaType FasciaType, Reference reference);
Fascia NewFascia(FasciaType FasciaType, ReferenceArray references);
FootPrintRoof NewFootPrintRoof(CurveArray footPrint, Level level, RoofType roofType, out ModelCurveArray footPrintToModelCurvesMapping);
Gutter NewGutter(GutterType GutterType, Reference reference);
Gutter NewGutter(GutterType GutterType, ReferenceArray references);
Truss NewTruss(TrussType trussType, SketchPlane sketchPlane, Curve baseCurve);
Grid NewGrid(Arc arc);
Grid NewGrid(Line line);
ElementSet NewGrids(CurveArray curves);
TopographySurface NewTopographySurface(IList<XYZ> points);
SpotDimension NewSpotCoordinate(View view, Reference reference, XYZ origin, XYZ bend, XYZ end, XYZ refPt, bool hasLeader);
SpotDimension NewSpotElevation(View view, Reference reference, XYZ origin, XYZ bend, XYZ end, XYZ refPt, bool hasLeader);
FamilyInstance NewFamilyInstance(Curve curve, FamilySymbol symbol, Level level, StructuralType structuralType);
FamilyInstance NewFamilyInstance(XYZ location, FamilySymbol symbol, Level level, StructuralType structuralType);
FamilyInstance NewFamilyInstance(XYZ location, FamilySymbol symbol, Element host, Level level, StructuralType structuralType);
Area NewArea(ViewPlan areaView, UV point);
AreaLoad NewAreaLoad(Element host, XYZ force, bool isReaction, AreaLoadType symbol);
AreaLoad NewAreaLoad(IList<XYZ> points, XYZ force, bool isReaction, AreaLoadType symbol);
AreaLoad NewAreaLoad(CurveArray curvesArr, int[] refPntIdxs, int[] ends, IList<XYZ> forces, bool isReaction, AreaLoadType symbol);
AreaLoad NewAreaLoad(CurveArray curvesArr, int[] refPntIdxs, int[] ends, XYZ force0, XYZ force1, XYZ force2, bool isReaction, AreaLoadType symbol);
AreaReinforcement NewAreaReinforcement(Element host, CurveArray curves, XYZ direction);
ElementSet NewAreas(List<AreaCreationData> dataList);
AreaTag NewAreaTag(ViewPlan areaView, Area room, UV point);
ModelCurve NewAreaBoundaryLine(SketchPlane sketchPlane, Curve geometryCurve, ViewPlan areaView);
BoundaryConditions NewAreaBoundaryConditions(Element hostElement, TranslationRotationValue X_Translation, double X_TranslationSpringModulus, TranslationRotationValue Y_Translation, double Y_TranslationSpringModulus,
TranslationRotationValue Z_Translation, double Z_TranslationSpringModulus);
BoundaryConditions NewAreaBoundaryConditions(Reference reference, TranslationRotationValue X_Translation, double X_TranslationSpringModulus, TranslationRotationValue Y_Translation, double Y_TranslationSpringModulus,
TranslationRotationValue Z_Translation, double Z_TranslationSpringModulus);
BoundaryConditions NewLineBoundaryConditions(Element hostElement, TranslationRotationValue X_Translation, double X_TranslationSpringModulus, TranslationRotationValue Y_Translation, double Y_TranslationSpringModulus,
TranslationRotationValue Z_Translation, double Z_TranslationSpringModulus, TranslationRotationValue X_Rotation, double X_RotationSpringModulus);
BoundaryConditions NewLineBoundaryConditions(Reference reference, TranslationRotationValue X_Translation, double X_TranslationSpringModulus, TranslationRotationValue Y_Translation, double Y_TranslationSpringModulus,
TranslationRotationValue Z_Translation, double Z_TranslationSpringModulus, TranslationRotationValue X_Rotation, double X_RotationSpringModulus);
BoundaryConditions NewPointBoundaryConditions(Reference reference, TranslationRotationValue X_Translation, double X_TranslationSpringModulus, TranslationRotationValue Y_Translation, double Y_TranslationSpringModulus,
TranslationRotationValue Z_Translation, double Z_TranslationSpringModulus, TranslationRotationValue X_Rotation, double X_RotationSpringModulus, TranslationRotationValue Y_Rotation, double Y_RotationSpringModulus,
TranslationRotationValue Z_Rotation, double Z_RotationSpringModulus);
PointLoad NewPointLoad(Reference reference, XYZ force, XYZ moment, bool isReaction, PointLoadType symbol, SketchPlane plane);
PointLoad NewPointLoad(XYZ point, XYZ force, XYZ moment, bool isReaction, PointLoadType symbol, SketchPlane plane);
LineLoad NewLineLoad(Element host, IList<XYZ> forces, IList<XYZ> moments, bool uniform, bool projected, bool isReaction, LineLoadType symbol, SketchPlane plane);
LineLoad NewLineLoad(IList<XYZ> points, IList<XYZ> forces, IList<XYZ> moments, bool uniform, bool projected, bool isReaction, LineLoadType symbol, SketchPlane plane);
LineLoad NewLineLoad(Reference reference, IList<XYZ> forces, IList<XYZ> moments, bool uniform, bool projected, bool isReaction, LineLoadType symbol, SketchPlane plane);
LineLoad NewLineLoad(XYZ point, XYZ force, XYZ moment, XYZ point1, XYZ force1, XYZ moment1, bool uniform, bool projected, bool isReaction, LineLoadType symbol, SketchPlane plane);
LoadCase NewLoadCase(string name, LoadNature nature, Category category);
LoadCombination NewLoadCombination(string name, int typeInd, int stateInd, double[] factors, LoadCaseArray cases, LoadCombinationArray combinations, LoadUsageArray usages);
LoadNature NewLoadNature(string name);
LoadUsage NewLoadUsage(string name);
MechanicalSystem NewMechanicalSystem(Connector baseEquipmentConnector, ConnectorSet connectors, DuctSystemType ductSystemType);
FamilyInstance NewCrossFitting(Connector connector1, Connector connector2, Connector connector3, Connector connector4);
Duct NewDuct(Connector connector1, Connector connector2, DuctType ductType);
Duct NewDuct(XYZ point, Connector connector, DuctType ductType);
Duct NewDuct(XYZ point1, XYZ point2, DuctType ductType);
FamilyInstance NewElbowFitting(Connector connector1, Connector connector2);
FlexDuct NewFlexDuct(IList<XYZ> points, FlexDuctType ductType);
FlexDuct NewFlexDuct(Connector connector1, Connector connector2, FlexDuctType ductType);
FlexDuct NewFlexDuct(Connector connector, IList<XYZ> points, FlexDuctType ductType);
FlexPipe NewFlexPipe(IList<XYZ> points, FlexPipeType pipeType);
FlexPipe NewFlexPipe(Connector connector1, Connector connector2, FlexPipeType pipeType);
FlexPipe NewFlexPipe(Connector connector, IList<XYZ> points, FlexPipeType pipeType);
FamilyInstance NewTakeoffFitting(Connector connector, MEPCurve curve);
FamilyInstance NewTeeFitting(Connector connector1, Connector connector2, Connector connector3);
FamilyInstance NewTransitionFitting(Connector connector1, Connector connector2);
FamilyInstance NewUnionFitting(Connector connector1, Connector connector2);
ElectricalSystem NewElectricalSystem(Connector connector, ElectricalSystemType elecSysType);
ElectricalSystem NewElectricalSystem(ElementSet electComponents, ElectricalSystemType elecSysType);
Wire NewWire(Curve curve, View view, Connector startConnector, Connector endConnector, WireType wireType, WiringType wiringType);
PathReinforcement NewPathReinforcement(Element host, CurveArray curves, bool flip);
Room NewRoom(Phase phase);
Room NewRoom(Level level, UV point);
Room NewRoom(Room room, PlanCircuit circuit);
ModelCurveArray NewRoomBoundaryLines(SketchPlane sketchPlane, CurveArray curves, View view);
ElementSet NewRooms(Level level);
ElementSet NewRooms(List<RoomCreationData> dataList);
ElementSet NewRooms(Level level, Phase phase);
ElementSet NewRooms(Phase phase, int count);
RoomTag NewRoomTag(Room room, UV point, View view);
Space NewSpace(Phase phase);
Space NewSpace(Level level, UV point);
Space NewSpace(Level level, Phase phase, UV point);
ModelCurveArray NewSpaceBoundaryLines(SketchPlane sketchPlane, CurveArray curves, View view);
ElementSet NewSpaces(Phase phase, int count);
ElementSet NewSpaces(Level level, Phase phase, View view);
SpaceTag NewSpaceTag(Space space, UV point, View view);
Zone NewZone(Level level, Phase phase);
ViewPlan NewAreaViewPlan(string pViewName, Level pLevel, AreaElemType areaElemType);
ViewDrafting NewViewDrafting();
ViewSheet NewViewSheet(FamilySymbol titleBlock);
IndependentTag NewTag(View dbview, Element elemToTag, bool addLeader, TagMode tagMode, TagOrientation tagOrientation, XYZ pnt);
}
}
Here is a PDF of this list that is easier to read.
Welcome to
Grasshopper
Added by Parametric House 0 Comments 0 Likes
Added by Parametric House 0 Comments 0 Likes
Added by Parametric House 0 Comments 0 Likes
Added by Parametric House 0 Comments 0 Likes
Added by Parametric House 0 Comments 0 Likes
© 2024 Created by Scott Davidson. Powered by