/
Team8
/
kittycad
Обзор
Документация
Войти
/
Team8
/
kittycad
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/data/solids/radial_array.cpp
82 строки
2 KB
levovix
fix: simplified thread displaying for dependant objects
09 янв 2026, 23:44
09 янв 2026, 23:44
0008553
Код
Авторство
О чём код?
#include "./radial_array.h" #include <solid.h> #include <mesh.h> #include <collection.h> #include <model.h> #include <cur_polyline.h> #include <cur_polyline3d.h> #include <action_curve.h> #include <action_solid.h> #include <vsn_scenesegment.h> #include <vsn_scenecontent.h> #include <vsn_geometryfactory.h> #include "data/document.h" #include "graphics/drawable.h" using namespace VSN; using namespace c3d; void data::SolidRadialArray::buildSolid() { assert(m_propertyChanged || m_dependencyChanged); solid = nullptr; // duplication solid cannot be update via creators drawables = {}; m_propertyChanged = false; m_dependencyChanged = false; markVisualChanged(); if (targetSolid == nullptr || targetSolid->solid == nullptr) { return; } if (copyCount < 1 || copyCount > 100) { return; } Point3 center = targetSolid->solid->GetCube().Centre(); Mat3 rot; rot.Move(-axisOrigin); rot.RotateAbout(axis, (double)M_PI2 / copyCount); rot.Move(axisOrigin); Mat3 scaleTr; scaleTr.Move(-center); scaleTr.Scale(scaleMultiplier.x, scaleMultiplier.y, scaleMultiplier.z); scaleTr.Move(center); Mat3 lastMat; Mat3 lastScale; std::vector<Mat3> matrices; for (int i = 0; i < copyCount; ++i) { Mat3 mat = lastScale; mat.Transform(lastMat); matrices.push_back(mat); lastMat.Transform(rot); lastScale.Transform(scaleTr); for (const auto& d : targetSolid->drawables) { auto newD = d->clone(); newD->transform.Transform(matrices.back()); drawables.push_back(newD); } } MbDuplicationSolidParams params{ DPtr<DuplicationValues>(new DuplicationMatrixValues{matrices}) }; auto names = MbSNameMaker(ct_ElementarySolid, MbSNameMaker::i_SideNone, 0); auto cNames = PArray<MbSNameMaker>(0, 1, false); if (auto code = ::DuplicationSolid( *targetSolid->solid, params, solid ); code != rt_Success) { return; } } std::string_view data::SolidRadialArray::iconName() const { return "tool_radial_array"; }