示例#1
0
def spl_face(px, py, pz):
    nx, ny = px.shape
    pnt_2d = TColgp_Array2OfPnt(1, nx, 1, ny)
    for row in range(pnt_2d.LowerRow(), pnt_2d.UpperRow() + 1):
        for col in range(pnt_2d.LowerCol(), pnt_2d.UpperCol() + 1):
            i, j = row - 1, col - 1
            pnt = gp_Pnt(px[i, j], py[i, j], pz[i, j])
            pnt_2d.SetValue(row, col, pnt)
            #print (i, j, px[i, j], py[i, j], pz[i, j])

    api = GeomAPI_PointsToBSplineSurface(pnt_2d, 3, 8, GeomAbs_G2, 0.001)
    api.Interpolate(pnt_2d)
    #surface = BRepBuilderAPI_MakeFace(curve, 1e-6)
    # return surface.Face()
    return BRepBuilderAPI_MakeFace(api.Surface(), 1e-6).Face()
def heightmap_from_equation(f, x_min=-1, x_max=1, y_min=-1, y_max=1):
    """ takes an equation z= f(x,y)
    and plot the related point cloud as a bspline surface
    """
    print("compute surface")
    n = 100
    # initialize x axis
    step_x = (x_max - x_min) / n
    x_ = []
    for i in range(n):
        x_.append(x_min + i * step_x)
    # initialize y axis
    step_y = (y_max - y_min) / n
    y_ = []
    for i in range(n):
        y_.append(y_min + i * step_y)
    # compute z
    array = TColgp_Array2OfPnt(1, len(x_), 1, len(y_))
    i = 1
    for x in x_:
        j = 1
        for y in y_:
            z = f(x, y)
            point_to_add = gp_Pnt(x, y, z)
            array.SetValue(i, j, point_to_add)
            j += 1
        i += 1
    print("bspline surface creation")
    bspl_surface = GeomAPI_PointsToBSplineSurface(array, 3, 8, GeomAbs_C2,
                                                  0.001).Surface()
    display.DisplayShape(bspl_surface, update=True)
示例#3
0
def spl_face(px, py, pz, axs=gp_Ax3()):
    nx, ny = px.shape
    pnt_2d = TColgp_Array2OfPnt(1, nx, 1, ny)
    for row in range(pnt_2d.LowerRow(), pnt_2d.UpperRow() + 1):
        for col in range(pnt_2d.LowerCol(), pnt_2d.UpperCol() + 1):
            i, j = row - 1, col - 1
            pnt = gp_Pnt(px[i, j], py[i, j], pz[i, j])
            pnt_2d.SetValue(row, col, pnt)
            #print (i, j, px[i, j], py[i, j], pz[i, j])

    api = GeomAPI_PointsToBSplineSurface(pnt_2d, 0, 0, GeomAbs_C0, 0.001)
    api.Interpolate(pnt_2d)
    #surface = BRepBuilderAPI_MakeFace(curve, 1e-6)
    # return surface.Face()
    surf = api.Surface()
    surf.Transform(set_trf(gp_Ax3(), axs))
    face = BRepBuilderAPI_MakeFace(surf, 1e-6).Face()
    shel = BRepBuilderAPI_MakeShell(surf).Shell()
    return surf, face, shel
示例#4
0
def surf_spl_pcd(px, py, pz):
    nx, ny = px.shape
    pnt_2d = TColgp_Array2OfPnt(1, nx, 1, ny)
    for row in range(pnt_2d.LowerRow(), pnt_2d.UpperRow() + 1):
        for col in range(pnt_2d.LowerCol(), pnt_2d.UpperCol() + 1):
            i, j = row - 1, col - 1
            pnt = gp_Pnt(px[i, j], py[i, j], pz[i, j])
            pnt_2d.SetValue(row, col, pnt)
    curv = GeomAPI_PointsToBSplineSurface(pnt_2d, 3, 8, GeomAbs_G2,
                                          0.001).Surface()
    surf = BRepBuilderAPI_MakeFace(curv, 1e-6).Face()
    return surf, pnt_2d
