Hari ini saya menemukan pertanyaan terkait Open CASCADE di Stack Overflow. Pertanyaannya adalah sebagai berikut.

Saya ingin menghitung perpotongan kurva iso arah u dan batas TopoDS_Face di oktober, tetapi saya tidak tahu cara menulis kodenya, adakah yang bisa memberikan saran atau contoh kode dengan c++?

Saya kira pengguna ingin menemukan perpotongan TopoDS_Face dan kurva ISO yang dihasilkan. Jadi inilah jawaban saya.

Jika Anda seorang pemula, Anda mungkin familiar atau belum familiar dengan kurva ISO. Tapi saya kira Anda tahu tentang itu. Saya akan membuat artikel terpisah tentang kurva ISO nanti.

Hasilkan kurva ISO.

Jika Anda memiliki wajah, Anda dapat membuat kurva ISO hanya dengan menggunakan cuplikan kode berikut.

// the face object
TopoDS_Face face = ...                                  
// get the surface of the given face
Handle(Geom_Surface) surface = BRep_Tool::Surface(face);
// define the u parameter value
double u = 0.5;                             
// get the ISO curve          
Handle(Geom_Curve) curve = surface->UIso(u);
// Make edge of the given ISO curvet
TopoDS_Shape edge = BRepBuilderAPI_MakeEdge(curve).Shape();

Di sini kode menunjukkan untuk membuat kurva UIso. Demikian pula Anda dapat menggunakan “VIso” untuk membuat kurva VIso. Cukup mudah.

Temukan titik persimpangan

Anda dapat menemukan titik potong dari sisi-sisi tertentu menggunakan kode berikut. Di sini asumsikan wajah memiliki banyak sisi.

// explor the shape to get the edg
for (TopExp_Explorer exp(face, TopAbs_EDGE); exp.More(); exp.Next())
{
    // get the current edge of the face
    TopoDS_Edge shapeEdge = TopoDS::Edge(exp.Current()); 
    BRepExtrema_DistShapeShape dist(edge, shapeEdge);

    // get the result
    if (dist.IsDone() && dist.NbSolution() > 0)
    {
        for (int i = 1; i <= dist.NbSolution(); i++) 
        {
            // point on the iso curve
            gp_Pnt point1 = dist.PointOnShape1(i);
            // point on the edge of the face
            gp_Pnt point2 = dist.PointOnShape2(i);
            // since both these points are same, you can use any of them.
            bool check = true;
        }
    }
}

Cuplikan kode ini dapat digunakan untuk menemukan perpotongan antara TopoDS_edges mana pun.

Untuk pembaruan lebih lanjut, ikuti kami di LinkedIn.
Berlangganan buletin “CAD CASE”.