48 lines
1.3 KiB
C++
48 lines
1.3 KiB
C++
#pragma once
|
|
|
|
#include "lattice.hpp"
|
|
|
|
|
|
namespace hpr::csg
|
|
{
|
|
|
|
class Cell //: public csg::Shape
|
|
{
|
|
|
|
protected:
|
|
|
|
Lattice p_lattice;
|
|
|
|
public:
|
|
|
|
Cell() = delete;
|
|
|
|
Cell(const Lattice& lattice) :
|
|
p_lattice {lattice}
|
|
{}
|
|
|
|
Shape operator()(const vec3& size, const vec3& scale = {1, 1, 1}, const vec3& translation = {0, 0, 0}, const vec3& rotation = {0, 0, 0})
|
|
{
|
|
// scale should be equal for both of cell and lattice
|
|
|
|
/*Shape box = lattice.box();
|
|
box = box.translate(lattice.os1() * p_shift[0]);
|
|
box = box.translate(lattice.os2() * p_shift[1]);
|
|
box = box.translate(lattice.os3() * p_shift[2]);*/
|
|
Shape cellBox = csg::box({0, 0, 0}, scale);
|
|
vec3 dir = -cellBox.center();
|
|
cellBox = csg::translate(cellBox, dir);
|
|
cellBox = csg::rotate(cellBox, cellBox.center(), {1, 0, 0}, rotation[0]);
|
|
cellBox = csg::rotate(cellBox, cellBox.center(), {0, 1, 0}, rotation[1]);
|
|
cellBox = csg::rotate(cellBox, cellBox.center(), {0, 0, 1}, rotation[2]);
|
|
cellBox = csg::translate(cellBox, translation);
|
|
cellBox = csg::scale(cellBox, size);
|
|
|
|
Shape lattice = p_lattice(size, {90, 90, 90}, 1.1);
|
|
lattice = csg::translate(lattice, -size * 0.5);
|
|
|
|
return csg::cut(cellBox, lattice).tshape();
|
|
}
|
|
};
|
|
|
|
} |