grids_v2
import clr
import sys
import os
import System
sys.path.append(r"C:\Users\nono\AppData\Roaming\Extended.WPF.Toolkit.Binaries.NET.4.x")
clr.AddReference("IronPython.Wpf")
clr.AddReference("PresentationFramework")
clr.AddReference("System.Xml")
clr.AddReference("PresentationCore")
clr.AddReference("System.Windows")
clr.AddReference('System.Windows.Forms')
clr.AddReference("System.Core")
clr.ImportExtensions(System.Linq)
from System.Collections.ObjectModel import ObservableCollection
from System.ComponentModel import INotifyPropertyChanged, PropertyChangedEventArgs
from System.IO import StringReader
from System.Windows.Markup import XamlReader, XamlWriter
from System.Windows import Window, Application
import System.Windows.Controls
from System.Windows.Controls import *
from System.Windows.Forms import MessageBox
from string import ascii_uppercase
import wpf
# Import Revit API
clr.AddReference('RevitAPI')
import Autodesk
from Autodesk.Revit.DB import *
import Autodesk.Revit.DB as DB
clr.AddReference('RevitNodes')
import Revit
clr.ImportExtensions(Revit.GeometryConversion)
clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument
class ObservableObject(INotifyPropertyChanged):
"""Implementing INotifyPropertyChanged interface"""
def __init__(self):
self._property_changed = None
def add_PropertyChanged(self, handler):
self._property_changed = handler
def remove_PropertyChanged(self, handler):
self._property_changed = None
def notify_property_changed(self, property_name):
if self._property_changed:
self._property_changed(self, PropertyChangedEventArgs(property_name))
class Grids_X_VM(ObservableObject):
"""Set Properties for grids X"""
def __init__(self, Label, Position):
super(Grids_X_VM, self).__init__()
self._label = Label
self._position = Position
@property
def Label(self):
return self._label
@Label.setter
def Label(self, value):
if self._label != value:
self._label = value
self.notify_property_changed("Label")
@property
def Position(self):
return self._position
@Position.setter
def Position(self, value):
if self._position != value:
self._position = value
self.notify_property_changed("Position")
class Grids_Y_VM(ObservableObject):
"""Set Properties for grids Y"""
def __init__(self, Label, Position):
super(Grids_Y_VM, self).__init__()
self._label = Label
self._position = Position
@property
def Label(self):
return self._label
@Label.setter
def Label(self, value):
if self._label != value:
self._label = value
self.notify_property_changed("Label")
@property
def Position(self):
return self._position
@Position.setter
def Position(self, value):
if self._position != value:
self._position = value
self.notify_property_changed("Position")
class Grids_Z_VM(ObservableObject):
"""Set Properties for levels """
def __init__(self, Label, Position):
super(Grids_Z_VM, self).__init__()
self._label = Label
self._position = self._format_position(Position)
@property
def Label(self):
return self._label
@Label.setter
def Label(self, value):
if self._label != value:
self._label = value
self.notify_property_changed("Label")
def _format_position(self, value):
# Format the position to two decimal places
return "{:.2f}".format(float(value))
@property
def Position(self):
return self._position
@Position.setter
def Position(self, value):
formatted_value = self._format_position(value)
if self._position != formatted_value:
self._position = formatted_value
self.notify_property_changed("Position")
class MyWindow(Window):
layout = '''
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"
Title="Grids"
Height="530" Width="340"
WindowStartupLocation="CenterScreen">
<Grid Margin="10">
<Grid.RowDefinitions>
<RowDefinition Height="7*" />
<RowDefinition Height="76*" />
<RowDefinition Height="10*" />
<RowDefinition Height="7*"/>
</Grid.RowDefinitions>
<DockPanel>
<Label Content="Nom:" />
<TextBlock Text="Grid for Revit" Width="150" Margin="0,4,0,0" />
</DockPanel>
<TabControl Grid.Row="1">
<!-- TabItem X -->
<TabItem Header="X" Width="50">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="65*" />
<ColumnDefinition Width="35*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="7*" />
<RowDefinition Height="7*" />
<RowDefinition Height="8*" />
<RowDefinition Height="71*" />
<RowDefinition Height="7*" />
</Grid.RowDefinitions>
<!-- Labels and Controls -->
<DockPanel Grid.ColumnSpan="2">
<Label Content="Position:" Margin="0,0,40,0" />
<Label Content="Repeter x:" Margin="0,0,40,0" />
<Label Content="Espacement:" />
</DockPanel>
<!-- Input Fields -->
<DockPanel Grid.Row="1" Grid.ColumnSpan="2">
<TextBox x:Name="positionX" Text="0" Width="50" Margin="0,0,5,0" />
<TextBlock Text="(m)" Margin="0,0,25,0" Width="20" />
<xctk:IntegerUpDown x:Name="Repeter_x" Minimum="0" Margin="0,0,50,0" />
<TextBox x:Name="EspaceX" Width="50" Text="0.00" Margin="0,0,5,0" />
<TextBlock Text="(m)" Width="20" HorizontalAlignment="Left" />
</DockPanel>
<DockPanel Grid.Row="2" Grid.ColumnSpan="2">
<Label Content="Extention Axe Y ey :" Width="120" Height="25" />
<TextBox x:Name="Ey" Width="60" Height="25" Margin="10,0,0,0" />
<TextBlock Text="(m)" Height="25" Margin="10,0,0,0" VerticalAlignment="Center"/>
</DockPanel>
<!-- DataGrid for X -->
<DataGrid x:Name="ListX" ItemsSource="{Binding DataX}"
SelectionChanged="listX_SelectionChanged"
AutoGenerateColumns="False"
Background="Transparent" GridLinesVisibility="None"
Grid.Row="3">
<DataGrid.Columns>
<DataGridTextColumn Header="Libelle" Binding="{Binding Path=Label}" Width="2.5*" />
<DataGridTextColumn Header="Position" IsReadOnly="True" Binding="{Binding Path=Position}" Width="2.5*" />
</DataGrid.Columns>
</DataGrid>
<!-- Numeric Alphabetic Labels -->
<DockPanel Grid.Row="4">
<Label Content="Libelle:" />
<ComboBox x:Name="libX" Width="100" HorizontalAlignment="Right" SelectionChanged="libX_SelectionChanged">
<ComboBoxItem Content="1 2 3 ..." Tag="Numeric"/>
<ComboBoxItem Content="A B C ..." Tag="Alphabetic"/>
</ComboBox>
</DockPanel>
<!-- Buttons -->
<StackPanel Grid.Column="1" Grid.Row="3">
<Button Name="ajouter_X" Content="Ajouter" Click="btnX_Click" VerticalAlignment="Top" Margin="5,50,5,10" />
<Button Name="supprimer_X" Content="Supprimer" Click="supprX_Click" Margin="5,0,5,10" />
<Button Name="supprimer_tout_X" Content="Supprimer tout" Click="supprallX_Click" Margin="5,0,5,10" />
</StackPanel>
</Grid>
</TabItem>
<!-- TabItem Y -->
<TabItem Header="Y" Width="50">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="65*" />
<ColumnDefinition Width="35*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="7*" />
<RowDefinition Height="7*" />
<RowDefinition Height="8*" />
<RowDefinition Height="71*" />
<RowDefinition Height="7*" />
</Grid.RowDefinitions>
<!-- Labels and Controls -->
<DockPanel Grid.ColumnSpan="3">
<Label Content="Position:" Margin="0,0,40,0" />
<Label Content="Repeter x:" Margin="0,0,40,0" />
<Label Content="Espacement:" />
</DockPanel>
<!-- Input Fields -->
<DockPanel Grid.Row="1" Grid.ColumnSpan="2">
<TextBox x:Name="positionY" Text="0" Width="50" Margin="0,0,5,0" />
<TextBlock Text="(m)" Margin="0,0,25,0" Width="20" />
<xctk:IntegerUpDown x:Name="Repeter_y" Minimum="0" Margin="0,0,50,0" />
<TextBox x:Name="EspaceY" Width="50" Text="0.00" Margin="0,0,5,0" />
<TextBlock Text="(m)" Width="20" HorizontalAlignment="Left" />
</DockPanel>
<DockPanel Grid.Row="2" Grid.ColumnSpan="2">
<Label Content="Extention Axe X ex :" Width="120" Height="25" />
<TextBox x:Name="Ex" Width="60" Height="25" Margin="10,0,0,0" />
<TextBlock Text="(m)" Height="25" Margin="10,0,0,0" VerticalAlignment="Center"/>
</DockPanel>
<!-- DataGrid for Y -->
<DataGrid x:Name="ListY" ItemsSource="{Binding DataY}"
SelectionChanged="listY_SelectionChanged"
AutoGenerateColumns="False"
Background="Transparent" GridLinesVisibility="None"
Grid.Row="3" >
<DataGrid.Columns>
<DataGridTextColumn Header="Libelle" Binding="{Binding Path=Label}" Width="2.5*" />
<DataGridTextColumn Header="Position" IsReadOnly="True" Binding="{Binding Path=Position}" Width="2.5*" />
</DataGrid.Columns>
</DataGrid>
<!-- Numeric Alphabetic Labels -->
<DockPanel Grid.Row="4">
<Label Content="Libelle:" />
<ComboBox x:Name="libY" Width="100" HorizontalAlignment="Right" SelectionChanged="libY_SelectionChanged">
<ComboBoxItem Content="1 2 3 ..." Tag="Numeric"/>
<ComboBoxItem Content="A B C ..." Tag="Alphabetic"/>
</ComboBox>
</DockPanel>
<!-- Buttons -->
<StackPanel Grid.Column="1" Grid.Row="3">
<Button Name="ajouter_Y" Content="Ajouter" Click="btnY_Click" VerticalAlignment="Top" Margin="5,50,5,10" />
<Button Name="supprimer_Y" Content="Supprimer" Click="supprY_Click" Margin="5,0,5,10" />
<Button Name="supprimer_tout_Y" Content="Supprimer tout" Click="supprallY_Click" Margin="5,0,5,10" />
</StackPanel>
</Grid>
</TabItem>
<!-- TabItem Z -->
<TabItem Header="Z" Width="50">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="65*" />
<ColumnDefinition Width="35*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="7*" />
<RowDefinition Height="7*" />
<RowDefinition Height="79*" />
<RowDefinition Height="7*" />
</Grid.RowDefinitions>
<!-- Labels and Controls -->
<DockPanel Grid.ColumnSpan="2">
<Label Content="Position:" Margin="0,0,40,0" />
<Label Content="Repeter x:" Margin="0,0,40,0" />
<Label Content="Espacement:" />
</DockPanel>
<!-- Input Fields -->
<DockPanel Grid.Row="1" Grid.ColumnSpan="2">
<TextBox x:Name="positionZ" Text="0" Width="50" Margin="0,0,5,0" />
<TextBlock Text="(m)" Margin="0,0,25,0" Width="20" />
<xctk:IntegerUpDown x:Name="Repeter_z" Minimum="0" Margin="0,0,50,0" />
<TextBox x:Name="EspaceZ" Width="50" Text="0.00" Margin="0,0,5,0" />
<TextBlock Text="(m)" Width="20" HorizontalAlignment="Left" />
</DockPanel>
<!-- DataGrid for Z -->
<DataGrid x:Name="ListZ" ItemsSource="{Binding DataZ}"
SelectionChanged="listZ_SelectionChanged"
AutoGenerateColumns="False"
Background="Transparent" GridLinesVisibility="None"
Grid.Row="2">
<DataGrid.Columns>
<DataGridTextColumn Header="Libelle" Binding="{Binding Path=Label}" Width="2.5*" />
<DataGridTextColumn Header="Position" IsReadOnly="True" Binding="{Binding Path=Position}" Width="2.5*" />
</DataGrid.Columns>
</DataGrid>
<!-- Buttons -->
<StackPanel Grid.Column="1" Grid.Row="2">
<Button Name="ajouter_Z" Content="Ajouter" Click="btnZ_Click" VerticalAlignment="Top" Margin="5,50,5,10" />
<Button Name="supprimer_Z" Content="Supprimer" Click="supprZ_Click" Margin="5,0,5,10" />
<Button Name="supprimer_tout_Z" Content="Supprimer tout" Click="supprallZ_Click" Margin="5,0,5,10" />
</StackPanel>
</Grid>
</TabItem>
</TabControl>
<StackPanel Grid.Row="2" >
<DockPanel>
<Label Content="Centrer la grille / Point d'Origin (0,0,0)" HorizontalAlignment="Center" FontWeight="Bold" />
</DockPanel>
<DockPanel>
<RadioButton x:Name="CenterLines" Content="Centrer" Margin="80,0,0,0" GroupName="CenterOptions"/>
<RadioButton x:Name="DoNotCenterLines" Content="Ne pas centrer" IsChecked="True" GroupName="CenterOptions"/>
</DockPanel>
</StackPanel>
<!-- Submit and Close Buttons -->
<DockPanel Grid.Row="3">
<Button Content="Appliquer" Width="100" Height="25" Click="Appliquer_Click" />
<Button Content="Fermer" Width="100" Height="25" Click="Fermer_Click" HorizontalAlignment="Right" />
</DockPanel>
</Grid>
</Window>'''
def __init__(self):
wpf.LoadComponent(self, StringReader(MyWindow.layout))
"""Initialize values for TabItem X"""
self.DataX = ObservableCollection[Grids_X_VM]()
self.points_X = []
self.ListX.ItemsSource = self.DataX
self.positionX.Text = "0"
self.Repeter_x.Value = 0
self.EspaceX.Text = "0"
self.libX.SelectedIndex = 0
"""Initialize values for TabItem Y"""
self.DataY = ObservableCollection[Grids_Y_VM]()
self.points_Y = []
self.ListY.ItemsSource = self.DataY
self.positionY.Text = "0"
self.Repeter_y.Value = 0
self.EspaceY.Text = "0"
self.libY.SelectedIndex = 0
"""Initialize values for TabItem Z"""
self.DataZ = ObservableCollection[Grids_Z_VM]()
self.points_Z = []
self.ListZ.ItemsSource = self.DataZ
self.positionZ.Text = "0.00"
self.Repeter_z.Value = 0
self.EspaceZ.Text = "0"
"""Event to switch between alphabetic and numeric symbols for grids X and Y"""
self.libX.SelectionChanged += self.libX_SelectionChanged
self.libY.SelectionChanged += self.libY_SelectionChanged
def libX_SelectionChanged(self, sender, e):
self.update_labelsX()
def libY_SelectionChanged(self, sender, e):
self.update_labelsY()
def listX_SelectionChanged(self, sender, e):
if sender.SelectedItem is not None:
selected_position = sender.SelectedItem
self.positionX.Text = selected_position.Position
def listY_SelectionChanged(self, sender, e):
if sender.SelectedItem is not None:
selected_position = sender.SelectedItem
self.positionY.Text = selected_position.Position
def listZ_SelectionChanged(self, sender, e):
if sender.SelectedItem is not None:
selected_position = sender.SelectedItem
self.positionZ.Text = selected_position.Position
def update_labelsX(self):
for i, item in enumerate(self.DataX):
item.Label = self.generate_labelX(i + 1)
def update_labelsY(self):
for i, item in enumerate(self.DataY):
item.Label = self.generate_labelY(i + 1)
def update_labelsZ(self):
for i, item in enumerate(self.DataZ):
item.Label = "Niveau" + self.generate_labelZ(i + 1)
def generate_labelX(self, index):
"""Generate numeric and alphabetic labels for DataX collection"""
if self.libX.SelectedIndex == 0: # Numeric
return str(index)
else:
if index <= 26: # Alphabetic
return ascii_uppercase[index - 1]
else:
prefix = ascii_uppercase[(index - 1) // 26]
suffix = ascii_uppercase[(index - 1) % 26]
return prefix + suffix
def generate_labelY(self, index):
"""Generate numeric and alphabetic labels for DataY collection"""
if self.libY.SelectedIndex == 0: # Numeric
return str(index)
else:
if index <= 26: # Alphabetic
return ascii_uppercase[index - 1]
else:
prefix = ascii_uppercase[(index - 1) // 26]
suffix = ascii_uppercase[(index - 1) % 26]
return prefix + suffix
def generate_labelZ(self, index):
"""Generate labels for DataZ collection"""
return str(index-1)
def btnX_Click(self, sender, e):
"""Populate DataX collection"""
n = self.Repeter_x.Value # Number of items to add
start_x = float(self.positionX.Text)
spacing = float(self.EspaceX.Text)
for i in range(n + 1):
position = start_x + spacing * i
if any(item.Position == str(position) for item in self.DataX):
continue
# Generate label based on current selection
label = self.generate_labelX(len(self.DataX) + 1)
new_item = Grids_X_VM(label, str(position))
# Insert item at the correct position
insert_index = 0
for index, item in enumerate(self.DataX):
if float(item.Position) > position:
break
insert_index += 1
self.DataX.Insert(insert_index, new_item)
# Update self.x_position.Text to the last item's position
if len(self.DataX) > 0:
last_item = self.DataX[len(self.DataX) - 1]
self.positionX.Text = last_item.Position
else:
self.positionX.Text = "0"
def supprX_Click(self, sender, e):
"""Remove selected Item in DataX collection"""
if self.ListX.SelectedItem is not None:
self.DataX.Remove(self.ListX.SelectedItem)
self.update_labelsX()
def supprallX_Click(self, sender, e):
"""Remove all Items in DataX collection"""
self.DataX.Clear()
self.positionX.Text = "0"
def btnY_Click(self, sender, e):
"""Populate DataY collection"""
n = self.Repeter_y.Value # Number of items to add
start_x = float(self.positionY.Text)
spacing = float(self.EspaceY.Text)
for i in range(n + 1):
position = start_x + spacing * i
if any(item.Position == str(position) for item in self.DataY):
continue
# Generate label based on current selection
label = self.generate_labelY(len(self.DataY) + 1)
new_item = Grids_Y_VM(label, str(position))
# Insert item at the correct position
insert_index = 0
for index, item in enumerate(self.DataY):
if float(item.Position) > position:
break
insert_index += 1
self.DataY.Insert(insert_index, new_item)
# Update self.y_position.Text to the last item's position
if len(self.DataY) > 0:
last_item = self.DataY[len(self.DataY) - 1]
self.positionY.Text = last_item.Position
else:
self.positionY.Text = "0"
def supprY_Click(self, sender, e):
"""Remove selected Item in DataY collection"""
if self.ListY.SelectedItem is not None:
self.DataY.Remove(self.ListY.SelectedItem)
self.update_labelsY()
def supprallY_Click(self, sender, e):
"""Remove all Items in DataY collection"""
self.DataY.Clear()
self.positionY.Text = "0"
def btnZ_Click(self, sender, e):
"""Populate DataZ collection"""
n = self.Repeter_z.Value # Number of items to add
start_x = float(self.positionZ.Text)
spacing = float(self.EspaceZ.Text)
for i in range(n + 1):
position = start_x + spacing * i
if any(item.Position == str(position) for item in self.DataZ):
continue
# Generate label based on current selection
label = "Niveau " + self.generate_labelZ(len(self.DataZ) + 1)
new_item = Grids_Z_VM(label, str(position))
# Insert item at the correct position
insert_index = 0
for index, item in enumerate(self.DataZ):
if float(item.Position) > position:
break
insert_index += 1
self.DataZ.Insert(insert_index, new_item)
# Update self.z_position.Text to the last item's position
if len(self.DataZ) > 0:
last_item = self.DataZ[len(self.DataZ) - 1]
self.positionZ.Text = last_item.Position
else:
self.positionZ.Text = "0"
def supprZ_Click(self, sender, e):
"""Remove selected Item in DataZ collection"""
if self.ListZ.SelectedItem is not None:
self.DataZ.Remove(self.ListZ.SelectedItem)
self.update_labelsZ()
def supprallZ_Click(self, sender, e):
"""Remove all Items in DataZ collection"""
self.DataZ.Clear()
self.positionZ.Text = "0"
def _symbols_have_conflict(self):
"""Check if the symbols in X and Y are conflicting."""
if not self.DataX or not self.DataY:
return False # No conflict if one is empty
labels_X = [item.Label for item in self.DataX][0]
labels_Y = [item.Label for item in self.DataY][0]
return labels_X == labels_Y
def Appliquer_Click(self, sender, e):
"""Collect and convert input data from the UI"""
if not self.DataX:
MessageBox.Show("Veuillez remplir correctement la liste : X")
return
elif not self.Ey.Text:
MessageBox.Show("Veuillez entrer une valeur valide pour : ey")
return
elif not self.DataY:
MessageBox.Show("Veuillez remplir correctement la liste : Y")
return
elif not self.Ex.Text:
MessageBox.Show("Veuillez entrer une valeur valide pour : ex")
return
elif not self.DataZ:
MessageBox.Show("Veuillez remplir correctement la liste : Z")
return
elif self._symbols_have_conflict():
MessageBox.Show("Les Libellés dans la lists X et la list Y ne doivent pas être identiques.")
return
else:
try:
self.points_X = _input_to_meters(self.DataX)
self.points_Y = _input_to_meters(self.DataY)
self.points_Z = _input_to_meters(self.DataZ)
self.symbols_X = _populate_symbol(self.DataX)
self.symbols_Y = _populate_symbol(self.DataY)
self.symbols_Z = _populate_symbol(self.DataZ)
self.exstention_X = UnitUtils.ConvertToInternalUnits(float(self.Ex.Text), UnitTypeId.Meters)
self.exstention_Y = UnitUtils.ConvertToInternalUnits(float(self.Ey.Text), UnitTypeId.Meters)
except (ValueError, AttributeError):
MessageBox.Show("Invalid input. Please correct and try again.")
"""Check center/ do not center option for grids"""
self.center_Lines = self.CenterLines.IsChecked
self.Close()
def Fermer_Click(self, sender, e):
self.Close()
def _input_to_meters(Pts_list):
"""Convert Position item from collections to meters."""
return [UnitUtils.ConvertToInternalUnits(float(item.Position), UnitTypeId.Meters) for item in Pts_list]
def _populate_symbol(Data):
"""Set symbol lists from collections ."""
return [item.Label for item in Data]
def create_lines(points_X, points_Y, ex, ey, y_axis=False, center=False):
"""Create lines along X, Y axis and set center/ do not center option"""
lines = []
if center:
# Calculate the center offset
center_offset_X = (points_X[-1] - points_X[0]) / 2
center_offset_Y = (points_Y[-1] - points_Y[0]) / 2
# Adjust points to center them
points_X = [x - center_offset_X for x in points_X]
points_Y = [y - center_offset_Y for y in points_Y]
if y_axis:
# Create vertical lines (Y-axis)
for x in points_X:
lines.append(Line.CreateBound(XYZ(x, points_Y[0] - ey, 0), XYZ(x, points_Y[-1] + ey, 0)))
else:
# Create horizontal lines (X-axis)
for y in points_Y:
lines.append(Line.CreateBound(XYZ(points_X[0] - ex, y, 0), XYZ(points_X[-1] + ex, y, 0)))
return lines
def create_grids(lines_x, lines_y, Sx, Sy, doc):
"""Create grids along X, Y axis """
with Transaction(doc, "Create Grids") as t:
t.Start()
grids_X = [Grid.Create(doc, line) for line in lines_x]
for g, s in zip(grids_X, Sy):
g.Name = s
grids_Y = [Grid.Create(doc, line) for line in lines_y]
for g, s in zip(grids_Y, Sx):
g.Name = s
t.Commit()
def create_levels(points_Z, Sz, doc):
"""Create levels"""
with Transaction(doc, "Create levels") as t:
t.Start()
# Collect existing levels and sort by elevation
levels = sorted(FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Levels)\
.WhereElementIsNotElementType().ToElements(), key=lambda l: l.Elevation)
for p, s in zip(points_Z, Sz):
level_found = None
insert_index = 0
for i, l in enumerate(levels):
if abs(l.Elevation - p) < 0.001:
level_found = l
break
elif p < l.Elevation:
insert_index = i
break
else:
insert_index = len(levels)
if level_found:
if level_found.Name != s:
level_found.Name = s
else:
new_level = Level.Create(doc, p)
new_level.Name = s
levels.insert(insert_index, new_level)
for i in range(insert_index + 1, len(levels)):
levels[i].Name = Sz[i]
t.Commit()
Grids = MyWindow()
Grids.ShowDialog()
DataX = Grids.DataX
DataY = Grids.DataY
DataZ = Grids.DataZ
ex = Grids.exstention_X
ey = Grids.exstention_Y
center_Lines = Grids.CenterLines
points_X = Grids.points_X
points_Y = Grids.points_Y
points_Z = Grids.points_Z
Sx = Grids.symbols_X
Sy = Grids.symbols_Y
Sz = Grids.symbols_Z
lines_x = create_lines(points_X, points_Y, ex, ey, y_axis=False, center=center_Lines)
lines_y = create_lines(points_X, points_Y, ex, ey, y_axis=True, center=center_Lines)
create_grids(lines_x, lines_y, Sx, Sy, doc)
create_levels(points_Z, Sz, doc)
OUT = 0
Thanks.