Changeset 1045 for cpp/frams/_demos/geometry
- Timestamp:
- 12/11/20 20:23:42 (4 years ago)
- Location:
- cpp/frams/_demos/geometry
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
cpp/frams/_demos/geometry/apices_test.cpp
r534 r1045 14 14 Model resultModel; 15 15 resultModel.open(); 16 Geometry TestUtils::addAnchorToModel(resultModel);16 GeometryUtils::addAnchorToModel(resultModel); 17 17 18 18 // Creating instance of Iterator class (MeshBuilder::ModelApices in this case). Object is … … 31 31 // Processing points created by iterator. In this case, they are added to result model as 32 32 // small spheres. 33 Geometry TestUtils::addPointToModel(point, resultModel);33 GeometryUtils::addPointToModel(point, resultModel); 34 34 } 35 35 -
cpp/frams/_demos/geometry/geometrytestutils.cpp
r999 r1045 4 4 5 5 #include "geometrytestutils.h" 6 7 6 #include "../genotypeloader.h" 8 7 #include "frams/genetics/preconfigured.h" 9 8 #include <common/virtfile/stdiofile.h> 10 9 #include <common/loggers/loggertostdout.h> 10 #include <frams/model/geometry/geometryutils.h> 11 11 #include <math.h> 12 12 #include <stdio.h> … … 99 99 100 100 Part *part = model.addNewPart(Part::Shape(shape)); 101 Geometry TestUtils::randomizePositionScaleAndOrient(part);101 GeometryUtils::randomizePositionScaleAndOrient(part); 102 102 103 103 model.close(); … … 233 233 } 234 234 235 void GeometryTestUtils::addAnchorToModel(Model &model)236 {237 Part *part = model.addNewPart(Part::SHAPE_ELLIPSOID);238 239 part->p = Pt3D(0);240 part->scale = Pt3D(0.1);241 part->vcolor = Pt3D(1.0, 0.0, 1.0);242 243 addAxesToModel(Pt3D(0.5), Orient(Orient_1), Pt3D(0.0), model);244 }245 246 void GeometryTestUtils::addPointToModel(const Pt3D &markerLocation, Model &model)247 {248 Part *anchor = model.getPart(0);249 Part *part = model.addNewPart(Part::SHAPE_ELLIPSOID);250 251 part->p = Pt3D(markerLocation);252 part->scale = Pt3D(0.05);253 part->vcolor = Pt3D(1.0, 1.0, 0.0);254 255 model.addNewJoint(anchor, part, Joint::SHAPE_FIXED);256 }257 258 void GeometryTestUtils::addAxesToModel(const Pt3D &sizes, const Orient &axes, const Pt3D ¢er,259 Model &model)260 {261 Part *anchor = model.getPart(0);262 Part *part;263 264 part = model.addNewPart(Part::SHAPE_CUBOID);265 part->scale = Pt3D(sizes.x, 0.05, 0.05);266 part->setOrient(axes);267 part->p = center;268 part->vcolor = Pt3D(1.0, 0.0, 0.0);269 model.addNewJoint(anchor, part, Joint::SHAPE_FIXED);270 271 part = model.addNewPart(Part::SHAPE_CUBOID);272 part->scale = Pt3D(0.05, sizes.y, 0.05);273 part->setOrient(axes);274 part->p = center;275 part->vcolor = Pt3D(0.0, 1.0, 0.0);276 model.addNewJoint(anchor, part, Joint::SHAPE_FIXED);277 278 part = model.addNewPart(Part::SHAPE_CUBOID);279 part->scale = Pt3D(0.05, 0.05, sizes.z);280 part->setOrient(axes);281 part->p = center;282 part->vcolor = Pt3D(0.0, 0.0, 1.0);283 model.addNewJoint(anchor, part, Joint::SHAPE_FIXED);284 }285 286 void GeometryTestUtils::mergeModels(Model &target, Model &source)287 {288 Part *targetAnchor = target.getPart(0);289 Part *sourceAnchor = source.getPart(0);290 291 target.moveElementsFrom(source);292 293 target.addNewJoint(targetAnchor, sourceAnchor, Joint::SHAPE_FIXED);294 }295 296 double frand(double from, double width)297 {298 return from + width * ((rand() % 10000) / 10000.0);299 }300 301 void GeometryTestUtils::randomizePositionScaleAndOrient(Part *part)302 {303 part->p = Pt3D(frand(1.5, 1.0), frand(1.5, 1.0), frand(1.5, 1.0));304 part->scale = Pt3D(frand(0.1, 0.9), frand(0.1, 0.9), frand(0.1, 0.9));305 part->setRot(Pt3D(frand(0.0, M_PI), frand(0.0, M_PI), frand(0.0, M_PI)));306 }307 308 235 void GeometryTestUtils::describePart(const Part *part, FILE *output) 309 236 { -
cpp/frams/_demos/geometry/geometrytestutils.h
r286 r1045 47 47 */ 48 48 int execute(const SString header, int argc, char *argv[], void (*test)(Model &, const double)); 49 50 /** 51 * @brief Adds anchor to the specified Model. 52 * @details An anchor has two functions. First is to provide Model consistency. Some functions in 53 * GeometryTestUtils namespace requires Model passed to them as an argument to contain at 54 * least one Part. All new Parts are bonded to the rest of Model using Joint connecting them 55 * with first Part of Model. Second is to provide reference which helps to understand Model 56 * position, scale and orientation. Anchor is built from four Parts: small sphere placed in 57 * global coordinate system origin and three cuboids visualising global coordinate system 58 * axes. 59 * @see addAxesToModel. 60 * @param[in] model Owner of Parts to be created. 61 */ 62 void addAnchorToModel(Model &model); 63 64 /** 65 * @brief Adds point marker to Model. 66 * @details Marker of point is a small sphere (radius = 0.05). 67 * @param[in] point Location of marker. 68 * @param[in] model Owner of Part to be created, must contain at least one part. 69 */ 70 void addPointToModel(const Pt3D &point, Model &model); 71 72 /** 73 * @brief Adds axes markers to Model. 74 * @details Axes markers are three streched (one of scales = 0.5, others = 0.05) and colored 75 * cuboids. Cuboid visualising OX axis is red, OY - green, and OZ - blue. 76 * @param[in] sizes Axes visual lengths. 77 * @param[in] axes Axes orientation, relatively to global coordinate system axes. 78 * @param[in] center Axes intersection point, relatively to global coordinate system origin. 79 * @param[in] model Owner of Parts to be created, must contain at least one part. 80 */ 81 void addAxesToModel(const Pt3D &sizes, const Orient &axes, const Pt3D ¢er, Model &model); 82 83 /** 84 * @brief Merges two Models. 85 * @details Moves all parts from source Model to target Model and - to provide Model 86 * consistency - creates Joint between firsts Parts of each of them. Each model must contain 87 * at least one Part. 88 * @param[in] target Target Model, must contain at least one part. 89 * @param[in] source Source Model, must contain at least one part. 90 */ 91 void mergeModels(Model &target, Model &source); 92 93 /** 94 * @brief Randomizes position, scale and rotations of Part. 95 * @details Sets coords of Part position to random values from range (1.5, 2.5), scales to 96 * random values from range (0.1, 1.0), and rotations around each axis to random values from 97 * range (0, M_PI). 98 * @param[in] part Part which position, scale and orient should be randomized. 99 */ 100 void randomizePositionScaleAndOrient(Part *part); 101 49 102 50 /** 103 51 * @brief Prints description of given Part to specified file. -
cpp/frams/_demos/geometry/info_test.cpp
r658 r1045 51 51 Model resultModel; 52 52 resultModel.open(); 53 Geometry TestUtils::addAnchorToModel(resultModel);53 GeometryUtils::addAnchorToModel(resultModel); 54 54 55 55 // Adding bounding markers of bounding box apices. … … 60 60 apex.y = Octants::isPositiveY(o) ? upperBoundary.y : lowerBoundary.y; 61 61 apex.z = Octants::isPositiveZ(o) ? upperBoundary.z : lowerBoundary.z; 62 Geometry TestUtils::addPointToModel(apex, resultModel);62 GeometryUtils::addPointToModel(apex, resultModel); 63 63 } 64 64 65 65 // Adding markers of axes (intersection of axes is in the center of bounding box). 66 66 Pt3D intersection = (lowerBoundary + upperBoundary) * 0.5; 67 Geometry TestUtils::addAxesToModel(sizes, axes, intersection, resultModel);67 GeometryUtils::addAxesToModel(sizes, axes, intersection, resultModel); 68 68 69 69 // Merging with original model. 70 Geometry TestUtils::mergeModels(resultModel, model);70 GeometryUtils::mergeModels(resultModel, model); 71 71 72 72 // Finishing result Model and printing its genotype. -
cpp/frams/_demos/geometry/surface_test.cpp
r534 r1045 4 4 5 5 #include "geometrytestutils.h" 6 #include <frams/model/geometry/geometryutils.h> 6 7 #include <frams/model/geometry/meshbuilder.h> 7 8 #include <frams/model/model.h> … … 14 15 Model resultModel; 15 16 resultModel.open(); 16 Geometry TestUtils::addAnchorToModel(resultModel);17 GeometryUtils::addAnchorToModel(resultModel); 17 18 18 19 // Creating instance of Iterator class (MeshBuilder::ModelSurface in this case). Object is … … 31 32 // Processing points created by iterator. In this case, they are added to result model as 32 33 // small spheres. 33 Geometry TestUtils::addPointToModel(point, resultModel);34 GeometryUtils::addPointToModel(point, resultModel); 34 35 } 35 36 -
cpp/frams/_demos/geometry/volume_test.cpp
r534 r1045 14 14 Model resultModel; 15 15 resultModel.open(); 16 Geometry TestUtils::addAnchorToModel(resultModel);16 GeometryUtils::addAnchorToModel(resultModel); 17 17 18 18 // Creating instance of Iterator class (MeshBuilder::ModelApices in this case). Object is … … 33 33 if (GeometryUtils::isPointInsideModel(point, model)) 34 34 { 35 Geometry TestUtils::addPointToModel(point, resultModel);35 GeometryUtils::addPointToModel(point, resultModel); 36 36 } 37 37 }
Note: See TracChangeset
for help on using the changeset viewer.