// Copyright Epic Games, Inc. All Rights Reserved. #include "Commands/DNACalibSetVertexPositionsCommand.h" #include "DNACalibDNAReader.h" #include "DNACalibUtils.h" #include "FMemoryResource.h" #include "VecArray.h" #include "dnacalib/commands/SetVertexPositionsCommand.h" #include "dnacalib/dna/DNACalibDNAReader.h" class FDNACalibSetVertexPositionsCommand::Impl { public: Impl() : Command{new dnac::SetVertexPositionsCommand{FMemoryResource::Instance()}} { } void SetMeshIndex(uint16 MeshIndex) { Command->setMeshIndex(MeshIndex); } void SetPositions(TArrayView Positions) { UnpackedPositions.Assign(Positions); Command->setPositions(ViewOf(UnpackedPositions.Xs), ViewOf(UnpackedPositions.Ys), ViewOf(UnpackedPositions.Zs)); } void SetPositions(TArrayView Xs, TArrayView Ys, TArrayView Zs) { Command->setPositions(ViewOf(Xs), ViewOf(Ys), ViewOf(Zs)); } void SetMasks(TArrayView Masks) { Command->setMasks(ViewOf(Masks)); } void SetOperation(EDNACalibVectorOperation Operation) { Command->setOperation(static_cast(Operation)); } void Run(FDNACalibDNAReader* Output) { Command->run(static_cast(Output->Unwrap())); } private: TUniquePtr Command; FVecArray UnpackedPositions; }; FDNACalibSetVertexPositionsCommand::FDNACalibSetVertexPositionsCommand() : ImplPtr{new Impl{}} { } FDNACalibSetVertexPositionsCommand::FDNACalibSetVertexPositionsCommand(uint16 MeshIndex, TArrayView Positions, EDNACalibVectorOperation Operation) : ImplPtr{new Impl{}} { ImplPtr->SetMeshIndex(MeshIndex); ImplPtr->SetPositions(Positions); ImplPtr->SetOperation(Operation); } FDNACalibSetVertexPositionsCommand::FDNACalibSetVertexPositionsCommand(uint16 MeshIndex, TArrayView Xs, TArrayView Ys, TArrayView Zs, EDNACalibVectorOperation Operation) : ImplPtr{new Impl{}} { ImplPtr->SetMeshIndex(MeshIndex); ImplPtr->SetPositions(Xs, Ys, Zs); ImplPtr->SetOperation(Operation); } FDNACalibSetVertexPositionsCommand::FDNACalibSetVertexPositionsCommand(uint16 MeshIndex, TArrayView Positions, TArrayView Masks, EDNACalibVectorOperation Operation) : ImplPtr{new Impl{}} { ImplPtr->SetMeshIndex(MeshIndex); ImplPtr->SetPositions(Positions); ImplPtr->SetMasks(Masks); ImplPtr->SetOperation(Operation); } FDNACalibSetVertexPositionsCommand::FDNACalibSetVertexPositionsCommand(uint16 MeshIndex, TArrayView Xs, TArrayView Ys, TArrayView Zs, TArrayView Masks, EDNACalibVectorOperation Operation) : ImplPtr{new Impl{}} { ImplPtr->SetMeshIndex(MeshIndex); ImplPtr->SetPositions(Xs, Ys, Zs); ImplPtr->SetMasks(Masks); ImplPtr->SetOperation(Operation); } FDNACalibSetVertexPositionsCommand::~FDNACalibSetVertexPositionsCommand() = default; FDNACalibSetVertexPositionsCommand::FDNACalibSetVertexPositionsCommand(FDNACalibSetVertexPositionsCommand&&) = default; FDNACalibSetVertexPositionsCommand& FDNACalibSetVertexPositionsCommand::operator=(FDNACalibSetVertexPositionsCommand&&) = default; void FDNACalibSetVertexPositionsCommand::SetMeshIndex(uint16 MeshIndex) { ImplPtr->SetMeshIndex(MeshIndex); } void FDNACalibSetVertexPositionsCommand::SetPositions(TArrayView Positions) { ImplPtr->SetPositions(Positions); } void FDNACalibSetVertexPositionsCommand::SetPositions(TArrayView Xs, TArrayView Ys, TArrayView Zs) { ImplPtr->SetPositions(Xs, Ys, Zs); } void FDNACalibSetVertexPositionsCommand::SetMasks(TArrayView Masks) { ImplPtr->SetMasks(Masks); } void FDNACalibSetVertexPositionsCommand::SetOperation(EDNACalibVectorOperation Operation) { ImplPtr->SetOperation(Operation); } void FDNACalibSetVertexPositionsCommand::Run(FDNACalibDNAReader* Output) { ImplPtr->Run(Output); }