已经更新的入门指导
PythonOCC入门指导:1.创建pythonocc虚拟环境
PythonOCC入门指导:2.运行一个简单实例
PythonOCC入门指导:3.创建属于自己的主界面及对话框及安装qtdesigner
pythonocc基础使用:1.读入iges,step,stl文件
pythonocc基础使用:2.提取曲线上的点位信息或者曲面上的点位信息
对于cad系统的开发,读入外界的文件很重要。
目前OCC开发者已经支持快速读入igs,stp,stl格式了(但是这部分的资源目前还未同步到0.18.1版本),具体使用方法见下
from OCC.Display.SimpleGui import init_display
from OCC.Extend.DataExchange import read_iges_file,read_step_file,read_stl_file
shapes=read_iges_file(fileName1)
#shapes=read_step_file(fileName1)
#shapes=read_stl_file(fileName1)
display, start_display, add_menu, add_function_to_menu = init_display()
display.DisplayShape(shapes, update=True)
如果你懒得去找官方写的资源,我下面也会展示read_iges_file,read_step_file,read_stl_file函数是如何定义的:
read_iges_file函数
def read_iges_file(filename, return_as_shapes=False, verbosity=False):
""" read the IGES file and returns a compound
filename: the file path
return_as_shapes: optional, False by default. If True returns a list of shapes,
else returns a single compound
verbosity: optionl, False by default.
"""
assert os.path.isfile(filename)
iges_reader = IGESControl_Reader()
status = iges_reader.ReadFile(filename)
_shapes = []
if status == IFSelect_RetDone: # check status
if verbosity:
failsonly = False
iges_reader.PrintCheckLoad(failsonly, IFSelect_ItemsByEntity)
iges_reader.PrintCheckTransfer(failsonly, IFSelect_ItemsByEntity)
iges_reader.TransferRoots()
nbr = iges_reader.NbRootsForTransfer()
for n in range(1, nbr+1):
nbs = iges_reader.NbShapes()
if nbs == 0:
print("At least one shape in IGES cannot be transfered")
elif nbr == 1 and nbs == 1:
a_res_shape = iges_reader.Shape(1)
if a_res_shape.IsNull():
print("At least one shape in IGES cannot be transferred")
else:
_shapes.append(a_res_shape)
else:
for i in range(1, nbs+1):
a_shape = iges_reader.Shape(i)
if a_shape.IsNull():
print("At least one shape in STEP cannot be transferred")
else:
_shapes.append(a_shape)
# if not return as shapes
# create a compound and store all shapes
if not return_as_shapes:
builder = BRep_Builder()
compound = TopoDS_Compound()
builder.MakeCompound(compound)
for s in _shapes:
builder.Add(compound, s)
_shapes = compound
return _shapes
read_step_file函数
def read_step_file(filename, return_as_shapes=False, verbosity=False):
""" read the STEP file and returns a compound
filename: the file path
return_as_shapes: optional, False by default. If True returns a list of shapes,
else returns a single compound
verbosity: optionl, False by default.
"""
assert os.path.isfile(filename)
step_reader = STEPControl_Reader()
status = step_reader.ReadFile(filename)
if status == IFSelect_RetDone: # check status
if verbosity:
failsonly = False
step_reader.PrintCheckLoad(failsonly, IFSelect_ItemsByEntity)
step_reader.PrintCheckTransfer(failsonly, IFSelect_ItemsByEntity)
ok = step_reader.TransferRoot(1)
_nbs = step_reader.NbShapes()
shape_to_return = step_reader.Shape(1) # a compound
assert not shape_to_return.IsNull()
else:
raise AssertionError("Error: can't read file.")
if return_as_shapes:
shape_to_return = TopologyExplorer(shape_to_return).solids()
return shape_to_return
read_stl_file函数
def read_stl_file(filename):
""" opens a stl file, reads the content, and returns a BRep topods_shape object
"""
assert os.path.isfile(filename)
stl_reader = StlAPI_Reader()
the_shape = TopoDS_Shape()
stl_reader.Read(the_shape, filename)
assert not the_shape.IsNull()
return the_shape