kshdes37's picture
Upload 50 files
91daf98 verified
import os
from OCC.Core.gp import gp_Pnt, gp_Vec, gp_Dir, gp_XYZ, gp_Ax3, gp_Trsf, gp_Pln
from OCC.Core.BRepMesh import BRepMesh_IncrementalMesh
from OCC.Core.StlAPI import StlAPI_Writer
def create_xyz(xyz):
return gp_XYZ(xyz["x"], xyz["y"], xyz["z"])
def get_ax3(transform_dict):
origin = create_xyz(transform_dict["origin"])
x_axis = create_xyz(transform_dict["x_axis"])
y_axis = create_xyz(transform_dict["y_axis"])
z_axis = create_xyz(transform_dict["z_axis"])
# Create new coord (orig, Norm, x-axis)
axis3 = gp_Ax3(gp_Pnt(origin), gp_Dir(z_axis), gp_Dir(x_axis))
return axis3
def get_transform(transform_dict):
axis3 = get_ax3(transform_dict)
transform_to_local = gp_Trsf()
transform_to_local.SetTransformation(axis3)
return transform_to_local.Inverted()
def create_sketch_plane(transform_dict):
axis3 = get_ax3(transform_dict)
return gp_Pln(axis3)
def create_point(point_dict, transform):
pt2d = gp_Pnt(point_dict["x"], point_dict["y"], point_dict["z"])
return pt2d.Transformed(transform)
def create_unit_vec(vec_dict, transform):
vec2d = gp_Dir(vec_dict["x"], vec_dict["y"], vec_dict["z"])
return vec2d.Transformed(transform)
def write_stl_file(a_shape, filename, mode="ascii", linear_deflection=0.001, angular_deflection=0.5):
""" export the shape to a STL file
Be careful, the shape first need to be explicitely meshed using BRepMesh_IncrementalMesh
a_shape: the topods_shape to export
filename: the filename
mode: optional, "ascii" by default. Can either be "binary"
linear_deflection: optional, default to 0.001. Lower, more occurate mesh
angular_deflection: optional, default to 0.5. Lower, more accurate_mesh
"""
if a_shape.IsNull():
raise AssertionError("Shape is null.")
if mode not in ["ascii", "binary"]:
raise AssertionError("mode should be either ascii or binary")
if os.path.isfile(filename):
print("Warning: %s file already exists and will be replaced" % filename)
# first mesh the shape
mesh = BRepMesh_IncrementalMesh(a_shape, linear_deflection, False, angular_deflection, True)
#mesh.SetDeflection(0.05)
mesh.Perform()
if not mesh.IsDone():
raise AssertionError("Mesh is not done.")
stl_exporter = StlAPI_Writer()
if mode == "ascii":
stl_exporter.SetASCIIMode(True)
else: # binary, just set the ASCII flag to False
stl_exporter.SetASCIIMode(False)
stl_exporter.Write(a_shape, filename)
if not os.path.isfile(filename):
raise IOError("File not written to disk.")