fluencyCAD/main.py
2024-06-14 14:38:11 +02:00

106 lines
3.5 KiB
Python

from PySide6.QtWidgets import QApplication, QMainWindow, QSizePolicy
from Gui import Ui_fluencyCAD # Import the generated GUI module
from drawing_modules.gl_widget import OpenGLWidget
from drawing_modules.draw_widget2d import SnapLineWidget
from sdf import *
import python_solvespace
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
# Set up the UI from the generated GUI module
self.ui = Ui_fluencyCAD()
self.ui.setupUi(self)
self.openGLWidget = OpenGLWidget()
layout = self.ui.gl_box.layout()
layout.addWidget(self.openGLWidget)
size_policy = QSizePolicy(QSizePolicy.MinimumExpanding, QSizePolicy.MinimumExpanding)
#self.openGLWidget.setSizePolicy(size_policy)
self.sketchWidget = SnapLineWidget()
layout2 = self.ui.sketch_tab.layout() # Get the layout of self.ui.gl_canvas
layout2.addWidget(self.sketchWidget)
size_policy = QSizePolicy(QSizePolicy.MinimumExpanding, QSizePolicy.MinimumExpanding)
self.sketchWidget.setSizePolicy(size_policy)
self.sketchWidget.setStyleSheet("background-color: white; border: 1px solid red;")
self.ui.pb_apply_code.pressed.connect(self.check_current_tab)
def check_current_tab(self):
if self.ui.InputTab.currentIndex() == 0:
self.generate_mesh_from_draw()
elif self.ui.InputTab.currentIndex() == 1:
self.generate_mesh_from_code()
def load_and_render(self, file, centroid):
self.openGLWidget.draw_stl(file)
self.openGLWidget.update()
class Geometry:
def distance(self, p1, p2):
"""Calculate the distance between two points."""
print("p1", p1)
print("p2", p2)
return math.sqrt((p1[0] - p2[0]) ** 2 + (p1[1] - p2[1]) ** 2)
def generate_mesh_from_code(self):
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
local_vars = {}
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)
mesh = self.openGLWidget.load_stl("out.stl")
self.openGLWidget.draw_stl(mesh)
except Exception as e:
print("Error executing code:", e)
def generate_mesh_from_draw(self, points, ):
f = None
points = MainWindow().sketchWidget.points
print(points)
p_list = []
dimension = 0.001
for ps in points:
p_list.append((ps.x() , ps.y()))
#p_list.append(p_list[0])
print(p_list)
f = polygon(p_list).extrude(100)
"""if len(points) > 3:
p1 = [points[0].x(), points[0].y()]
p2 = [points[1].x(), points[1].y()]
dimension = self.distance(p1, p2)
scale = 0.001
f = box(dimension * scale)
elif len(points) < 3:
p1 = [points[0].x(), points[0].y()]
p2 = [points[1].x(), points[1].y()]
dimension = self.distance(p1, p2)
scale = 0.001
print(dimension * scale)
f = sphere(dimension * scale)"""
if f:
f.save('out.stl', samples=2**12, sparse=False)
if __name__ == "__main__":
app = QApplication([])
window = MainWindow()
window.show()
app.exec()