/
spivag
/
command_occ
Обзор
Документация
Войти
/
spivag
/
command_occ
Код
Запросы
1
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
initial
commands/io_command.h
126 строк
4 KB
spivag
Запрос на слияние 'c3d_sdk_removal' (
#2
) из c3d_sdk_removal в initial
16 апр 2026, 15:34
Верифицирован
16 апр 2026, 15:34
e04e876
Код
Авторство
О чём код?
/// @file io_command.h /// @brief Сохранение 3D-моделей в файлы обменных форматов и формат геометрического ядра. /// Проект c3d_engine /// @copyright (c) Alexander Spivakov 2025. #ifndef IO_COMMAND_H #define IO_COMMAND_H #include <memory> #include <TDocStd_Document.hxx> #include <TDF_Label.hxx> #include "command.h" #include "shape_command.h" #include <list> #include <vector> class CreateModelDocumentCommand; class CreateModelPartCommand; struct InstanceParameters; struct ModelPartInstance; class WriteToFileCommand : public ICommand { public: WriteToFileCommand( const std::string& fileName, std::shared_ptr< IShapeBuilder > const& itemToWrite ); WriteToFileCommand( const std::string& fileName, std::shared_ptr< CreateModelDocumentCommand > const& itemToWrite ); private: //std::shared_ptr< IConvertorProperty3D > m_exchangeSettigns{}; std::shared_ptr< IShapeBuilder > m_shapeImpl{}; std::shared_ptr< CreateModelDocumentCommand > m_documentImpl{}; //MbeConvResType m_executeResult{ cnv_Error }; std::string m_path{}; bool m_executed{ false }; }; class PartCreateParameters final { public: PartCreateParameters( std::vector< std::shared_ptr< IShapeBuilder > > const& shapes, const std::string& fileName, bool isAssembly ); PartCreateParameters( PartCreateParameters const& ) = default; PartCreateParameters& operator=( PartCreateParameters const& ) = default; [[nodiscard]] std::string FileName() const; [[nodiscard]] bool IsAssembly() const; [[nodiscard]] std::vector< std::shared_ptr< IShapeBuilder > > Shapes() const; private: std::vector< std::shared_ptr< IShapeBuilder > > m_shapes{}; std::string m_fileName{}; bool m_isAssembly{ false }; }; struct InstanceParameters { std::weak_ptr< CreateModelPartCommand > m_basePart{}; std::weak_ptr< CreateModelPartCommand > m_childPart{}; R3::Placement m_innerLocation{}; InstanceParameters() = delete; InstanceParameters( InstanceParameters const& ) = default; InstanceParameters( std::weak_ptr< CreateModelPartCommand > const& basePart, std::weak_ptr< CreateModelPartCommand > const& instancedPart, R3::Placement const& location ); }; class CreateModelDocumentCommand final : public ICommand { public: explicit CreateModelDocumentCommand( PartCreateParameters const& rootPartParameters ); [[nodiscard]] std::shared_ptr< CreateModelPartCommand > GetRootComponent() const; [[nodiscard]] std::shared_ptr< CreateModelPartCommand > CreatePart( PartCreateParameters const& rootPartParameters ); bool InstancePart( InstanceParameters const& partsRelation ); friend class CreateModelPartCommand; // For OpenCASCADE, we return the document handle but the actual shape creation is different Handle(TDocStd_Document)& GetModelDocument(); private: std::shared_ptr< Handle(TDocStd_Document) > m_modelDocument{}; std::shared_ptr< CreateModelPartCommand > m_rootComponent{}; std::list< InstanceParameters > m_partRelations{}; std::vector< std::shared_ptr< CreateModelPartCommand > > m_parts{}; }; class CreateModelPartCommand final { friend class CreateModelDocumentCommand; explicit CreateModelPartCommand( PartCreateParameters const& ); CreateModelPartCommand( PartCreateParameters const&, CreateModelDocumentCommand& ); void Run(); [[nodiscard]] std::string ExecutionMessage(); TopoDS_Shape PrepareInstance(); void InstanceModelPart( TopoDS_Shape const&, R3::Placement const& location ); bool IsModelComponentCreated() const; void Init(); void SetBasePart( std::weak_ptr< CreateModelPartCommand > const& parent ); void AddInstance( ModelPartInstance const& ); PartCreateParameters m_initialComponentParameters; R3::Placement m_locationFirstInstance{}; std::vector< ModelPartInstance > m_instances{}; CreateModelDocumentCommand* m_originDocument{}; std::weak_ptr< CreateModelPartCommand > m_basePart{}; TopoDS_Shape m_createdAssembly{}; TopoDS_Shape m_createdPart{}; }; struct ModelPartInstance { std::weak_ptr< CreateModelPartCommand > m_part; R3::Placement m_location{}; }; #endif