Clipboard.h
1 /************************************************************
2 * (C) Voxel Farm Inc. 2015
3 */
4 
5 #pragma once
6 
7 #include "mapindex.h"
8 #include "BlockData.h"
9 #include "VoxelLayer.h"
10 #include "Quaternion.h"
11 #include "StampMesh.h"
12 #include "MatrixAlg.h"
13 
14 namespace VoxelFarm
15 {
17  class IClipboard
18  {
19  public:
21  virtual void setSize(int sizeX, int sizeY, int sizeZ) = 0;
23  virtual void getSize(int& sizeX, int& sizeY, int& sizeZ) const = 0 ;
25  virtual void readVoxel(int x, int y, int z, Voxel& voxel) const = 0;
27  virtual void writeVoxel(int x, int y, int z, const Voxel& voxel) = 0;
28  };
29 
31  struct MaterialMesh
32  {
36  int material;
37  };
38 
40  typedef TVector<MaterialMesh*> MaterialMeshArray;
41 
44  {
45  public:
46  CCopyPasteMesh(MaterialMeshArray* instances, Algebra::Matrix transform);
47  virtual int getSolidCount();
48  virtual MaterialId getSolidMaterial(int solid);
49  virtual int getFaceCount(int solid);
50  virtual void getFace(int solid, int index, Algebra::Vector& v0, Algebra::Vector& v1, Algebra::Vector& v2);
51  private:
52  MaterialMeshArray* meshInstances;
53  Algebra::Matrix transformations;
54  };
55 
57  bool copyToClipboard(
59  IBlockData* blockData,
61  IClipboard* clipboard,
63  CellId c1, int x1, int y1, int z1,
65  CellId c2, int x2, int y2, int z2
66  );
67 
69  bool pasteFromClipboard(
71  IBlockData* blockData,
73  IClipboard* clipboard,
75  CellId c, int x, int y, int z,
77  TSet<CellId>* changedCells
78  );
79 
81  bool copyToClipboard(
83  IMeshStampSource* volumen,
85  IBlockData* blockData,
87  IClipboard* clipboard,
89  int vx, int vy, int vz,
91  int sizeX, int sizeY, int sizeZ
92  );
93 
95  bool pasteFromClipboard(
97  IBlockData* blockData,
99  IClipboard* clipboard,
101  double worldPos[3],
103  bool air,
105  Algebra::Matrix& transform,
107  TSet<CellId>* changedCells
108  );
109 
111  MaterialMeshArray getClipboardMesh(
113  IClipboard* clipboard,
115  bool air
116  );
117 
118  typedef enum ClipboardRotation_T
119  {
122  X_180,
123  X_270,
126  Y_180,
127  Y_270,
130  Z_180,
131  Z_270,
132  } ClipboardRotation;
133 
135  bool rotateClipboard(
137  const IClipboard* src,
139  IClipboard* dst,
141  ClipboardRotation rotation
142  );
143 
144  typedef enum ClipboardMirror_T
145  {
146  X,
147  Y,
148  Z,
149  } ClipboardMirror;
150 
152  bool mirrorClipboard(
154  const IClipboard* src,
156  IClipboard* dst,
158  ClipboardMirror mirror
159  );
160 
161 }
bool copyToClipboard(IBlockData *blockData, IClipboard *clipboard, CellId c1, int x1, int y1, int z1, CellId c2, int x2, int y2, int z2)
Copy voxels from block layer to clipboard.
Mesh collection for copy & paste.
Definition: Clipboard.h:43
virtual void writeVoxel(int x, int y, int z, const Voxel &voxel)=0
Writes one voxel to clipboard.
Contains all classes and functions for the VoxelFarm engine.
int material
Material for the mesh.
Definition: Clipboard.h:36
A 3D Vector.
Definition: Vector.h:34
Mirror on YZ/ZY plane...
Definition: Clipboard.h:147
virtual void setSize(int sizeX, int sizeY, int sizeZ)=0
Sets dimensions for clipboard data.
It allows to access to the faces and materials of a list of solids.
Definition: StampMesh.h:31
Rotations around X axis.
Definition: Clipboard.h:121
unsigned __int64 CellId
A 64bit integer that identifies a single world octree Cell.
Definition: mapindex.h:23
CFastQuadrics * mesh
A reference to a polygonal mesh.
Definition: Clipboard.h:34
Clipboard interface.
Definition: Clipboard.h:17
virtual void getFace(int solid, int index, Algebra::Vector &v0, Algebra::Vector &v1, Algebra::Vector &v2)
Get the vertices of a face of a solid.
virtual int getFaceCount(int solid)
Returns the number of faces in a solid.
Mirror on XZ/ZX plane...
Definition: Clipboard.h:148
ClipboardMirror_T
Definition: Clipboard.h:144
Rotations around Y axis.
Definition: Clipboard.h:125
virtual void readVoxel(int x, int y, int z, Voxel &voxel) const =0
Reads one voxel from clipboard.
A Matrix for 3D operations.
Definition: MatrixAlg.h:38
virtual void getSize(int &sizeX, int &sizeY, int &sizeZ) const =0
Gets dimensions for clipboard data.
bool mirrorClipboard(const IClipboard *src, IClipboard *dst, ClipboardMirror mirror)
Fill destination clipboard with a mirror version of source clipboard.
bool rotateClipboard(const IClipboard *src, IClipboard *dst, ClipboardRotation rotation)
Fill destination clipboard with a rotated version of source clipboard.
Rotations around Z axis.
Definition: Clipboard.h:129
An link between a polygonal mesh and a material.
Definition: Clipboard.h:31
TVector< MaterialMesh * > MaterialMeshArray
A list of MaterialMesh.
Definition: Clipboard.h:40
MaterialMeshArray getClipboardMesh(IClipboard *clipboard, bool air)
Generates a polygonal mesh from the clipboard for each material.
virtual int getSolidCount()
Returns the number of solids.
virtual MaterialId getSolidMaterial(int solid)
Returns the material of a solid.
ClipboardRotation_T
Definition: Clipboard.h:118
An efficient mesh representation that features Quadratic Error function simplification using a Multip...
Definition: FastQuadrics.h:44
bool pasteFromClipboard(IBlockData *blockData, IClipboard *clipboard, CellId c, int x, int y, int z, TSet< CellId > *changedCells)
Paste voxels from clipboard into block layer.