50 std::unordered_map<std::string,
59 if (thisG4Volume->getSolid() !=
nullptr)
return thisG4Volume->getSolid();
65 auto sourceName = s->
getSystem() +
"/" + *copyOf;
67 if (sourceG4Volume->getSolid() !=
nullptr)
return sourceG4Volume->getSolid();
74 std::vector<std::string> cadParameters;
78 if (cadParameters.size() > 1) {
79 fileName = cadParameters[0];
80 if (!numeric_value(cadParameters[1], scale)) {
81 log->warning(
"G4CadSystemFactory: volume <", g4name,
82 "> has a non-numeric scale <", cadParameters[1],
">; using 1.0");
86 else if (cadParameters.size() == 1) {
87 double legacyScale = 1.0;
88 if (numeric_value(cadParameters[0], legacyScale)) { scale = legacyScale; }
89 else { fileName = cadParameters[0]; }
92 G4String g4filename = fileName;
95 std::string extension =
99 if (extension ==
"ply" || extension ==
"stl") {
100 auto mesh = CADMesh::TessellatedMesh::From(g4filename,
101 CADMesh::File::ASSIMP());
105 mesh->SetScale(CLHEP::mm * scale);
108 mesh->SetReverse(
false);
110 thisG4Volume->setSolid(mesh->GetSolid(),
log);
111 return thisG4Volume->getSolid();
115 log->warning(
"G4CadSystemFactory: file <", fileName,
116 "> has unsupported extension <", extension,
">");