mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-07 04:46:25 +00:00
experimental import plot coordinates
This commit is contained in:
@@ -34,6 +34,7 @@ classes = (
|
|||||||
operator.GetCursorLocation,
|
operator.GetCursorLocation,
|
||||||
operator.SetCursorLocation,
|
operator.SetCursorLocation,
|
||||||
operator.ConvertAngleToCoordinates,
|
operator.ConvertAngleToCoordinates,
|
||||||
|
operator.ImportPlot,
|
||||||
prop.BIMGeoreferenceProperties,
|
prop.BIMGeoreferenceProperties,
|
||||||
ui.BIM_PT_gis,
|
ui.BIM_PT_gis,
|
||||||
ui.BIM_PT_gis_utilities,
|
ui.BIM_PT_gis_utilities,
|
||||||
|
|||||||
@@ -110,7 +110,7 @@ class SetCursorLocation(bpy.types.Operator, tool.Ifc.Operator):
|
|||||||
bl_idname = "bim.set_cursor_location"
|
bl_idname = "bim.set_cursor_location"
|
||||||
bl_label = "Set Cursor Location"
|
bl_label = "Set Cursor Location"
|
||||||
bl_options = {"REGISTER", "UNDO"}
|
bl_options = {"REGISTER", "UNDO"}
|
||||||
bl_description = "Move curson location to the specified coordinates"
|
bl_description = "Move cursor location to the specified coordinates"
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def poll(cls, context):
|
def poll(cls, context):
|
||||||
@@ -187,3 +187,20 @@ class ConvertAngleToCoordinates(bpy.types.Operator, tool.Ifc.Operator):
|
|||||||
|
|
||||||
def _execute(self, context):
|
def _execute(self, context):
|
||||||
core.convert_angle_to_coord(tool.Georeference, type=self.type)
|
core.convert_angle_to_coord(tool.Georeference, type=self.type)
|
||||||
|
|
||||||
|
|
||||||
|
class ImportPlot(bpy.types.Operator, tool.Ifc.Operator):
|
||||||
|
bl_idname = "bim.import_plot"
|
||||||
|
bl_label = "Import Plot"
|
||||||
|
bl_options = {"REGISTER", "UNDO"}
|
||||||
|
bl_description = "Import plot"
|
||||||
|
filepath: bpy.props.StringProperty(subtype="FILE_PATH")
|
||||||
|
filter_glob: bpy.props.StringProperty(default="*.csv", options={"HIDDEN"})
|
||||||
|
|
||||||
|
def execute(self, context):
|
||||||
|
core.import_plot(tool.Georeference, filepath=self.filepath)
|
||||||
|
return {"FINISHED"}
|
||||||
|
|
||||||
|
def invoke(self, context, event):
|
||||||
|
context.window_manager.fileselect_add(self)
|
||||||
|
return {"RUNNING_MODAL"}
|
||||||
|
|||||||
@@ -50,8 +50,9 @@ class BIM_PT_misc_utilities(bpy.types.Panel):
|
|||||||
row.operator("bim.clean_wireframes")
|
row.operator("bim.clean_wireframes")
|
||||||
row = layout.row()
|
row = layout.row()
|
||||||
row.operator("bim.patch_non_parametric_mep_segment")
|
row.operator("bim.patch_non_parametric_mep_segment")
|
||||||
|
|
||||||
row = layout.row(align=True)
|
row = layout.row(align=True)
|
||||||
row.operator("bim.enable_editing_sketch_extrusion_profile", text="Start Sketching")
|
row.operator("bim.enable_editing_sketch_extrusion_profile", text="Start Sketching")
|
||||||
row.operator("bim.edit_sketch_extrusion_profile", text="", icon="FILE_REFRESH")
|
row.operator("bim.edit_sketch_extrusion_profile", text="", icon="FILE_REFRESH")
|
||||||
row.operator("bim.disable_editing_sketch_extrusion_profile", text="", icon="CANCEL")
|
row.operator("bim.disable_editing_sketch_extrusion_profile", text="", icon="CANCEL")
|
||||||
|
row = layout.row()
|
||||||
|
row.operator("bim.import_plot", text="Import Plot Coordinates", icon="FILE_FOLDER")
|
||||||
|
|||||||
@@ -84,3 +84,6 @@ def convert_global_to_local(georeference):
|
|||||||
def convert_angle_to_coord(georeference, type):
|
def convert_angle_to_coord(georeference, type):
|
||||||
vector_coordinates = georeference.angle2coords(georeference.get_angle(type), type)
|
vector_coordinates = georeference.angle2coords(georeference.get_angle(type), type)
|
||||||
georeference.set_vector_coordinates(vector_coordinates,type)
|
georeference.set_vector_coordinates(vector_coordinates,type)
|
||||||
|
|
||||||
|
def import_plot(georeference, filepath):
|
||||||
|
georeference.import_plot(filepath, georeference.get_map_conversion())
|
||||||
|
|||||||
@@ -296,3 +296,37 @@ class Georeference(blenderbim.core.tool.Georeference):
|
|||||||
elif type == "rel_y":
|
elif type == "rel_y":
|
||||||
bpy.context.scene.BIMGeoreferenceProperties.y_axis_abscissa_output = str(x)
|
bpy.context.scene.BIMGeoreferenceProperties.y_axis_abscissa_output = str(x)
|
||||||
bpy.context.scene.BIMGeoreferenceProperties.y_axis_ordinate_output = str(y)
|
bpy.context.scene.BIMGeoreferenceProperties.y_axis_ordinate_output = str(y)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def import_plot(cls, filepath, map_conversion):
|
||||||
|
import bmesh
|
||||||
|
|
||||||
|
def parse_csv(file_path):
|
||||||
|
import csv
|
||||||
|
|
||||||
|
with open(file_path, "r") as f:
|
||||||
|
reader = csv.reader(f) # Assuming tab-delimited CSV
|
||||||
|
rows = []
|
||||||
|
for row in reader:
|
||||||
|
if len(row) == 0:
|
||||||
|
continue
|
||||||
|
rows.append(row)
|
||||||
|
return rows
|
||||||
|
|
||||||
|
rows = parse_csv(filepath)
|
||||||
|
vertices = []
|
||||||
|
for row in rows:
|
||||||
|
coordinates = cls.enh2xyz([float(row[0]), float(row[1]), float(row[2])], map_conversion)
|
||||||
|
vertices.append(coordinates)
|
||||||
|
|
||||||
|
mesh = bpy.data.meshes.new("mesh")
|
||||||
|
obj = bpy.data.objects.new("Plot Line", mesh)
|
||||||
|
bpy.context.scene.collection.objects.link(obj)
|
||||||
|
bpy.context.view_layer.objects.active = obj
|
||||||
|
obj.select_set(True)
|
||||||
|
obj.data
|
||||||
|
bm = bmesh.new()
|
||||||
|
for vertex in vertices:
|
||||||
|
bm.verts.new(vertex)
|
||||||
|
bm.to_mesh(mesh)
|
||||||
|
bm.free()
|
||||||
|
|||||||
Reference in New Issue
Block a user