47 unsigned vertCount = steps + 1;
50 unsigned faceNormCounts = 1;
52 unsigned facesCount = steps;
55 if (!
init(vertCount,
false, facesCount, faceNormCounts)) {
76 for (
unsigned i = 0; i < steps; ++i) {
78 center.
y + sin(angle_rad_step * i) *
m_radius, center.
z);
86 for (
unsigned i = 0; i < steps; ++i) {
88 unsigned i3 = 1 + (i + 1) % steps;
110 assert(out.isOpen() && (out.openMode() & QIODevice::WriteOnly));
111 if (dataVersion < 57) {
121 QDataStream outStream(&out);
128 return std::max(
static_cast<short>(57),
140 if (dataVersion < 57) {
145 QDataStream inStream(&in);
Vector3Tpl< PointCoordinateType > CCVector3
Default 3D Vector.
float PointCoordinateType
Type of the coordinates of a (N-D) point.
static bool Error(const char *format,...)
Display an error dialog with formatted message.
void addElement(const Type &value)
ccDisc(PointCoordinateType radius, const ccGLMatrix *transMat=nullptr, QString name=QString("Disc"), unsigned precision=DEFAULT_DRAWING_PRECISION)
Default constructor.
ccBBox getOwnFitBB(ccGLMatrix &trans) override
Returns best-fit bounding-box (if available)
short minimumFileVersion_MeOnly() const override
bool toFile_MeOnly(QFile &out, short dataVersion) const override
Save own object data.
void setRadius(PointCoordinateType radius)
Sets radius.
bool fromFile_MeOnly(QFile &in, short dataVersion, int flags, LoadedIDMap &oldToNewIDMap) override
Loads own object data.
bool buildUp() override
Builds primitive.
PointCoordinateType m_radius
Radius.
ccGenericPrimitive * clone() const override
Clones primitive.
Float version of ccGLMatrixTpl.
virtual void showTriNorms(bool state)
Sets whether to show or not per-triangle normals.
Generic primitive interface.
void applyTransformationToVertices()
Applies associated transformation to vertices.
bool init(unsigned vertCount, bool vertNormals, unsigned faceCount, unsigned faceNormCount)
Inits internal structures.
virtual bool setDrawingPrecision(unsigned steps)
Sets drawing precision.
ccGenericPrimitive * finishCloneJob(ccGenericPrimitive *primitive) const
Finished 'clone' job (vertices color, etc.)
ccPointCloud * vertices()
Returns vertices.
unsigned m_drawPrecision
Drawing precision (for primitives that support this feature)
static const int MIN_DRAWING_PRECISION
Minimum drawing precision.
bool toFile_MeOnly(QFile &out, short dataVersion) const override
Save own object data.
bool fromFile_MeOnly(QFile &in, short dataVersion, int flags, LoadedIDMap &oldToNewIDMap) override
Loads own object data.
ccGLMatrix m_transformation
Associated transformation (applied to vertices)
short minimumFileVersion_MeOnly() const override
virtual void notifyGeometryUpdate()
NormsIndexesTableType * m_triNormals
Per-triangle normals.
void addTriangle(unsigned i1, unsigned i2, unsigned i3)
Adds a triangle to the mesh.
void addTriangleNormalIndexes(int i1, int i2, int i3)
Adds a triplet of normal indexes for next triangle.
triangleIndexesContainer * m_triVertIndexes
Triangles' vertices indexes (3 per triangle)
static CompressedNormType GetNormIndex(const PointCoordinateType N[])
Returns the compressed index corresponding to a normal vector.
virtual QString getName() const
Returns object name.
A 3D cloud and its associated features (color, normals, scalar fields, etc.)
QMultiMap< unsigned, unsigned > LoadedIDMap
Map of loaded unique IDs (old ID --> new ID)
static void CoordsFromDataStream(QDataStream &stream, int flags, PointCoordinateType *out, unsigned count=1)
void addPoint(const CCVector3 &P)
Adds a 3D point to the database.
unsigned int CompressedNormType
Compressed normals type.
bool LessThanEpsilon(float x)
Test a floating point number against our epsilon (a very small number).