示例#5
0
def load_surface(mesh, surf):
    nx, ny = surf.shape
    pnt_2d = TColgp_Array2OfPnt(1, nx, 1, ny)
    for row in range(pnt_2d.LowerRow(), pnt_2d.UpperRow() + 1):
        for col in range(pnt_2d.LowerCol(), pnt_2d.UpperCol() + 1):
            i, j = row - 1, col - 1
            pnt = gp_Pnt(mesh[0][i, j], mesh[1][i, j], surf[i, j])
            pnt_2d.SetValue(row, col, pnt)
    surface = GeomAPI_PointsToBSplineSurface(pnt_2d, 3, 8, GeomAbs_G2,
                                             0.001).Surface()
    srf_face = BRepBuilderAPI_MakeFace(surface, 0, 1, 0, 1, 0.001).Face()
    return srf_face
示例#6
0
def get_surface_sfc(filename):
    nx, ny = [int(s) for s in getline(filename, 3).split()]
    xs, ys, xe, ye = [float(s) for s in getline(filename, 2).split()]
    px = np.linspace(xs, xe, nx)
    py = np.linspace(ys, ye, ny)
    mesh = np.meshgrid(px, py)
    surf = np.loadtxt(filename, skiprows=3).T
    nx, ny = surf.shape
    pnt_2d = TColgp_Array2OfPnt(1, nx, 1, ny)
    for row in range(pnt_2d.LowerRow(), pnt_2d.UpperRow() + 1):
        for col in range(pnt_2d.LowerCol(), pnt_2d.UpperCol() + 1):
            i, j = row - 1, col - 1
            pnt = gp_Pnt(mesh[0][i, j], mesh[1][i, j], surf[i, j])
            pnt_2d.SetValue(row, col, pnt)
    surface = GeomAPI_PointsToBSplineSurface(
        pnt_2d, 3, 8, GeomAbs_G2, 0.001).Surface()
    srf_face = BRepBuilderAPI_MakeFace(surface, 0, 1, 0, 1, 0.001).Face()
    return srf_face
def build_surf():
    p1 = gp_Pnt(-15, 200, 10)
    p2 = gp_Pnt(5, 204, 0)
    p3 = gp_Pnt(15, 200, 0)
    p4 = gp_Pnt(-15, 20, 15)
    p5 = gp_Pnt(-5, 20, 0)
    p6 = gp_Pnt(15, 20, 35)

    array = TColgp_Array2OfPnt(1, 3, 1, 2)
    array.SetValue(1, 1, p1)
    array.SetValue(2, 1, p2)
    array.SetValue(3, 1, p3)
    array.SetValue(1, 2, p4)
    array.SetValue(2, 2, p5)
    array.SetValue(3, 2, p6)
    bspl_surf = GeomAPI_PointsToBSplineSurface(array, 3, 8, GeomAbs_C2,
                                               0.001).Surface()
    return bspl_surf
示例#8
0
    def build_surf(self):
        p1 = gp_Pnt(-15, 200, 10)
        p2 = gp_Pnt(5, 204, 0)
        p3 = gp_Pnt(15, 200, 0)
        p4 = gp_Pnt(-15, 20, 15)
        p5 = gp_Pnt(-5, 20, 0)
        p6 = gp_Pnt(15, 20, 35)
        self.display.DisplayShape(p1, color="RED")
        self.display.DisplayShape(p2, color="RED")
        self.display.DisplayShape(p3, color="RED")
        self.display.DisplayShape(p4, color="RED")
        self.display.DisplayShape(p5, color="RED")
        self.display.DisplayShape(p6, color="RED")

        array = TColgp_Array2OfPnt(1, 3, 1, 2)
        array.SetValue(1, 1, p1)
        array.SetValue(2, 1, p2)
        array.SetValue(3, 1, p3)
        array.SetValue(1, 2, p4)
        array.SetValue(2, 2, p5)
        array.SetValue(3, 2, p6)
        self.bspl_surf = GeomAPI_PointsToBSplineSurface(
            array, 3, 8, GeomAbs_C2, 0.001).Surface()
        self.bspl_face = BRepBuilderAPI_MakeFace(self.bspl_surf, 1e-6).Face()
