@@ -1315,39 +1315,38 @@ void SimulatorBase::createEmitters()
13151315 ed->width = 1 ;
13161316 ed->type = 0 ;
13171317 }
1318- Matrix3r rot = AngleAxisr (ed->angle , ed->axis ).toRotationMatrix ();
1319- model->getEmitterSystem ()->addEmitter (
1320- ed->width , ed->height ,
1321- ed->x , rot,
1322- ed->velocity ,
1323- ed->type );
1324-
1325- // Generate boundary geometry around emitters
1326- Emitter *emitter = model->getEmitterSystem ()->getEmitters ().back ();
1327- BoundaryParameterObject *emitterBoundary = new BoundaryParameterObject ();
1328- emitterBoundary->dynamic = false ;
1329- emitterBoundary->isWall = false ;
1330- emitterBoundary->color = { 0 .2f , 0 .2f , 0 .2f , 1 .0f };
1331- emitterBoundary->axis = ed->axis ;
1332- emitterBoundary->angle = ed->angle ;
1333- const Real supportRadius = sim->getSupportRadius ();
1334- const Vector3r & emitDir = rot.col (0 );
1335- emitterBoundary->scale = Emitter::getSize (static_cast <Real>(ed->width ), static_cast <Real>(ed->height ), ed->type );
1336- const Vector3r pos = ed->x ;
1337- emitterBoundary->translation = pos;
1338- emitterBoundary->samplesFile = " " ;
1339- emitterBoundary->mapInvert = false ;
1340- emitterBoundary->mapResolution = Eigen::Matrix<unsigned int , 3 , 1 , Eigen::DontAlign>(20 , 20 , 20 );
1341- emitterBoundary->mapThickness = 0.0 ;
1342-
1343- if (sim->is2DSimulation ())
1344- emitterBoundary->scale [2 ] = 2 * supportRadius;
1345-
1346- if (ed->type == 0 )
1347- emitterBoundary->meshFile = FileSystem::normalizePath (getExePath () + " /resources/emitter_boundary/EmitterBox.obj" );
1348- else if (ed->type == 1 )
1349- emitterBoundary->meshFile = FileSystem::normalizePath (getExePath () + " /resources/emitter_boundary/EmitterCylinder.obj" );
1350- scene.boundaryModels .push_back (emitterBoundary);
1318+ Matrix3r rot = AngleAxisr (ed->angle , ed->axis .normalized ()).toRotationMatrix ();
1319+ model->getEmitterSystem ()->addEmitter (ed->width , ed->height , ed->x , rot, ed->velocity , ed->type ,
1320+ ed->useBoundary );
1321+
1322+ Emitter* emitter = model->getEmitterSystem ()->getEmitters ().back ();
1323+ if (ed->useBoundary ) {
1324+ // Generate boundary geometry around emitters
1325+ BoundaryParameterObject* emitterBoundary = new BoundaryParameterObject ();
1326+ emitterBoundary->dynamic = false ;
1327+ emitterBoundary->isWall = false ;
1328+ emitterBoundary->color = {0 .2f , 0 .2f , 0 .2f , 1 .0f };
1329+ emitterBoundary->axis = ed->axis ;
1330+ emitterBoundary->angle = ed->angle ;
1331+ const Real supportRadius = sim->getSupportRadius ();
1332+ const Vector3r& emitDir = rot.col (0 );
1333+ emitterBoundary->scale = Emitter::getSizeExtraMargin (static_cast <Real>(ed->width ), static_cast <Real>(ed->height ), ed->type );
1334+ const Vector3r pos = ed->x ;
1335+ emitterBoundary->translation = pos;
1336+ emitterBoundary->samplesFile = " " ;
1337+ emitterBoundary->mapInvert = false ;
1338+ emitterBoundary->mapResolution = Eigen::Matrix<unsigned int , 3 , 1 , Eigen::DontAlign>(20 , 20 , 20 );
1339+ emitterBoundary->mapThickness = 0.0 ;
1340+
1341+ if (sim->is2DSimulation ())
1342+ emitterBoundary->scale [2 ] = 2 * supportRadius;
1343+
1344+ if (ed->type == 0 )
1345+ emitterBoundary->meshFile = FileSystem::normalizePath (getExePath () + " /resources/emitter_boundary/EmitterBox.obj" );
1346+ else if (ed->type == 1 )
1347+ emitterBoundary->meshFile = FileSystem::normalizePath (getExePath () + " /resources/emitter_boundary/EmitterCylinder.obj" );
1348+ scene.boundaryModels .push_back (emitterBoundary);
1349+ }
13511350
13521351 // reuse particles if they are outside of a bounding box
13531352 bool emitterReuseParticles = false ;
0 commit comments