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