/
levovix
/
kittycad
Обзор
Документация
Войти
/
levovix
/
kittycad
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/data/solids/loft.cpp
101 строка
2 KB
levovix
fix: recreate the solid, always
27 апр 2026, 20:32
27 апр 2026, 20:32
935dd5b
Код
Авторство
О чём код?
#include "loft.h" #include <solid.h> #include <mesh.h> #include <model.h> #include <cur_polyline.h> #include <cur_polyline3d.h> #include <action_curve.h> #include <action_solid.h> #include <cr_lofted_solid.h> #include <vsn_scenesegment.h> #include <vsn_scenecontent.h> #include <vsn_geometryfactory.h> #include "data/sketch/sketch.h" #include "data/sketch/contours.h" #include "data/document.h" #include "geometry/contours.h" using namespace VSN; using namespace c3d; void data::Loft::buildSolid() { assert(m_propertyChanged || m_dependencyChanged); if (m_dependencyChanged) { solid = nullptr; } m_propertyChanged = false; m_dependencyChanged = false; markVisualChanged(); LoftedValues values{}; if (thickness > 0) { values.thickness1 = thickness; } else if (thickness < 0) { values.thickness2 = -thickness; } if (sections.size() == 0) { return; } auto names = MbSNameMaker(ct_ElementarySolid, MbSNameMaker::i_SideNone, 0); std::vector<SPtr<MbSNameMaker>> cNames{}; std::vector<SPtr<MbContour>> contours{}; std::vector<MbPlacement3D> placements{}; for (auto section : sections) { if (section.get() == nullptr) { continue; } auto curves = section->getAllMainCurves(); SPtr<MbContour> contour{}; while (curves.size() != 0) { contour = constructContinuousContour(curves, thickness != 0); if (contour != nullptr) { break; } } if (curves.size() != 0) { // todo: вывести информацию что в эскизе более одного контура } if (contour == nullptr) { // todo: вывести информацию что в эскизе нет замкнутых контуров } else { auto placement = MbPlacement3D { section->xAxis, section->yAxis, section->origin, }; contours.push_back(contour); placements.push_back(placement); } } if (contours.size() == 0) { return; } MbLoftedSolidParams params = MbLoftedSolidParams( placements, contours, nullptr, // todo values, nullptr, // todo nullptr, // todo names, cNames ); if (auto code = ::LoftedSolid( params, solid ); code != rt_Success) { return; } } std::string_view data::Loft::iconName() const { return "tool_loft"; }