实施步骤
准备工作
- 开发技能
- 熟悉C++语言,能够编写C++语言代码。
- 熟悉CAX软件功能。
- 了解OCCT几何建模相关知识。
- 了解C++构建相关工具(cmake等)
- 开发环境
- Windows 10+
- Visual Studio 2017+或适用于Visual Studio 2017+的Microsoft Visual生成工具
- CMake 3.7+
- Linux:
- gcc g++ gdb
- CMake 3.7+
- Windows 10+
操作步骤
- 读取STEP文件。
Ncad::Exchange::STEPReader reader; reader.ReadFile("model_name.stp"); const ShapePtr inputShape = reader.GetOneShape();
- (可选)创建基础实体(如盒子、锥体、圆柱、球体、圆环)。
// Prepare data. const DirPtr oz = std::make_shared<Ncad::Base::Dir>(0.0, 0.0, 1.0); const Ax2Ptr cylAxis = std::make_shared<Ncad::Base::Ax2>(origin, oz); // Create cylinder. Ncad::Prim::Cylinder cylBuilder(cylAxis, 5.0, 10.0); cylBuilder.Perform(); const ShapePtr cyl = cylBuilder.GetResult();
- (可选)执行布尔操作。
- 创建圆角和倒角。
- 圆角是在两个或多个相交或相邻边缘之间创建平滑过渡或曲率的过程。
- 倒角是沿着形状的边缘或角落创建平面或有角度的切口的过程。
// Edges to be filleted. ListOfShape edges; std::set<int> edgeIndices = {3, 9, 13}; Ncad::Base::ShapeExplorer exp(bopRes, Ncad::Base::Shape::EDGE); for (int index = 1; exp.More(); exp.Next(), ++index) if (edgeIndices.find(index) != edgeIndices.end()) edges.push_back(exp.Current()); // Fillet creation. static constexpr double radius = 1.0; Ncad::Modify::Fillet filletAlgo(bopRes, edges, radius); ShapePtr result = filletAlgo.GetResult();
- 缺陷检测。
// detection of problems Ncad::Analysis::DefectConfig config(1.0e-4); Ncad::Analysis::CheckShape checker(config); const bool isValid = checker.IsValid(inputShape); if (isValid) { std::cout << "Input shape is valid" << std::endl; return 0; } std::list<FaultyShapePtr> faulties = checker.GetFaultiesByID(Ncad::Analysis::DefectID::GEOM_SELF_INTERSECTION); std::cout << "Input shape has faulties. Launching shape healing." << std::endl;
- 执行形状修复。
std::list<Ncad::Guid> repairs = {Ncad::Healing::repairSILoopBySplitting(),Ncad::Healing::repairSISurfaceBySplitting()}; config.SetDefectRepairs(Ncad::Analysis::DefectID::GEOM_SELF_INTERSECTION, repairs); Ncad::Healing::FixShape healer(config); const bool isFixed = healer.Fix(faulties); ShapePtr resultShape = healer.GetResult(); std::cout << "healing is performed" << std::endl;
- 几何特征识别。
NCAD支持钻孔检测、凹槽检测、空腔检测及隔离特征检测等检测算法。以下是钻孔识别检测的调用示例:
Ncad::Feature::DrilledHolesDetector dhDetector(shape); dhDetector.Perform(); const std::vector<std::set<int>>& drilledHoles = dhDetector.GetAllFeatureIds();
- 几何特征移除。
// read indices of faces to be removed std::set<int> faceIndices; for (int i = 3; i < argc; ++i) faceIndices.insert(atoi(argv[i])); std::cout << "indices are loaded" << std::endl; // convert indices into faces to remove ListOfShape faces2remove; Ncad::Base::ShapeExplorer exp(inputShape, Ncad::Base::Shape::FACE); for (int index = 1; exp.More(); exp.Next(), ++index) if (faceIndices.find(index) != faceIndices.end()) faces2remove.push_back(exp.Current()); // defeaturing Ncad::Modify::AdvancedDefeaturing advDef(inputShape, faces2remove); advDef.Perform(); ShapePtr resultShape = advDef.GetResult(); std::cout << "Defeaturing is performed" << std::endl;
- 将结果文件写入成STEP文件。
Ncad::Exchange::STEPWriter writer; writer.WriteShape(shape, "path_to_file");
常见问题
Q:Windows和Linux环境的编译兼容性问题
A:
- Windows环境
- Linux环境
- 包管理器依赖问题:
- SDK需要特定版本的运行时g++库支持C++语言特性,但系统默认的版本可能较旧,导致在构建过程中出现语法错误。
- 在Linux不同发行版存在不同,这可能会导致在安装和配置过程中出现混淆。
- 权限问题:
对于使用多用户环境的情况,不同用户可能对SDK相关的文件和目录有不同的权限。这可能会导致一些用户能够成功构建和运行应用,而其他用户则因为权限问题无法进行相同的操作。
- 库路径和链接问题:
- Linux系统在链接库文件时,依赖于特定的库路径设置(如LD_LIBRARY_PATH环境变量)。如果这些路径没有正确设置,应用可能无法找到所需的共享库。例如,在运行时应用可能无法加载OCCT库,因为系统无法在指定的库路径中找到该库。
- 与Windows不同,Linux上的库文件命名和版本管理遵循一定的规则(如.so文件的命名和版本号约定)。如果库文件的名称或版本不符合这些规则,或者在链接过程中指定了错误的库名称或版本,会导致链接错误。
- 包管理器依赖问题:
Q:为什么使用SDK时,抛出了许可证相关的异常?
A:请检查许可证的有效性,例如产品名称是否匹配,是否超过有效期限,并使用有效的许可证。