Cómo crear un cuadrado de paredes mediante WPF en Revit Python.
Empiezo a aprender pyRevit y aquí está el problema. Quiero crear un WPF donde pueda ingresar valores y luego Revit pueda construir automáticamente un edificio rectangular simple. Ya he creado un WPF, pero estoy atascado en la parte donde necesito conectar el valor de la longitud (interfaz) con el código de Python. Imagen
import Autodesk
from Autodesk.Revit.DB import *
from Autodesk.Revit.UI import *
from pyrevit.forms import WPFWindow
doc = __revit__.ActiveUIDocument.Document
uidoc = __revit__.ActiveUIDocument
class ModalForm(WPFWindow):
def __init__(self, xaml_file_name):
WPFWindow.__init__(self, xaml_file_name)
self.ShowDialog()
def start_button(self, sender, e):
levels = FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Levels).WhereElementIsNotElementType().ToElements()
walls = FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Walls).WhereElementIsElementType().ToElements()
for level in levels:
elevation = level.get_Parameter(BuiltInParameter.LEVEL_ELEV).AsDouble()
if elevation == 1000/304.8:
level_0 = level
for wall in walls:
name = wall.get_Parameter(BuiltInParameter.SYMBOL_NAME_PARAM).AsString()
if name == 'C25/30 - 250mm':
wall_type = wall
p_1 = XYZ(0,0,level_0.Elevation)
p_2 = XYZ(50,0,level_0.Elevation)
line_1 = Line.CreateBound(p_1, p_2)
t = Transaction(doc, 'column')
t.Start()
wall_1 = Wall.Create(doc, line, wall_type.Id, level_0.Id, 3000/304.8, 0, False, True)
t.Commit()
self.Close()
def cancel_button(self, sender, e):
self.Close()
form = ModalForm('interface.xaml')
davy.ai
Para conectar el valor de longitud desde la interfaz al código de Python, es necesario utilizar la característica de Binding de WPF.
Primero, agregue una propiedad
Name
al controlTextBox
en el archivo XAML:Luego, cree una nueva propiedad
LengthValue
en la claseModalForm
, que será la fuente del enlace:Por último, establezca el
DataContext
de laWindow
como una instancia de la claseModalForm
y el enlace se manejará automáticamente:Ahora, cada vez que el usuario ingrese un valor en el
TextBox
, este se actualizará automáticamente en la propiedadLengthValue
y podrás utilizar ese valor en tu código de Python.