def face():
    p1 = gp_Pnt()
    p2 = gp_Pnt()
    p3 = gp_Pnt()
    p4 = gp_Pnt()
    p5 = gp_Pnt()
    p6 = gp_Pnt()

    # The white Face
    sphere = gp_Sphere(gp_Ax3(gp_Pnt(0, 0, 0), gp_Dir(1, 0, 0)), 150)
    green_face = BRepBuilderAPI_MakeFace(sphere, 0.1, 0.7, 0.2, 0.9)

    # The red face
    p1.SetCoord(-15, 200, 10)
    p2.SetCoord(5, 204, 0)
    p3.SetCoord(15, 200, 0)
    p4.SetCoord(-15, 20, 15)
    p5.SetCoord(-5, 20, 0)
    p6.SetCoord(15, 20, 35)
    array = TColgp_Array2OfPnt(1, 3, 1, 2)
    array.SetValue(1, 1, p1)
    array.SetValue(2, 1, p2)
    array.SetValue(3, 1, p3)
    array.SetValue(1, 2, p4)
    array.SetValue(2, 2, p5)
    array.SetValue(3, 2, p6)
    curve = GeomAPI_PointsToBSplineSurface(array, 3, 8, GeomAbs_C2,
                                           0.001).Surface()
    red_face = BRepBuilderAPI_MakeFace(curve, 1e-6)

    #The brown face
    circle = gp_Circ(gp_Ax2(gp_Pnt(0, 0, 0), gp_Dir(1, 0, 0)), 80)
    Edge1 = BRepBuilderAPI_MakeEdge(circle, 0, math.pi)
    Edge2 = BRepBuilderAPI_MakeEdge(gp_Pnt(0, 0, -80), gp_Pnt(0, -10, 40))
    Edge3 = BRepBuilderAPI_MakeEdge(gp_Pnt(0, -10, 40), gp_Pnt(0, 0, 80))

    ##TopoDS_Wire YellowWire
    MW1 = BRepBuilderAPI_MakeWire(Edge1.Edge(), Edge2.Edge(), Edge3.Edge())
    assert MW1.IsDone()
    yellow_wire = MW1.Wire()
    brown_face = BRepBuilderAPI_MakeFace(yellow_wire)

    #The pink face
    p1.SetCoord(35, -200, 40)
    p2.SetCoord(50, -204, 30)
    p3.SetCoord(65, -200, 30)
    p4.SetCoord(35, -20, 45)
    p5.SetCoord(45, -20, 30)
    p6.SetCoord(65, -20, 65)
    array2 = TColgp_Array2OfPnt(1, 3, 1, 2)
    array2.SetValue(1, 1, p1)
    array2.SetValue(2, 1, p2)
    array2.SetValue(3, 1, p3)
    array2.SetValue(1, 2, p4)
    array2.SetValue(2, 2, p5)
    array2.SetValue(3, 2, p6)
    BSplineSurf = GeomAPI_PointsToBSplineSurface(array2, 3, 8, GeomAbs_C2,
                                                 0.001)
    aFace = BRepBuilderAPI_MakeFace(BSplineSurf.Surface(), 1e-6).Face()
    ##
    ##//2d lines
    P12d = gp_Pnt2d(0.9, 0.1)
    P22d = gp_Pnt2d(0.2, 0.7)
    P32d = gp_Pnt2d(0.02, 0.1)
    ##
    line1 = Geom2d_Line(P12d, gp_Dir2d((0.2 - 0.9), (0.7 - 0.1)))
    line2 = Geom2d_Line(P22d, gp_Dir2d((0.02 - 0.2), (0.1 - 0.7)))
    line3 = Geom2d_Line(P32d, gp_Dir2d((0.9 - 0.02), (0.1 - 0.1)))
    ##
    ##//Edges are on the BSpline surface
    Edge1 = BRepBuilderAPI_MakeEdge(line1, BSplineSurf.Surface(), 0,
                                    P12d.Distance(P22d)).Edge()
    Edge2 = BRepBuilderAPI_MakeEdge(line2, BSplineSurf.Surface(), 0,
                                    P22d.Distance(P32d)).Edge()
    Edge3 = BRepBuilderAPI_MakeEdge(line3, BSplineSurf.Surface(), 0,
                                    P32d.Distance(P12d)).Edge()
    ##
    Wire1 = BRepBuilderAPI_MakeWire(Edge1, Edge2, Edge3).Wire()
    Wire1.Reverse()
    pink_face = BRepBuilderAPI_MakeFace(aFace, Wire1).Face()
    breplib_BuildCurves3d(pink_face)

    display.DisplayColoredShape(green_face.Face(), 'GREEN')
    display.DisplayColoredShape(red_face.Face(), 'RED')
    display.DisplayColoredShape(pink_face, Quantity_Color(Quantity_NOC_PINK))
    display.DisplayColoredShape(brown_face.Face(), 'BLUE')
    display.DisplayColoredShape(yellow_wire, 'YELLOW', update=True)
