22 m_secondRadius(radius2),
55 double startAngle_rad = 0.0;
56 const double endAngle_rad =
M_PI / 2.0;
65 assert(startAngle_rad < endAngle_rad);
69 double angleStep_rad = 2.0 *
M_PI / steps;
70 unsigned sectionSteps =
static_cast<unsigned>(
ceil(
72 double sectionAngleStep_rad =
73 (endAngle_rad - startAngle_rad) / sectionSteps;
76 unsigned vertCount = steps * sectionSteps + 1;
78 unsigned faceCount = steps * ((sectionSteps - 1) * 2 + 1);
80 if (!
init(vertCount,
true, faceCount, 0)) {
95 for (
unsigned j = 1; j <= sectionSteps; ++j) {
98 j * sectionAngleStep_rad);
104 for (
unsigned i = 0; i < steps;
136 for (
unsigned i = 0; i < steps; ++i) {
138 unsigned B = (i + 1 < steps ? A + 1 : 1);
144 for (
unsigned j = 1; j < sectionSteps; ++j) {
145 unsigned shift = 1 + (j - 1) * steps;
146 for (
unsigned i = 0; i < steps; ++i) {
147 unsigned A = shift + i;
148 unsigned B = (i + 1 < steps ? A + 1 : shift);
149 assert(B < vertCount);
163 assert(out.isOpen() && (out.openMode() & QIODevice::WriteOnly));
164 if (dataVersion < 21) {
172 QDataStream outStream(&out);
181 return std::max(
static_cast<short>(21),
194 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 normalize()
Sets vector norm to unity.
virtual ccGenericPrimitive * clone() const override
Clones primitive.
bool toFile_MeOnly(QFile &out, short dataVersion) const override
Save own object data.
PointCoordinateType m_baseRadius
Base radius.
virtual bool buildUp() override
Builds primitive.
ccDish(PointCoordinateType radius, PointCoordinateType height, PointCoordinateType radius2=0, const ccGLMatrix *transMat=0, QString name=QString("Dish"), unsigned precision=DEFAULT_DRAWING_PRECISION)
Default constructor.
PointCoordinateType m_secondRadius
Second radius.
short minimumFileVersion_MeOnly() const override
bool fromFile_MeOnly(QFile &in, short dataVersion, int flags, LoadedIDMap &oldToNewIDMap) override
Loads own object data.
PointCoordinateType m_height
Height.
Float version of ccGLMatrixTpl.
void showNormals(bool state) override
Sets normals visibility.
Generic primitive interface.
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()
void addTriangle(unsigned i1, unsigned i2, unsigned i3)
Adds a triangle to the mesh.
virtual QString getName() const
Returns object name.
A 3D cloud and its associated features (color, normals, scalar fields, etc.)
void addNorm(const CCVector3 &N)
Pushes a normal vector on stack (shortcut)
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.
MiniVec< float, N > ceil(const MiniVec< float, N > &a)