{"id":193,"date":"2026-03-05T20:12:27","date_gmt":"2026-03-05T12:12:27","guid":{"rendered":"https:\/\/www.alimzs.com\/index.php\/2026\/03\/05\/opencascade-7-7-0-%e5%ae%8c%e5%85%a8%e6%95%99%e7%a8%8b%ef%bc%88%e4%ba%8c%e5%8d%81%e4%b8%80%ef%bc%89%ef%bc%9a%e6%b3%95%e5%85%b0%e7%9b%98%e5%8f%82%e6%95%b0%e5%8c%96%e5%bb%ba%e6%a8%a1%e5%ae%9e%e6%88%98\/"},"modified":"2026-03-05T20:12:27","modified_gmt":"2026-03-05T12:12:27","slug":"opencascade-7-7-0-%e5%ae%8c%e5%85%a8%e6%95%99%e7%a8%8b%ef%bc%88%e4%ba%8c%e5%8d%81%e4%b8%80%ef%bc%89%ef%bc%9a%e6%b3%95%e5%85%b0%e7%9b%98%e5%8f%82%e6%95%b0%e5%8c%96%e5%bb%ba%e6%a8%a1%e5%ae%9e%e6%88%98","status":"publish","type":"post","link":"https:\/\/www.alimzs.com\/index.php\/2026\/03\/05\/opencascade-7-7-0-%e5%ae%8c%e5%85%a8%e6%95%99%e7%a8%8b%ef%bc%88%e4%ba%8c%e5%8d%81%e4%b8%80%ef%bc%89%ef%bc%9a%e6%b3%95%e5%85%b0%e7%9b%98%e5%8f%82%e6%95%b0%e5%8c%96%e5%bb%ba%e6%a8%a1%e5%ae%9e%e6%88%98\/","title":{"rendered":"OpenCASCADE 7.7.0 \u5b8c\u5168\u6559\u7a0b\uff08\u4e8c\u5341\u4e00\uff09\uff1a\u6cd5\u5170\u76d8\u53c2\u6570\u5316\u5efa\u6a21\u5b9e\u6218"},"content":{"rendered":"<h1>OpenCASCADE 7.7.0 \u5b8c\u5168\u6559\u7a0b\uff08\u4e8c\u5341\u4e00\uff09\uff1a\u6cd5\u5170\u76d8\u53c2\u6570\u5316\u5efa\u6a21\u5b9e\u6218<\/h1>\n<p>> <strong>\u7248\u672c<\/strong>: OCCT 7.7.0<br \/>\n> <strong>\u96be\u5ea6<\/strong>: \u5b9e\u6218<br \/>\n> <strong>\u5b57\u6570<\/strong>: \u7ea6 3000 \u5b57<br \/>\n> <strong>\u6848\u4f8b<\/strong>: \u5b8c\u6574\u6cd5\u5170\u76d8\u96f6\u4ef6\u8bbe\u8ba1<\/p>\n<p>&#8212;<\/p>\n<h2>\u6848\u4f8b\u6982\u8ff0<\/h2>\n<p>\u672c\u6559\u7a0b\u5c06\u5e26\u9886\u4f60\u5b8c\u6210\u4e00\u4e2a\u5b8c\u6574\u7684\u6cd5\u5170\u76d8\u96f6\u4ef6\u5efa\u6a21\uff0c\u7efc\u5408\u8fd0\u7528\u524d\u9762\u5b66\u5230\u7684\u6240\u6709\u6280\u80fd\uff1a<br \/>\n&#8211; \u57fa\u672c\u4f53\u7d20\u521b\u5efa<br \/>\n&#8211; \u5e03\u5c14\u8fd0\u7b97<br \/>\n&#8211; \u5012\u89d2\u5706\u89d2<br \/>\n&#8211; \u9635\u5217\u590d\u5236<br \/>\n&#8211; \u53c2\u6570\u5316\u8bbe\u8ba1<\/p>\n<h3>\u6cd5\u5170\u76d8\u89c4\u683c<\/h3>\n<p>| \u53c2\u6570 | \u6570\u503c | \u8bf4\u660e |<br \/>\n|&#8212;&#8212;|&#8212;&#8212;|&#8212;&#8212;|<br \/>\n| \u5916\u5f84 | 150mm | \u6cd5\u5170\u76d8\u6574\u4f53\u76f4\u5f84 |<br \/>\n| \u5185\u5f84 | 50mm | \u4e2d\u5fc3\u901a\u5b54\u76f4\u5f84 |<br \/>\n| \u539a\u5ea6 | 20mm | \u6cd5\u5170\u76d8\u539a\u5ea6 |<br \/>\n| \u87ba\u6813\u5b54\u6570 | 6 | \u5747\u5e03\u87ba\u6813\u5b54 |<br \/>\n| \u87ba\u6813\u5b54\u5f84 | 12mm | \u5355\u4e2a\u87ba\u6813\u5b54\u76f4\u5f84 |<br \/>\n| \u5206\u5e03\u5706\u76f4\u5f84 | 120mm | \u87ba\u6813\u5b54\u4e2d\u5fc3\u5206\u5e03\u5706 |<\/p>\n<p>&#8212;<\/p>\n<h2>\u5b8c\u6574\u4ee3\u7801\u5b9e\u73b0<\/h2>\n<pre><code class=\"language-cpp\">#include <BRepPrimAPI_MakeCylinder.hxx>\n#include <BRepPrimAPI_MakeBox.hxx>\n#include <BRepAlgoAPI_Cut.hxx>\n#include <BRepAlgoAPI_Fuse.hxx>\n#include <BRepFilletAPI_MakeFillet.hxx>\n#include <BRepOffsetAPI_MakeThickSolid.hxx>\n#include <TopTools_ListOfShape.hxx>\n#include <TColgp_Array1OfPnt.hxx>\n#include <gp_Ax2.hxx>\n#include <gp_Pnt.hxx>\n#include <gp_Dir.hxx>\n#include <iostream>\n#include <cmath>\n<p>\/\/ \u6cd5\u5170\u76d8\u53c2\u6570\nstruct FlangeParams {\n    double outerRadius = 75.0;      \/\/ \u5916\u534a\u5f84\n    double innerRadius = 25.0;      \/\/ \u5185\u534a\u5f84\n    double thickness = 20.0;        \/\/ \u539a\u5ea6\n    int boltHoleCount = 6;          \/\/ \u87ba\u6813\u5b54\u6570\u91cf\n    double boltHoleRadius = 6.0;    \/\/ \u87ba\u6813\u5b54\u534a\u5f84\n    double boltCircleRadius = 60.0; \/\/ \u87ba\u6813\u5206\u5e03\u5706\u534a\u5f84\n    double edgeFillet = 3.0;        \/\/ \u8fb9\u7f18\u5706\u89d2\n};<\/p>\n<p>\/\/ \u521b\u5efa\u6cd5\u5170\u76d8\u4e3b\u4f53\nTopoDS_Solid CreateFlangeBody(const FlangeParams& params) {\n    \/\/ \u521b\u5efa\u5916\u5706\u67f1\n    gp_Ax2 axis(gp_Pnt(0, 0, 0), gp_Dir(0, 0, 1));\n    TopoDS_Solid outerCyl = BRepPrimAPI_MakeCylinder(\n        axis, params.outerRadius, params.thickness);\n    \n    \/\/ \u521b\u5efa\u5185\u5b54\u5200\u5177\n    TopoDS_Solid innerCyl = BRepPrimAPI_MakeCylinder(\n        axis, params.innerRadius, params.thickness);\n    \n    \/\/ \u5207\u9664\u4e2d\u5fc3\u5b54\n    BRepAlgoAPI_Cut cut(outerCyl, innerCyl);\n    return TopoDS::Solid(cut.Shape());\n}<\/p>\n<p>\/\/ \u521b\u5efa\u5355\u4e2a\u87ba\u6813\u5b54\nTopoDS_Solid CreateBoltHole(const gp_Pnt& center, double radius, double height) {\n    gp_Ax2 axis(center, gp_Dir(0, 0, 1));\n    return BRepPrimAPI_MakeCylinder(axis, radius, height);\n}<\/p>\n<p>\/\/ \u521b\u5efa\u6240\u6709\u87ba\u6813\u5b54\nTopTools_ListOfShape CreateBoltHoles(const FlangeParams& params) {\n    TopTools_ListOfShape holes;\n    \n    for (int i = 0; i < params.boltHoleCount; i++) {\n        double angle = 2.0 * M_PI * i \/ params.boltHoleCount;\n        double x = params.boltCircleRadius * cos(angle);\n        double y = params.boltCircleRadius * sin(angle);\n        \n        gp_Pnt center(x, y, 0);\n        TopoDS_Solid hole = CreateBoltHole(center, params.boltHoleRadius, params.thickness);\n        holes.Append(hole);\n    }\n    \n    return holes;\n}<\/p>\n<p>\/\/ \u5408\u5e76\u6240\u6709\u87ba\u6813\u5b54\u5200\u5177\nTopoDS_Shape MergeShapes(const TopTools_ListOfShape& shapes) {\n    if (shapes.IsEmpty()) {\n        return TopoDS_Shape();\n    }\n    \n    TopoDS_Shape result = shapes.First();\n    for (TopTools_ListIteratorOfListOfShape it(shapes); it.More(); it.Next()) {\n        if (it.Value() != shapes.First()) {\n            BRepAlgoAPI_Fuse fuse(result, it.Value());\n            result = fuse.Shape();\n        }\n    }\n    return result;\n}<\/p>\n<p>\/\/ \u6dfb\u52a0\u8fb9\u7f18\u5706\u89d2\nTopoDS_Shape AddEdgeFillets(const TopoDS_Shape& shape, double radius) {\n    BRepFilletAPI_MakeFillet fillet(shape);\n    \n    \/\/ \u67e5\u627e\u6240\u6709\u5916\u8fb9\u7f18\n    TopExp_Explorer exp(shape, TopAbs_EDGE);\n    while (exp.More()) {\n        TopoDS_Edge edge = TopoDS::Edge(exp.Current());\n        fillet.Add(radius, edge);\n        exp.Next();\n    }\n    \n    return fillet.Shape();\n}<\/p>\n<p>int main() {\n    std::cout << \"=== \u6cd5\u5170\u76d8\u53c2\u6570\u5316\u5efa\u6a21 ===\" << std::endl;\n    \n    \/\/ 1. \u8bbe\u7f6e\u53c2\u6570\n    FlangeParams params;\n    std::cout << \"\u53c2\u6570\u8bbe\u7f6e:\" << std::endl;\n    std::cout << \"  \u5916\u5f84\uff1a\" << params.outerRadius * 2 << \"mm\" << std::endl;\n    std::cout << \"  \u5185\u5f84\uff1a\" << params.innerRadius * 2 << \"mm\" << std::endl;\n    std::cout << \"  \u539a\u5ea6\uff1a\" << params.thickness << \"mm\" << std::endl;\n    std::cout << \"  \u87ba\u6813\u5b54\uff1a\" << params.boltHoleCount << \" x M\" << params.boltHoleRadius * 2 << std::endl;\n    \n    \/\/ 2. \u521b\u5efa\u6cd5\u5170\u76d8\u4e3b\u4f53\n    std::cout << \"\\n\u6b65\u9aa4 1: \u521b\u5efa\u6cd5\u5170\u76d8\u4e3b\u4f53...\" << std::endl;\n    TopoDS_Solid body = CreateFlangeBody(params);\n    \n    \/\/ 3. \u521b\u5efa\u87ba\u6813\u5b54\n    std::cout << \"\u6b65\u9aa4 2: \u521b\u5efa\u87ba\u6813\u5b54...\" << std::endl;\n    TopTools_ListOfShape boltHoles = CreateBoltHoles(params);\n    TopoDS_Shape allHoles = MergeShapes(boltHoles);\n    \n    \/\/ 4. \u5207\u9664\u87ba\u6813\u5b54\n    std::cout << \"\u6b65\u9aa4 3: \u5207\u9664\u87ba\u6813\u5b54...\" << std::endl;\n    BRepAlgoAPI_Cut cut(body, allHoles);\n    TopoDS_Shape withHoles = cut.Shape();\n    \n    \/\/ 5. \u6dfb\u52a0\u5706\u89d2\n    std::cout << \"\u6b65\u9aa4 4: \u6dfb\u52a0\u8fb9\u7f18\u5706\u89d2...\" << std::endl;\n    TopoDS_Shape finalPart = AddEdgeFillets(withHoles, params.edgeFillet);\n    \n    std::cout << \"\\n\u2705 \u6cd5\u5170\u76d8\u5efa\u6a21\u5b8c\u6210!\" << std::endl;\n    return 0;\n}\n<\/code><\/pre>\n<\/p>\n<p>---<\/p>\n<h2>\u4ee3\u7801\u8be6\u89e3<\/h2>\n<h3>1. \u53c2\u6570\u5316\u7ed3\u6784\u8bbe\u8ba1<\/h3>\n<p>\u4f7f\u7528\u7ed3\u6784\u4f53\u7ba1\u7406\u6240\u6709\u8bbe\u8ba1\u53c2\u6570\uff0c\u4fbf\u4e8e\u4fee\u6539\u548c\u91cd\u7528\uff1a<\/p>\n<pre><code class=\"language-cpp\">struct FlangeParams {\n    double outerRadius = 75.0;      \/\/ \u5916\u534a\u5f84\n    double innerRadius = 25.0;      \/\/ \u5185\u534a\u5f84\n    double thickness = 20.0;        \/\/ \u539a\u5ea6\n    int boltHoleCount = 6;          \/\/ \u87ba\u6813\u5b54\u6570\u91cf\n    double boltHoleRadius = 6.0;    \/\/ \u87ba\u6813\u5b54\u534a\u5f84\n    double boltCircleRadius = 60.0; \/\/ \u87ba\u6813\u5206\u5e03\u5706\u534a\u5f84\n    double edgeFillet = 3.0;        \/\/ \u8fb9\u7f18\u5706\u89d2\n};\n<\/code><\/pre>\n<p><strong>\u4f18\u52bf<\/strong>:<br \/>\n- \u6240\u6709\u53c2\u6570\u96c6\u4e2d\u7ba1\u7406<br \/>\n- \u6613\u4e8e\u4fee\u6539\u548c\u8fed\u4ee3<br \/>\n- \u53ef\u4ee5\u4fdd\u5b58\u4e3a\u914d\u7f6e\u6587\u4ef6<\/p>\n<h3>2. \u87ba\u6813\u5b54\u9635\u5217\u8ba1\u7b97<\/h3>\n<p>\u4f7f\u7528\u6781\u5750\u6807\u8ba1\u7b97\u5747\u5e03\u5b54\u4f4d\u7f6e\uff1a<\/p>\n<pre><code class=\"language-cpp\">for (int i = 0; i < params.boltHoleCount; i++) {\n    double angle = 2.0 * M_PI * i \/ params.boltHoleCount;\n    double x = params.boltCircleRadius * cos(angle);\n    double y = params.boltCircleRadius * sin(angle);\n    gp_Pnt center(x, y, 0);\n    \/\/ \u521b\u5efa\u87ba\u6813\u5b54...\n}\n<\/code><\/pre>\n<h3>3. \u5e03\u5c14\u8fd0\u7b97\u6d41\u7a0b<\/h3>\n<pre><code class=\"language-\">\u5916\u5706\u67f1 \u2192 \u5207\u9664\u5185\u5b54 \u2192 \u5207\u9664\u87ba\u6813\u5b54 \u2192 \u6dfb\u52a0\u5706\u89d2 \u2192 \u5b8c\u6210\n<\/code><\/pre>\n<p>---<\/p>\n<h2>\u6269\u5c55\uff1a\u751f\u6210\u5de5\u7a0b\u56fe\u6570\u636e<\/h2>\n<pre><code class=\"language-cpp\">\/\/ \u8ba1\u7b97\u6cd5\u5170\u76d8\u8d28\u91cf\u5c5e\u6027\n#include <GProp_GProps.hxx>\n#include <BRepGProp.hxx>\n<p>void CalculateMassProperties(const TopoDS_Shape& shape) {\n    GProp_GProps props;\n    BRepGProp::VolumeProperties(shape, props);\n    \n    double volume = props.Mass();\n    gp_Pnt center = props.CentreOfMass();\n    \n    std::cout << \"\u4f53\u79ef\uff1a\" << volume << \" mm\u00b3\" << std::endl;\n    std::cout << \"\u8d28\u5fc3\uff1a(\" << center.X() << \", \" \n              << center.Y() << \", \" << center.Z() << \")\" << std::endl;\n}\n<\/code><\/pre>\n<\/p>\n<p>---<\/p>\n<h2>\u5e38\u89c1\u95ee\u9898<\/h2>\n<h3>Q1: \u5982\u4f55\u4fee\u6539\u6cd5\u5170\u76d8\u89c4\u683c\uff1f<\/h3>\n<p>\u53ea\u9700\u4fee\u6539 <code>FlangeParams<\/code> \u7ed3\u6784\u4f53\u4e2d\u7684\u53c2\u6570\u503c\u5373\u53ef\u3002<\/p>\n<h3>Q2: \u87ba\u6813\u5b54\u4f4d\u7f6e\u4e0d\u51c6\u786e\uff1f<\/h3>\n<p>\u68c0\u67e5\u89d2\u5ea6\u8ba1\u7b97\u662f\u5426\u4f7f\u7528\u5f27\u5ea6\u5236\uff08<code>M_PI<\/code>\uff09\uff0c\u800c\u975e\u89d2\u5ea6\u5236\u3002<\/p>\n<h3>Q3: \u5e03\u5c14\u8fd0\u7b97\u5931\u8d25\uff1f<\/h3>\n<p>\u5c1d\u8bd5\u8c03\u6574\u516c\u5dee\u6216\u786e\u4fdd\u51e0\u4f55\u4f53\u6709\u8db3\u591f\u91cd\u53e0\u3002<\/p>\n<p>---<\/p>\n<h2>\u603b\u7ed3<\/h2>\n<p>\u672c\u6559\u7a0b\u5b8c\u6210\u4e86\uff1a<br \/>\n- \u2705 \u53c2\u6570\u5316\u6cd5\u5170\u76d8\u8bbe\u8ba1<br \/>\n- \u2705 \u5e03\u5c14\u8fd0\u7b97\u7efc\u5408\u5e94\u7528<br \/>\n- \u2705 \u9635\u5217\u5b54\u8ba1\u7b97<br \/>\n- \u2705 \u8fb9\u7f18\u5904\u7406<\/p>\n<p>\u8fd9\u662f OCCT \u5b9e\u6218\u7684\u5178\u578b\u5de5\u4f5c\u6d41\u7a0b\u3002<\/p>\n<p>---<\/p>\n<p>*\u5b57\u6570\uff1a\u7ea6 3000 \u5b57 | \u5206\u7c7b\uff1aOpenCASCADE \u6559\u7a0b | \u96be\u5ea6\uff1a\u5b9e\u6218 | \u7248\u672c\uff1a7.7.0*<\/p>\n","protected":false},"excerpt":{"rendered":"<p>OpenCASCADE 7.7.0 \u5b8c\u5168\u6559\u7a0b\uff08\u4e8c\u5341\u4e00\uff09\uff1a\u6cd5\u5170\u76d8\u53c2\u6570\u5316\u5efa\u6a21\u5b9e\u6218 > \u7248\u672c: OCCT 7.7.0 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-193","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/www.alimzs.com\/index.php\/wp-json\/wp\/v2\/posts\/193","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.alimzs.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.alimzs.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.alimzs.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.alimzs.com\/index.php\/wp-json\/wp\/v2\/comments?post=193"}],"version-history":[{"count":0,"href":"https:\/\/www.alimzs.com\/index.php\/wp-json\/wp\/v2\/posts\/193\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.alimzs.com\/index.php\/wp-json\/wp\/v2\/media?parent=193"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.alimzs.com\/index.php\/wp-json\/wp\/v2\/categories?post=193"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.alimzs.com\/index.php\/wp-json\/wp\/v2\/tags?post=193"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}