Skip to content

Libs/Optimize/Constraints/FreeFormConstraint.h

Namespaces

Name
shapeworks
User usage reporting (telemetry)

Classes

Name
class shapeworks::FreeFormConstraint

Source code

```cpp

pragma once

include "Constraint.h"

include "Libs/Mesh/Mesh.h"

class vtkFloatArray;

namespace shapeworks {

class FreeFormConstraint : public Constraint { public: FreeFormConstraint() {}

void setMesh(std::shared_ptr mesh) { mesh_ = mesh; }

std::shared_ptr getMesh() { return mesh_; }

bool readyForOptimize() const;

bool isViolated(const Eigen::Vector3d& pt) const override;

void print() const override { std::cout << "FF" << std::endl; }

Eigen::Vector3d constraintGradient(const Eigen::Vector3d& pt) const override { return mesh_->getFFCGradient(pt); }

double constraintEval(const Eigen::Vector3d& pt) const override { return mesh_->getFFCValue(pt); }

void setDefinition(vtkSmartPointer polyData);

vtkSmartPointer getDefinition() { return definitionPolyData_; };

void applyToPolyData(vtkSmartPointer polyData);

std::vector>& boundaries();

Eigen::Vector3d getQueryPoint() { return queryPoint_; };

void setQueryPoint(Eigen::Vector3d queryPoint) { queryPoint_ = queryPoint; };

void computeBoundaries();

void setInoutPolyData(vtkSmartPointer polyData) { inoutPolyData_ = polyData; }

vtkSmartPointer getInoutPolyData() { return inoutPolyData_; };

void createInoutPolyData();

bool isSet();

void setPainted(bool painted);

void reset();

void computeGradientFields(std::shared_ptr mesh);

void convertLegacyFFC(vtkSmartPointer polyData);

private:

vtkSmartPointer computeInOutForFFCs(vtkSmartPointer polyData, Eigen::Vector3d query, vtkSmartPointer halfmesh);

std::vector setGradientFieldForFFCs(std::shared_ptr mesh, vtkSmartPointer absvalues, Eigen::MatrixXd V, Eigen::MatrixXi F);

vtkFloatArray getInOutScalars(); vtkFloatArray createFFCPaint(vtkSmartPointer polyData);

std::shared_ptr mesh_;

vtkSmartPointer definitionPolyData_; bool painted_ = false;

std::vector> boundaries_; Eigen::Vector3d queryPoint_; vtkSmartPointer inoutPolyData_; };

} // namespace shapeworks ```


Updated on 2026-03-31 at 16:02:11 +0000