示例#10
0
    def test_distances(self):
        '''Test: distances'''
        array1 = []
        array1.append(gp_Pnt(-5, 1, 2))
        array1.append(gp_Pnt(-5, 2, 2))
        array1.append(gp_Pnt(-5.3, 3, 1))
        array1.append(gp_Pnt(-5, 4, 1))
        array1.append(gp_Pnt(-5, 5, 2))
        SPL1 = GeomAPI_PointsToBSpline(
            point_list_to_TColgp_Array1OfPnt(array1)).Curve()
        array2 = []
        array2.append(gp_Pnt(4, 1, 2))
        array2.append(gp_Pnt(4, 2, 2))
        array2.append(gp_Pnt(3.7, 3, 1))
        array2.append(gp_Pnt(4, 4, 1))
        array2.append(gp_Pnt(4, 5, 2))
        SPL2 = GeomAPI_PointsToBSpline(
            point_list_to_TColgp_Array1OfPnt(array2)).Curve()
        aGeomFill1 = GeomFill_BSplineCurves(SPL1, SPL2, GeomFill_StretchStyle)
        aSurf1 = aGeomFill1.Surface()

        array3 = TColgp_Array2OfPnt(1, 5, 1, 5)
        array3.SetValue(1, 1, gp_Pnt(-4, -4, 5))
        array3.SetValue(1, 2, gp_Pnt(-4, -2, 5))
        array3.SetValue(1, 3, gp_Pnt(-4, 0, 4))
        array3.SetValue(1, 4, gp_Pnt(-4, 2, 5))
        array3.SetValue(1, 5, gp_Pnt(-4, 4, 5))

        array3.SetValue(2, 1, gp_Pnt(-2, -4, 4))
        array3.SetValue(2, 2, gp_Pnt(-2, -2, 4))
        array3.SetValue(2, 3, gp_Pnt(-2, 0, 4))
        array3.SetValue(2, 4, gp_Pnt(-2, 2, 4))
        array3.SetValue(2, 5, gp_Pnt(-2, 5, 4))

        array3.SetValue(3, 1, gp_Pnt(0, -4, 3.5))
        array3.SetValue(3, 2, gp_Pnt(0, -2, 3.5))
        array3.SetValue(3, 3, gp_Pnt(0, 0, 3.5))
        array3.SetValue(3, 4, gp_Pnt(0, 2, 3.5))
        array3.SetValue(3, 5, gp_Pnt(0, 5, 3.5))

        array3.SetValue(4, 1, gp_Pnt(2, -4, 4))
        array3.SetValue(4, 2, gp_Pnt(2, -2, 4))
        array3.SetValue(4, 3, gp_Pnt(2, 0, 3.5))
        array3.SetValue(4, 4, gp_Pnt(2, 2, 5))
        array3.SetValue(4, 5, gp_Pnt(2, 5, 4))

        array3.SetValue(5, 1, gp_Pnt(4, -4, 5))
        array3.SetValue(5, 2, gp_Pnt(4, -2, 5))
        array3.SetValue(5, 3, gp_Pnt(4, 0, 5))
        array3.SetValue(5, 4, gp_Pnt(4, 2, 6))
        array3.SetValue(5, 5, gp_Pnt(4, 5, 5))

        aSurf2 = GeomAPI_PointsToBSplineSurface(array3).Surface()
        ESS = GeomAPI_ExtremaSurfaceSurface(aSurf1, aSurf2)
        dist = ESS.LowerDistance()
        self.assertGreater(dist, 1.25)
        self.assertLess(dist, 1.26)
        a, b = gp_Pnt(), gp_Pnt()
        ESS.NearestPoints(a, b)

        NbExtrema = ESS.NbExtrema()
        for k in range(1, NbExtrema + 1):
            P3, P4 = gp_Pnt(), gp_Pnt()
            ESS.Points(k, P3, P4)
            aCurve = GC_MakeSegment(P3, P4).Value()
            self.assertFalse(aCurve is None)
