DynamoDS / Dynamo

Open Source Graphical Programming for Design
https://dynamobim.org
Other
1.72k stars 632 forks source link

Request - Ability to Define 'Dynamo Surfaces' Independent of Conceptual Forms #597

Closed archinate closed 10 years ago

archinate commented 10 years ago

Probably a futile immediate request... but something to file away for the future.

Similar to how you can define points and curves as abstract geometry (XYZ, Line, etc), will it be possible to define surface geometries independently of conceptual form creation in the massing environment?

It would be great if you could define a wide range of surfaces, meshes, and solids inside of Dynamo without necessarily being tied to the Revit/Vasari form creation tools. These could then be used to drive form creation downstream should the user choose to. It would also let the user have a wider range of options for developing geometry controls within the project environment and not have to switch to a family context.

-Nate

LevL commented 10 years ago

Solids as Geometry Objects could be already created in Dynamo. Here are relevant nodes:

"Extract Solid from Element" allows to get Solid from existing Revit element. "Create Extrusion Geometry", "Create Blend Geometry", "Create Revolved Geometry", "Create Swept Geometry" allows creation of Solids. "Boolean Geometric Operation" allows union, intersections.and subtraction of Solids.

"Free Form" allows to set computed Solid into Revit Form Element.

Vasari Beta 3 enables more capabilities (which were added to Vasari API after Revit API release): "Transform Solid" makes new Solid from existing with transformation. "Blend Edges" puts fillet on edge(s) of Solid (creating new Solid) "Chamfer Edges"puts chamfer on edge(s) of Solid (creating new Solid). "Patch Solid" allows to complete Solid with one-sided edges (typically imported geometry into Revit) by patches on list of Curve Loops. "List Onesided Edges" node will make those Curve Loops on all one-sided edges of the in-complete Solid.

Now about Faces. "Face Through Points" allows creation of Face through n x m grid of XYZs. Note: this allows creation of curved faces as well as change of uv lines of planar faces to desired pattern.

To get Face into Revit node "Replace Faces" (Vasari only) could be used. It creates new Solid by replacing set of faces of that Solid by built or constructed Faces which are not part of the Solid. As example, this node could be used to replace uv lines of the planar face to desired pattern, make face with replaced uv lines a face of the Solid, create FreeForm element in the Mass family with this Solid as its geometry, and drive curtain system along desired pattern on planar face.There are other potential uses of this node as example replacing planar face of the Solid with curved Face built on grid of XYZ points.

Note: any FreeForm built with Dynamo/Vasari will open in Revit, but the graph will not run in Revit if using nodes implemented via Vasari API.

This is just overview of current capabilities. I am sure there are more desired features. Any specific requests in this regard? Thanks!

Developing geometry within the project environment and creating families without switching to family context is possible in principal, just needs careful implementation. When executing graph in project environment families could not be created per Revit API limitation. Such creation needs to be put as additional steps, one per each family, as sequence of execution steps after "regular" graph execution steps.

Solids and Faces could be created in project environment, but passing those to use for Families might need export-import cycle (could not think of a better way unfortunately)

Hope this is helpful.

mjkkirschner commented 10 years ago

Hi, are some/all of these tools available from within the python node? - if so, whats the proper setup to create a blend or extrusion geometry, for instance.

LevL commented 10 years ago

You could use any RevitAPI methods in the python script node (confirmed). Necessary imports are placed by framework.

Extrusion geometry node needs as inputs:

  1. list of CurveLoops (coplanar, without intersections or self-intersections)
  2. direction of extrusion (not parallel to plane of CurveLoops)
  3. Distance. The RevitAPI call is like this: extrusionSolid = GeometryCreationUtilities.CreateExtrusionGeometry(loops, direction, distance)

Blend node needs as inputs:

  1. CurveLoop (the first end of the blend, closed planar loop).
  2. CurveLoop (the second end of the blend, closed planar loop, plane not coincident with plane of first loop).

The RevitAPI call is like this:

blendSolid = GeometryCreationUtilities.CreateBlendGeometry(firstLoop, secondLoop, vertPairs)

The last argument ("vertPairs") should be object of type List < VertexPair >. It is rather tricky to setup. Borrow code from the Dynamo node source or plan for some experimenting time.

LevL commented 10 years ago

While on this subject I wonder if it is good time to bring attention to a few computational nodes related to locating and fitting of curves: "Bisector Line", "Best Fit Line", "Best Fit Arc", "Approximate By Tangent Arcs" (approximates spline by sequence of tangent arcs), and "Equal Distanced XYZs On Curve" (does not need divided curve placed in Revit). Those nodes are available with Vasari. Revit has "Best Fit Line" and "Equal Distanced XYZs On Curve" nodes, but not others.

kronz commented 10 years ago

Hey Nate, Yes, I hear you about wanting to define surfaces . . . current implementation, as Lev indicates, is really focused around solids and then extracting faces and edges from them as you see fit. Keep an eye on the builds coming out over the next few days, the creation of these solids should be a lot easier (thanks Peter and Lev). Another method I use quite a bit is to construct my own wireframes/grids of lines and splines that define the points and intersections I need for placing components. I know it's not the same thing as just dealing directly with a surface, but we are investigating other methods.

ikeough commented 10 years ago

Thanks @archinate. We "filed it away for the future", and then we did it! Loads of new non-Revit geometry creation routines in the geometry library. I'll close this for now.