| 133 | } |
| 134 | |
| 135 | static Mtl* FindOrCreateMaterial(MtlBaseLib* library, Interface* max_interface, int& slot, const IfcGeom::Material& material) { |
| 136 | Mtl* m = FindMaterialByName(library, material.name()); |
| 137 | if (m == 0) { |
| 138 | StdMat2* stdm = NewDefaultStdMat(); |
| 139 | const TimeValue t = -1; |
| 140 | if (material.hasDiffuse()) { |
| 141 | const double* diffuse = material.diffuse(); |
| 142 | stdm->SetDiffuse(Color(diffuse[0], diffuse[1], diffuse[2]),t); |
| 143 | } |
| 144 | if (material.hasSpecular()) { |
| 145 | const double* specular = material.specular(); |
| 146 | stdm->SetSpecular(Color(specular[0], specular[1], specular[2]),t); |
| 147 | } |
| 148 | if (material.hasSpecularity()) { |
| 149 | stdm->SetShininess((float)material.specularity(), t); |
| 150 | } |
| 151 | if (material.hasTransparency()) { |
| 152 | stdm->SetOpacity(1.0f - (float)material.transparency(), t); |
| 153 | } |
| 154 | m = stdm; |
| 155 | m->SetName(S(material.name())); |
| 156 | library->Add(m); |
| 157 | if (slot < NUM_MATERIAL_SLOTS) { |
| 158 | max_interface->PutMtlToMtlEditor(m,slot++); |
| 159 | } |
| 160 | } |
| 161 | return m; |
| 162 | } |
| 163 | |
| 164 | static Mtl* ComposeMultiMaterial(std::map<std::vector<std::string>, Mtl*>& multi_mats, MtlBaseLib* library, |
| 165 | Interface* max_interface, int& slot, const std::vector<IfcGeom::Material>& materials, |
no test coverage detected