Hi guys
I am using the archi-lab node, New section view by elements, and want it to make more than one view for different elements as the picture below. I have tried list.Map but didn’t work can any body help.
Thank you
Hi guys
I am using the archi-lab node, New section view by elements, and want it to make more than one view for different elements as the picture below. I have tried list.Map but didn’t work can any body help.
Thank you
Did not work with me, but I am trying to manipulate the python code.
Thank you kulkul for ur suggestion, just I changed the python code and it’s worked !.
@Mohammad_Nawar can you share the changes you made to the python code?
Here you go, if didn’t work let me know.
#Copyright(c) 2014, Konrad Sobon
# @arch_laboratory, http://archi-lab.net
import clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
# Import ToDSType(bool) extension method
clr.AddReference("RevitNodes")
import Revit
clr.ImportExtensions(Revit.Elements)
# Import DocumentManager and TransactionManager
clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
from System.Collections.Generic import *
# Import RevitAPI
clr.AddReference("RevitAPI")
import Autodesk
from Autodesk.Revit.DB import *
doc = DocumentManager.Instance.CurrentDBDocument
uiapp = DocumentManager.Instance.CurrentUIApplication
app = uiapp.Application
#The inputs to this node will be stored as a list in the IN variable.
dataEnteringNode = IN
d = []
v = IN[1]
s = 0
for k in IN[0]:
elements = []
for i in k:
elements.append(UnwrapElement(i))
elements.append(UnwrapElement(k))
viewName = v[s]
offset = float(IN[2])
s = 1+s
#get ViewFamilyType for a 3D View
collector = FilteredElementCollector(doc)
viewTypeColl = collector.OfClass(ViewFamilyType)
for i in viewTypeColl:
if i.ViewFamily == ViewFamily.ThreeDimensional:
viewType = i
else:
continue
# "Start" the transaction
TransactionManager.Instance.EnsureInTransaction(doc)
#define bounding box enclosing all elements
bboxMin, bboxMax = [], []
i = elements[0]
bboxMin.append(i.get_BoundingBox(doc.ActiveView).Min)
bboxMax.append(i.get_BoundingBox(doc.ActiveView).Max)
minX, minY, minZ, maxX, maxY, maxZ = [], [], [], [], [], []
for i, j in zip(bboxMin, bboxMax):
minX.append(i.X)
minY.append(i.Y)
minZ.append(i.Z)
maxX.append(j.X)
maxY.append(j.Y)
maxZ.append(j.Z)
bboxMinX = min(minX)
bboxMinY = min(minY)
bboxMinZ = min(minZ)
bboxMaxX = max(maxX)
bboxMaxY = max(maxY)
bboxMaxZ = max(maxZ)
#create a bounding box
bbox = BoundingBoxXYZ()
bbox.Min = XYZ((bboxMinX - offset), (bboxMinY - offset), (bboxMinZ - offset))
bbox.Max = XYZ((bboxMaxX + offset), (bboxMaxY + offset), (bboxMaxZ + offset))
#create 3d View
view = View3D.CreateIsometric(doc, viewType.Id)
d.append(view)
view.Name = viewName
view.SetSectionBox(bbox)
# "End" the transaction
TransactionManager.Instance.TransactionTaskDone()
#Assign your output to the OUT variable
OUT = d
I only added for loop and it’s woking perfectly with my case which take the first element from each list as the picture below…
@Mohammad_Nawar Thank you that was very helpful.
I have one last thing perplexing me. the section box size appears to not be set by multiple elements, but by the element on the 0 index. So where I would like the section dbox to be sized around the three elements 2459,2793 & 2906 it is only setting the section box based on element 2459.
Not too sure if you can get the boundingbox of a group of elements but one thing you could do is take the minimum x, y, z and all of the elements bounding boxes’ minpoint and the maximum x y z of all of the boundingboxes’ maxpoint and create a bounding box using that. Will be a small amount of extra code though.
Hey guys, I tried to use the python script but I got the error "
Warning: IronPythonEvaluator.EvaluateIronPythonScript operation failed.
Traceback (most recent call last):
File “”, line 35, in
TypeError: iteration over non-sequence of type NoneType".
Anyone know how to fix it? thanks!