MCPcopy Create free account
hub / github.com/MeshInspector/MeshLib / primitiveToObject

Function primitiveToObject

source/MRMesh/MRFeatures.cpp:230–343  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

228}
229
230std::shared_ptr<FeatureObject> primitiveToObject( const Primitives::Variant& primitive, float infiniteExtent )
231{
232 return std::visit( overloaded{
233 []( const Primitives::Sphere& sphere ) -> std::shared_ptr<FeatureObject>
234 {
235 if ( sphere.radius == 0 )
236 {
237 auto newPoint = std::make_shared<PointObject>();
238 newPoint->setLocalPoint( sphere.center );
239 return newPoint;
240 }
241 else
242 {
243 auto newSphere = std::make_shared<SphereObject>();
244 newSphere->setCenter( sphere.center );
245 newSphere->setRadius( sphere.radius );
246 return newSphere;
247 }
248 },
249 [infiniteExtent]( const Primitives::Plane& plane ) -> std::shared_ptr<FeatureObject>
250 {
251 auto newPlane = std::make_shared<PlaneObject>();
252 newPlane->setCenter( plane.center );
253 newPlane->setNormal( plane.normal );
254 newPlane->setSize( infiniteExtent );
255 return newPlane;
256 },
257 [infiniteExtent]( const Primitives::ConeSegment& cone ) -> std::shared_ptr<FeatureObject>
258 {
259 if ( cone.isCircle() )
260 {
261 if ( cone.isZeroRadius() )
262 return primitiveToObject( cone.basePoint( false ), infiniteExtent ); // This isn't really valid, but let's support it.
263
264 auto newCircle = std::make_shared<CircleObject>();
265 newCircle->setCenter( cone.basePoint( false ).center );
266 newCircle->setNormal( cone.dir );
267 newCircle->setRadius( cone.positiveSideRadius );
268 return newCircle;
269 }
270
271 bool posFinite = std::isfinite( cone.positiveLength );
272 bool negFinite = std::isfinite( cone.negativeLength );
273
274 if ( cone.isZeroRadius() )
275 {
276 auto newLine = std::make_shared<LineObject>();
277 newLine->setDirection( cone.dir );
278
279 if ( posFinite == negFinite )
280 {
281 // Finite or fully infinite.
282 newLine->setCenter( cone.centerPoint().center );
283 newLine->setLength( posFinite ? cone.length() : infiniteExtent );
284 }
285 else
286 {
287 // Half-infinite.

Callers 1

addSubfeaturesFunction · 0.85

Calls 14

setSizeMethod · 0.80
isCircleMethod · 0.80
isZeroRadiusMethod · 0.80
basePointMethod · 0.80
centerPointMethod · 0.80
setHeightMethod · 0.80
setBaseRadiusMethod · 0.80
setLocalPointMethod · 0.45
setCenterMethod · 0.45
setRadiusMethod · 0.45
setNormalMethod · 0.45
setDirectionMethod · 0.45

Tested by

no test coverage detected