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”.