How can i get face geometry infomation from STEP file ?

Forums: 

I use pythonocc to load a STEP file, and then I want to extract geometry info of its every surface.

My STEP file is a simple pipe(pipe.png)It have 6 faces: the pipe has 2 cylindrical outer surfaces, 2 cylindrical inner surfaces, and the top and bottom annular planar surfaces, totaling 6 surfaces.

However, when I printed bspline_surface.Bounds(), the top and bottom surfaces were identified as square planes, not annular ones. I want to know how to accurately extract the geometric information of each surface's shape and range.

from __future__ import print_function
import numpy as np
import random
import os
import os.path
import sys

from OCC.Core.Quantity import Quantity_Color, Quantity_TOC_RGB
from OCC.Display.SimpleGui import init_display

from OCC.Extend.TopologyUtils import TopologyExplorer
from OCC.Extend.DataExchange import read_step_file

from OCC.Core.BRep import BRep_Tool
from OCC.Core.gp import gp_Pnt
from OCC.Core.Geom import Geom_Plane, Geom_CylindricalSurface


from OCC.Core.STEPControl import STEPControl_Reader
from OCC.Core.IFSelect import IFSelect_RetDone
from OCC.Core.TopAbs import TopAbs_FACE
from OCC.Core.TopExp import TopExp_Explorer
from OCC.Core.TopoDS import TopoDS_Face, topods

from OCC.Core.GeomConvert import geomconvert
from OCC.Core.GProp import GProp_GProps
from OCC.Core.BRepGProp import BRepGProp_Face, brepgprop
from OCC.Core.BRepBuilderAPI import BRepBuilderAPI_NurbsConvert
from OCC.Core.BRepLib import BRepLib_FindSurface


def read_step(filepath):
    step_reader = STEPControl_Reader()
    IFstatus = step_reader.ReadFile(filepath)
    if(IFSelect_RetDone != IFstatus):
        raise Exception("fail")
    else:
        print("success")

    step_reader.TransferRoot()
    shape = step_reader.Shape()

    explorer = TopExp_Explorer(shape, TopAbs_FACE)

    while explorer.More():
        face = topods.Face( explorer.Current() )
        nurbs_converter  = BRepBuilderAPI_NurbsConvert(face)
        geom_surface = BRepLib_FindSurface(nurbs_converter.Shape()).Surface()
        bspline_surface = geomconvert.SurfaceToBSplineSurface(geom_surface)

        print(bspline_surface.Bounds(), geom_surface.Bounds())

        explorer.Next()


if __name__ == "__main__":
    filepath = "C:\\myproject\\lighttools\\NO1.STEP"
    read_step(filepath)

Attachments: 
gkv311 n's picture

There is no such a thing like an 'annular surface' in B-Rep - there is a usual plane bounded by circular edges. You need to start from learning what is B-Rep (boundary representation) and how it is implemented in OCCT.

Training materials might be a good point to start with (and in particular 'Topology' training). If you are already aware of it, you need to specify your question more accurately.