use of org.bimserver.models.ifc2x3tc1.IfcMaterial in project BIMserver by opensourceBIM.
the class IfcUtils method getMaterial.
public static String getMaterial(IfcProduct ifcProduct) {
Set<IfcMaterial> materials = new HashSet<>();
for (IfcRelAssociates ifcRelAssociates : ifcProduct.getHasAssociations()) {
if (ifcRelAssociates instanceof IfcRelAssociatesMaterial) {
IfcRelAssociatesMaterial ifcRelAssociatesMaterial = (IfcRelAssociatesMaterial) ifcRelAssociates;
IfcMaterialSelect relatingMaterial = ifcRelAssociatesMaterial.getRelatingMaterial();
if (relatingMaterial instanceof IfcMaterial) {
materials.add((IfcMaterial) relatingMaterial);
} else if (relatingMaterial instanceof IfcMaterialLayerSetUsage) {
IfcMaterialLayerSetUsage ifcMaterialLayerSetUsage = (IfcMaterialLayerSetUsage) relatingMaterial;
IfcMaterialLayerSet forLayerSet = ifcMaterialLayerSetUsage.getForLayerSet();
for (IfcMaterialLayer ifcMaterialLayer : forLayerSet.getMaterialLayers()) {
IfcMaterial material = ifcMaterialLayer.getMaterial();
materials.add(material);
}
} else if (relatingMaterial instanceof IfcMaterialList) {
materials.addAll(((IfcMaterialList) relatingMaterial).getMaterials());
} else if (relatingMaterial instanceof IfcMaterialLayerSet) {
for (IfcMaterialLayer ifcMaterialLayer : ((IfcMaterialLayerSet) relatingMaterial).getMaterialLayers()) {
materials.add(ifcMaterialLayer.getMaterial());
}
} else {
throw new UnsupportedOperationException(relatingMaterial.toString());
}
}
}
Iterator<IfcMaterial> iterator = materials.iterator();
while (iterator.hasNext()) {
IfcMaterial next = iterator.next();
if (next == null || next.getName() == null) {
iterator.remove();
}
}
return Joiner.on(", ").join(materials.stream().map(new Function<IfcMaterial, String>() {
@Override
public String apply(IfcMaterial input) {
return input.getName();
}
}).iterator());
}
use of org.bimserver.models.ifc2x3tc1.IfcMaterial in project BIMserver by opensourceBIM.
the class TestGetMaterials method getMaterials.
public static Set<IfcMaterial> getMaterials(IfcProduct ifcProduct) {
Set<IfcMaterial> materials = new HashSet<>();
for (IfcRelAssociates ifcRelAssociates : ifcProduct.getHasAssociations()) {
if (ifcRelAssociates instanceof IfcRelAssociatesMaterial) {
IfcRelAssociatesMaterial ifcRelAssociatesMaterial = (IfcRelAssociatesMaterial) ifcRelAssociates;
IfcMaterialSelect relatingMaterial = ifcRelAssociatesMaterial.getRelatingMaterial();
// System.out.println(relatingMaterial);
if (relatingMaterial instanceof IfcMaterial) {
materials.add((IfcMaterial) relatingMaterial);
} else if (relatingMaterial instanceof IfcMaterialLayerSetUsage) {
IfcMaterialLayerSetUsage ifcMaterialLayerSetUsage = (IfcMaterialLayerSetUsage) relatingMaterial;
IfcMaterialLayerSet forLayerSet = ifcMaterialLayerSetUsage.getForLayerSet();
if (forLayerSet != null) {
for (IfcMaterialLayer ifcMaterialLayer : forLayerSet.getMaterialLayers()) {
IfcMaterial material = ifcMaterialLayer.getMaterial();
materials.add(material);
}
}
} else if (relatingMaterial instanceof IfcMaterialList) {
materials.addAll(((IfcMaterialList) relatingMaterial).getMaterials());
} else if (relatingMaterial instanceof IfcMaterialLayerSet) {
for (IfcMaterialLayer ifcMaterialLayer : ((IfcMaterialLayerSet) relatingMaterial).getMaterialLayers()) {
materials.add(ifcMaterialLayer.getMaterial());
}
} else {
throw new UnsupportedOperationException(relatingMaterial.toString());
}
}
}
Iterator<IfcMaterial> iterator = materials.iterator();
while (iterator.hasNext()) {
IfcMaterial next = iterator.next();
if (next == null || next.getName() == null) {
System.out.println(next.getOid());
iterator.remove();
}
}
if (materials.size() > 0) {
System.out.println(ifcProduct.eClass().getName() + ": " + Joiner.on(", ").join(materials));
}
return new HashSet<>(materials);
}
use of org.bimserver.models.ifc2x3tc1.IfcMaterial in project BIMserver by opensourceBIM.
the class TestGetMaterials method test.
@Test
public void test() {
try {
// Create a new BimServerClient with authentication
BimServerClientInterface bimServerClient = getFactory().create(new UsernamePasswordAuthenticationInfo("admin@bimserver.org", "admin"));
// Create a new project
SProject newProject = bimServerClient.getServiceInterface().addProject("test" + Math.random(), "ifc2x3tc1");
// Get the appropriate deserializer
SDeserializerPluginConfiguration deserializer = bimServerClient.getServiceInterface().getSuggestedDeserializerForExtension("ifc", newProject.getOid());
// Checkin the file
bimServerClient.checkinSync(newProject.getOid(), "test", deserializer.getOid(), false, new URL("https://github.com/opensourceBIM/TestFiles/raw/master/TestData/data/AC11-Institute-Var-2-IFC.ifc"));
// Refresh project info
newProject = bimServerClient.getServiceInterface().getProjectByPoid(newProject.getOid());
IfcModelInterface model = bimServerClient.getModel(newProject, newProject.getLastRevisionId(), false, false);
Query query = new Query(model.getPackageMetaData());
query.setDoubleBuffer(true);
QueryPart queryPart = query.createQueryPart();
queryPart.addType(new TypeDef(model.getPackageMetaData().getEClass("IfcProduct"), true));
Include include = queryPart.createInclude();
include.addType(model.getPackageMetaData().getEClass("IfcObjectDefinition"), true);
include.addField("HasAssociations");
include.addInclude("ifc2x3tc1-stdlib:IfcRelAssociatesMaterial");
JsonQueryObjectModelConverter converter = new JsonQueryObjectModelConverter(model.getPackageMetaData());
model.query(converter.toJson(query), true);
int nrMaterialsWithName = 0;
for (IfcProduct ifcProduct : model.getAllWithSubTypes(IfcProduct.class)) {
Set<IfcMaterial> materials = getMaterials(ifcProduct);
for (IfcMaterial ifcMaterial : materials) {
if (ifcMaterial.getName() != null) {
System.out.println(ifcMaterial.getName());
nrMaterialsWithName++;
}
}
}
Assert.assertEquals(416, nrMaterialsWithName);
} catch (Throwable e) {
e.printStackTrace();
if (e instanceof AssertionError) {
throw (AssertionError) e;
}
fail(e.getMessage());
}
}
Aggregations