- Re enebaled mesh generation

- fixed line tool right button break line
- implemented main buffer for pt-line distance
This commit is contained in:
bklronin
2024-07-01 13:34:42 +02:00
parent e9098108d2
commit fcabe449f8
2 changed files with 50 additions and 77 deletions

75
main.py
View File

@@ -1,7 +1,7 @@
import uuid
import names
from PySide6.QtCore import Qt
from PySide6.QtCore import Qt, QPoint
from PySide6.QtWidgets import QApplication, QMainWindow, QSizePolicy, QInputDialog
from Gui import Ui_fluencyCAD # Import the generated GUI module
from drawing_modules.gl_widget import OpenGLWidget
@@ -63,19 +63,18 @@ class MainWindow(QMainWindow):
self.ui.pb_cutop.pressed.connect(self.send_cut)
self.ui.pb_del_body.pressed.connect(self.del_body)
self.sketchWidget.constrain_done.connect(self.constrain_finished)
self.sketchWidget.constrain_done.connect(self.draw_op_complete)
def add_wp_origin(self):
self.sketchWidget.create_worplane()
self.sketchWidget.create_workplane()
def act_line_mode(self):
if not self.ui.pb_linetool.isChecked():
self.sketchWidget.mouse_mode = 'line'
print(self.ui.pb_linetool.isChecked())
else:
self.sketchWidget.mouse_mode = None
self.sketchWidget.line_buffer = [None, None]
print(self.ui.pb_linetool.isChecked())
self.sketchWidget.line_draw_buffer = [None, None]
def act_constrain_pt_pt_mode(self):
if not self.ui.pb_con_ptpt.isChecked():
@@ -113,14 +112,17 @@ class MainWindow(QMainWindow):
else:
self.sketchWidget.mouse_mode = None
def constrain_finished(self):
def draw_op_complete(self):
# safely disable the line modes
self.ui.pb_linetool.setChecked(False)
self.ui.pb_con_ptpt.setChecked(False)
self.ui.pb_con_line.setChecked(False)
self.ui.pb_con_dist.setChecked(False)
self.ui.pb_con_mid.setChecked(False)
self.ui.pb_con_perp.setChecked(False)
self.sketchWidget.mouse_mode = None
self.sketchWidget.reset_buffers()
def view_update(self):
print("Update")
@@ -137,13 +139,15 @@ class MainWindow(QMainWindow):
print(f"Selected item: {name}")
def add_sketch(self):
points_for_poly = []
name = f"sketch-{str(names.get_first_name())}"
points = self.sketchWidget.points
for point_to_poly in self.sketchWidget.slv_points_main:
points_for_poly.append(self.translate_points_tup(point_to_poly['ui_point']))
element = {
'id': name,
'type': 'polygon',
'sketch_points': points,
'sketch_points': points_for_poly,
}
self.model['sketch'][element['id']] = element
@@ -215,42 +219,36 @@ class MainWindow(QMainWindow):
print(f"Removed operation: {item_name}")
self.openGLWidget.clear_mesh()
def translate_points_tup(self, points):
def translate_points_tup(self, point: QPoint):
"""QPoints from Display to mesh data
input: Qpoints
output: Tuple X,Y
"""
p_list = []
for ps in points:
p_list.append((ps.x(), ps.y()))
return p_list
if isinstance(point, QPoint):
return point.x(), point.y()
def send_extrude(self):
selected = self.ui.sketch_list.currentItem()
name = selected.text()
points = self.model['sketch'][name]['sketch_points']
# UI to mesh
points = self.translate_points_tup(points)
if points[-1] == points[0]:
result = points.pop()
print("removed last point for mesh")
#detect loop that causes problems in mesh generation
del points[-1]
length , ok = QInputDialog.getDouble(self, 'Extrude Length', 'Enter a mm value:', decimals=2)
print(points)
length, ok = QInputDialog.getDouble(self, 'Extrude Length', 'Enter a mm value:', decimals=2)
#TODO : Implement cancel
geo = Geometry()
f = geo.extrude_shape(points, length)
name_op = f"extrd-{name}"
element = {
'id': name_op,
'type': 'extrude',
'sdf_object': f,
}
print(element)
self.model['operation'][name_op] = element
@@ -259,9 +257,8 @@ class MainWindow(QMainWindow):
self.ui.body_list.setCurrentItem(items)
self.view_update()
def send_cut(self):
name = self.ui.sketch_list.currentItem().text()
name = self.ui.body_list.currentItem().text()
points = self.model['operation'][name]['sdf_object']
self.list_selected.append(points)
print(self.list_selected)
@@ -280,9 +277,8 @@ class MainWindow(QMainWindow):
self.model['operation'][name_op] = element
self.ui.body_list.addItem(name_op)
items = self.ui.sketch_list.findItems(name_op, Qt.MatchExactly)
self.ui.body_list.setCurrentItem(items[0])
self.ui.body_list.setCurrentItem(items[-1])
self.view_update()
else:
print("mindestens 2!")
@@ -290,24 +286,6 @@ class MainWindow(QMainWindow):
self.openGLWidget.load_stl(file)
self.openGLWidget.update()
""" def check_current_tab(self):
if self.ui.InputTab.currentIndex() == 0:
geo = Geometry()
geo.generate_mesh_from_draw(self.sketchWidget.points)
self.load_and_render("out.stl")
elif self.ui.InputTab.currentIndex() == 1:
code_bytes = self.ui.textEdit.toPlainText().encode('utf-8')
code_text = code_bytes.decode('utf-8')
save_string = "\nf.save('out.stl', samples=2**12)"
code_text += save_string
geo = Geometry()
geo.generate_mesh_from_code(code_text)
self.load_and_render("out.stl")"""
class Geometry:
def distance(self, p1, p2):
"""Calculate the distance between two points."""
@@ -317,14 +295,11 @@ class Geometry:
def extrude_shape(self, points, length: float):
"""2D to 3D sdf always first"""
f = polygon(points).extrude(length)
return f
def cut_shapes(self, sdf_object1, sdf_object2):
f = difference(sdf_object1, sdf_object2) # equivalent
return f
def export_mesh(self, sdf_object):
@@ -338,7 +313,6 @@ class Geometry:
try:
print(code_text)
exec(code_text, globals(), local_vars)
# Retrieve the result from the captured local variables
result = local_vars.get('result')
print("Result:", result)
@@ -346,7 +320,6 @@ class Geometry:
except Exception as e:
print("Error executing code:", e)
if __name__ == "__main__":
app = QApplication([])
window = MainWindow()