Координаты вершин комнаты

Главная Форумы Python Помогите с питон кодом Координаты вершин комнаты

Просмотр 1 сообщения - с 1 по 1 (всего 1)
  • Автор
    Сообщения
  • #7260 Score: 0
    Denis
    Участник
    4 pts

    Добрый день!

    Задача: Хочу решить задачу с автоматической расстановкой оборудования в помещении (в данном случае – светильники). Для этого мне нужно знать координаты вершин ограничивающих плоскость потолка. Для этого мне нужно получить:
    a) Линии из которых состоит комната, чтобы далее получить координаты вершин этих линий.
    б) Координаты вершин комнаты
    Проблема: используя BoundarySegment я получаю только плоскость пола.
    Вопрос: Как получить координаты линий, описывающих 3D комнату, а не 2D?

    П.С. В LookUP я нашел, где хронятся эти вершины, но не смог их достать.
    LookUP

    import clr
    
    # Import RevitAPI
    clr.AddReference("RevitAPI")
    import Autodesk
    from Autodesk.Revit.DB import *
    
    # Import DocumentManager and TransactionManager
    clr.AddReference("RevitServices")
    import RevitServices
    from RevitServices.Persistence import DocumentManager
    from RevitServices.Transactions import TransactionManager
    
    # Import ToDSType(bool) extension method
    clr.AddReference("RevitNodes")
    import Revit
    clr.ImportExtensions(Revit.Elements)
    clr.ImportExtensions(Revit.GeometryConversion)
    
    import clr
    clr.AddReference('ProtoGeometry')
    from Autodesk.DesignScript.Geometry import *
    
    #The input to this node will be stored in the IN[0] variable.
    
    doc =  DocumentManager.Instance.CurrentDBDocument
    app =  DocumentManager.Instance.CurrentUIApplication.Application
    
    appversion = app.VersionNumber
    
    rooms = []
    boundaries = []
    
    collector = FilteredElementCollector(doc)
    collector.OfCategory(BuiltInCategory.OST_Rooms)
    
    famtypeitr = collector.GetElementIdIterator()
    famtypeitr.Reset()
    
    output = []
    
    for item in famtypeitr:
    	elmID = item
    	eleminst = doc.GetElement(elmID)
    
    	#print eleminst
    	if eleminst.Area > 0:
    		room = eleminst
    	
    		boptions = Autodesk.Revit.DB.SpatialElementBoundaryOptions()
    		boundsegs = room.GetBoundarySegments(boptions)
    		boundcurves = []
    		if app.VersionNumber == 2016:
    			for bound in boundsegs:
    				crvs = []
    				for seg in bound:
    					crv = seg.Curve()
    					crvs.append(Revit.GeometryConversion.RevitToProtoCurve.ToProtoType( crv, True ))
    				boundcurves.append(crvs)
    		else:
    			for bound in boundsegs:
    				crvs = []
    				for seg in bound:
    					crv = seg.GetCurve()
    					crvs.append(Revit.GeometryConversion.RevitToProtoCurve.ToProtoType( crv, True ))
    				boundcurves.append(crvs)			
    	
    		rooms.append(room)
    		boundaries.append(boundcurves)
        
    #output.append(rooms)
    output.append(boundaries)	
            
    #Assign your output to the OUT variable
    OUT = boundaries
Просмотр 1 сообщения - с 1 по 1 (всего 1)
  • Для ответа в этой теме необходимо авторизоваться.