@Johannes_Nel Could you upload a stripped down version of your Revit model to try running this script on, or an image showing the geometry you are working with? Hard to help figure out the issue with just the .dyn!
Hi @awilliams. I have uploaded the .rvt file in my post above. It’s the topo on the ‘right’ which I am trying to have follow the floor hovering above it:
So youbare trying to pull the contour lines into the flat surface, or trying to fill the topography to create a ‘thickened’ floor that touches the face of the topography?
@Johannes_Nel I’m not on a computer with Dynamo/Revit right now to experiment but I’m inclined to think that you could use the OOTB node Select Face (found in this list of Revit OOTB nodes: http://dictionary.dynamobim.com/#/Revit/Selection/Action/ ) and select the bottom face of the floor, then input that into an Element.Geometry node to get the curves. Then input that into PointAtEqualSegmentLength (http://dictionary.dynamobim.com/#/Geometry/Curve/Action/PointsAtEqualSegmentLength) to produce points along those curves. Those points could be added to your topo points rather than the Grid node in the script you referenced from a previous thread. Give that a try and see if it works; I will try and have a look when I have Dynamo, Revit, and enough time available, unless someone is able to help you out sooner
@awilliams Following your suggestion I managed to get the curves selected and divided - and then to generate new topo points at those points. The next iteration will be to offset the curves from the floor and add those points to the existing topo surface. Have a look:
In this situation, I would probably try to project the road with an offset onto a flat plane below the topography, create a solid from both faces and then intersect the geometries, see this for instance:
Just had a look at your latest graph - you’re close!
Notice that you are feeding a surface into the Surface.ByPatch node that you’re inputting into the Topography.IntersectionWithPlane node. No need for the Surface.ByPatch node as you already have a surface - you need to give the Topography.IntersectionWithPlane node a plane input This thread should help:
@awilliams is right, be careful to match inputs and outputs types. Topography.PolySurface (Zhukoven) and Geometry.Intersect nodes could also be useful in this process…
Obtained the below result with the same definition as above by splitting the topography up to the extent of the desired offset … Topography-2.rvt (492 KB)
BTW, a non-Dynamo way to do it is to make 3D splines where you want the edges of topo to be in a Mass family, export to DWG, divide the splines with 2’ long line Blocks on a different layer, import the DWG back in and do topo by imported instance.
That video verily expanded my mind. Hence, I wrote this AutoLISP to divide the lines in AutoCAD so all the
the endpoints can become topo points in Revit.
;Measure all lines by block "dl"
(defun c:dvall (/ e i n s x)
(if (setq s (ssget "x" '((0 . "LINE,SPLINE,ELLIPSE,POLYLINE,ARC"))))
(progn (command "-insert" "dl=" ^c ^c)
(setq i 0
n (sslength s))
(repeat n
(setq e (ssname s i)
x (cdr (assoc 0 (entget e)))
i (1+ i))
(command "measure" e "b" "dl" "" "6")
;;; (print i)
)))
(princ))
Hi @Vikram_Subbaiah Thank you for the advise. As I understand you manually split the topography before running the script? Good workaround! I would like to incorporate the splitting of the surface by a defined offset into the script - in the future.