示例#11
0
from OCC.Core.gp import gp_Pnt
from OCC.Core.BRepBuilderAPI import BRepBuilderAPI_MakeFace
from OCC.Core.TColgp import TColgp_Array2OfPnt
from OCC.Core.GeomAPI import GeomAPI_PointsToBSplineSurface
from OCC.Core.GeomAbs import GeomAbs_C2
from OCC.Core.ShapeAnalysis import ShapeAnalysis_Surface, shapeanalysis_GetFaceUVBounds

p1 = gp_Pnt(-15, 200, 10)
p2 = gp_Pnt(5, 204, 0)
p3 = gp_Pnt(15, 200, 0)
p4 = gp_Pnt(-15, 20, 15)
p5 = gp_Pnt(-5, 20, 0)
p6 = gp_Pnt(15, 20, 35)

array = TColgp_Array2OfPnt(1, 3, 1, 2)
array.SetValue(1, 1, p1)
array.SetValue(2, 1, p2)
array.SetValue(3, 1, p3)
array.SetValue(1, 2, p4)
array.SetValue(2, 2, p5)
array.SetValue(3, 2, p6)
bspl_surf = GeomAPI_PointsToBSplineSurface(array, 3, 8, GeomAbs_C2,
                                           0.001).Surface()
face = BRepBuilderAPI_MakeFace(bspl_surf, 1e-6).Face()
umin, umax, vmin, vmax = shapeanalysis_GetFaceUVBounds(face)
print(umin, umax, vmin, vmax)
示例#12
0
 def gen_face(self):
     curv = GeomAPI_PointsToBSplineSurface(self.pnt_2d, 3, 8, GeomAbs_G2,
                                           0.001).Surface()
     surf = BRepBuilderAPI_MakeFace(curv, 1e-6).Face()
     self.display.DisplayShape(surf)
示例#13
0
def _interpolate2(refs, degmin=3, degmax=7):
    Arr = opencascade_array2_of_pnt(refs)
    Surf = GeomAPI_PointsToBSplineSurface(Arr, degmin, degmax, GeomAbs_C2,
                                          1.0e-3)
    return Shape(BRepBuilderAPI_MakeFace(Surf.Surface(), 1.0e-5).Face())