use of org.bimserver.models.ifc2x3tc1.IfcRepresentation in project BIMserver by opensourceBIM.
the class GuidHighlighter method highlightGuids.
private void highlightGuids(IfcModelInterface model, Set<String> highlightedGuids) {
Set<IdEObject> newObjects = new HashSet<IdEObject>();
IfcColourRgb gray = Ifc2x3tc1Factory.eINSTANCE.createIfcColourRgb();
newObjects.add(gray);
gray.setRed(0.5f);
gray.setGreen(0.5f);
gray.setBlue(0.5f);
Set<IdEObject> toDelete = new HashSet<IdEObject>();
for (IdEObject object : model.getValues()) {
if (object instanceof IfcPresentationLayerAssignment) {
toDelete.add(object);
}
}
IfcPresentationLayerAssignment notSelectedLayer = Ifc2x3tc1Factory.eINSTANCE.createIfcPresentationLayerAssignment();
notSelectedLayer.setName("Not Selected");
notSelectedLayer.setIdentifier("Not Selected");
newObjects.add(notSelectedLayer);
IfcPresentationLayerAssignment selectedLayer = Ifc2x3tc1Factory.eINSTANCE.createIfcPresentationLayerAssignment();
selectedLayer.setName("Selected");
selectedLayer.setIdentifier("Selected");
newObjects.add(selectedLayer);
for (IdEObject idEObject : model.getValues()) {
if (idEObject instanceof IfcProduct) {
IfcProduct product = (IfcProduct) idEObject;
String guid = product.getGlobalId();
boolean hide = true;
if (guid != null) {
if (highlightedGuids.contains(guid)) {
hide = false;
}
}
if (hide) {
System.out.println("Hiding " + guid);
IfcProductRepresentation representation = product.getRepresentation();
if (representation != null) {
for (IfcRepresentation ifcRepresentation : representation.getRepresentations()) {
notSelectedLayer.getAssignedItems().add(ifcRepresentation);
for (IfcRepresentationItem ifcRepresentationItem : ifcRepresentation.getItems()) {
notSelectedLayer.getAssignedItems().add(ifcRepresentationItem);
for (IfcStyledItem ifcStyledItem : ifcRepresentationItem.getStyledByItem()) {
for (IfcPresentationStyleAssignment ifcPresentationStyleAssignment : ifcStyledItem.getStyles()) {
for (IfcPresentationStyleSelect ifcPresentationStyleSelect : ifcPresentationStyleAssignment.getStyles()) {
if (ifcPresentationStyleSelect instanceof IfcSurfaceStyle) {
IfcSurfaceStyle ifcSurfaceStyle = (IfcSurfaceStyle) ifcPresentationStyleSelect;
for (IfcSurfaceStyleElementSelect ifcSurfaceStyleElementSelect : ifcSurfaceStyle.getStyles()) {
if (ifcSurfaceStyleElementSelect instanceof IfcSurfaceStyleRendering) {
IfcSurfaceStyleRendering ifcSurfaceStyleRendering = (IfcSurfaceStyleRendering) ifcSurfaceStyleElementSelect;
ifcSurfaceStyleRendering.setTransparency(0.98f);
ifcSurfaceStyleRendering.setDiffuseColour(gray);
ifcSurfaceStyleRendering.setReflectionColour(gray);
ifcSurfaceStyleRendering.setSpecularColour(gray);
ifcSurfaceStyleRendering.setSurfaceColour(gray);
ifcSurfaceStyleRendering.setTransmissionColour(gray);
}
}
}
}
}
}
}
}
}
} else {
System.out.println("Not hiding " + guid);
IfcProductRepresentation representation = product.getRepresentation();
if (representation != null) {
for (IfcRepresentation ifcRepresentation : representation.getRepresentations()) {
selectedLayer.getAssignedItems().add(ifcRepresentation);
for (IfcRepresentationItem ifcRepresentationItem : ifcRepresentation.getItems()) {
selectedLayer.getAssignedItems().add(ifcRepresentationItem);
}
}
}
}
}
}
for (IdEObject toDeleteObject : toDelete) {
model.remove(toDeleteObject);
}
for (IdEObject newObject : newObjects) {
try {
model.add(model.getHighestOid() + 1, newObject);
} catch (IfcModelInterfaceException e) {
e.printStackTrace();
}
}
}
use of org.bimserver.models.ifc2x3tc1.IfcRepresentation in project BIMserver by opensourceBIM.
the class AddFurniture method main.
public static void main(String[] args) {
try {
PluginManager pluginManager = LocalDevPluginLoader.createPluginManager(Paths.get("home"));
DeserializerPlugin deserializerPlugin = pluginManager.getFirstDeserializer("ifc", Schema.IFC2X3TC1, true);
Deserializer deserializer = deserializerPlugin.createDeserializer(null);
deserializer.init(pluginManager.getMetaDataManager().getPackageMetaData("ifc2x3tc1"));
IfcModelInterface model = DeserializerUtils.readFromFile(deserializer, Paths.get("../TestData/data/AC9R1-Haus-G-H-Ver2-2x3.ifc"));
deserializer = deserializerPlugin.createDeserializer(null);
deserializer.init(pluginManager.getMetaDataManager().getPackageMetaData("ifc2x3tc1"));
IfcModelInterface furnishingModel = DeserializerUtils.readFromFile(deserializer, Paths.get("test.ifc"));
model.fixOids(new IncrementingOidProvider());
long oid = model.getHighestOid();
IncrementingOidProvider oidProvider = new IncrementingOidProvider(oid + 1);
IfcFurnishingElement picknick = (IfcFurnishingElement) furnishingModel.getByName(Ifc2x3tc1Package.eINSTANCE.getIfcFurnishingElement(), "Picknik Bank");
ModelHelper modelHelper = new ModelHelper(pluginManager.getMetaDataManager(), model);
IfcProductDefinitionShape representation = (IfcProductDefinitionShape) picknick.getRepresentation();
IfcRepresentation surfaceModel = null;
IfcRepresentation boundingBox = null;
for (IfcRepresentation ifcRepresentation : representation.getRepresentations()) {
IfcShapeRepresentation ifcShapeRepresentation = (IfcShapeRepresentation) ifcRepresentation;
if (ifcShapeRepresentation.getRepresentationType().equals("SurfaceModel")) {
surfaceModel = (IfcRepresentation) modelHelper.copy(ifcShapeRepresentation, false);
} else if (ifcShapeRepresentation.getRepresentationType().equals("BoundingBox")) {
boundingBox = (IfcRepresentation) modelHelper.copy(ifcShapeRepresentation, false);
}
}
IfcOwnerHistory ownerHistory = null;
List<IfcOwnerHistory> all = model.getAll(IfcOwnerHistory.class);
if (all.size() > 0) {
ownerHistory = all.get(0);
}
for (IfcBuildingStorey ifcBuildingStorey : model.getAll(IfcBuildingStorey.class)) {
for (IfcRelDecomposes ifcRelDecomposes : ifcBuildingStorey.getIsDecomposedBy()) {
for (IfcObjectDefinition ifcObjectDefinition : ifcRelDecomposes.getRelatedObjects()) {
if (ifcObjectDefinition instanceof IfcSpace) {
IfcSpace ifcSpace = (IfcSpace) ifcObjectDefinition;
// IfcProductDefinitionShape slabRepr = (IfcProductDefinitionShape) ifcSpace.getRepresentation();
// IfcBoundingBox box = null;
// for (IfcRepresentation representation2 : slabRepr.getRepresentations()) {
// IfcShapeRepresentation shapeRepresentation = (IfcShapeRepresentation)representation2;
// if (shapeRepresentation.getRepresentationType().equals("BoundingBox")) {
// for (IfcRepresentationItem i2 : shapeRepresentation.getItems()) {
// box = (IfcBoundingBox)i2;
// }
// }
// }
IfcFurnishingElement newFurnishing = model.create(IfcFurnishingElement.class, oidProvider);
IfcRelContainedInSpatialStructure containedInSpatialStructure2 = model.create(IfcRelContainedInSpatialStructure.class, oidProvider);
containedInSpatialStructure2.setRelatingStructure(ifcBuildingStorey);
containedInSpatialStructure2.getRelatedElements().add(newFurnishing);
newFurnishing.setName("Generated");
newFurnishing.setGlobalId("TEST");
newFurnishing.setOwnerHistory(ownerHistory);
IfcProductDefinitionShape definitionShape = model.create(IfcProductDefinitionShape.class, oidProvider);
newFurnishing.setRepresentation(definitionShape);
definitionShape.getRepresentations().add(boundingBox);
definitionShape.getRepresentations().add(surfaceModel);
IfcLocalPlacement localPlacement = model.create(IfcLocalPlacement.class, oidProvider);
localPlacement.setPlacementRelTo(ifcSpace.getObjectPlacement());
IfcAxis2Placement3D axis2Placement3D = model.create(IfcAxis2Placement3D.class, oidProvider);
localPlacement.setRelativePlacement(axis2Placement3D);
IfcCartesianPoint pos = model.create(IfcCartesianPoint.class, oidProvider);
pos.getCoordinates().add(-3d);
pos.getCoordinates().add(+0.5d);
pos.getCoordinates().add(0d);
axis2Placement3D.setLocation(pos);
newFurnishing.setObjectPlacement(localPlacement);
}
}
}
}
model.resetExpressIds();
SerializerPlugin serializerPlugin = pluginManager.getSerializerPlugin("org.bimserver.ifc.step.serializer.IfcStepSerializerPlugin", true);
Serializer serializer = serializerPlugin.createSerializer(null);
serializer.init(model, null, true);
SerializerUtils.writeToFile(serializer, Paths.get("withfurn.ifc"));
} catch (PluginException e) {
e.printStackTrace();
} catch (DeserializeException e) {
e.printStackTrace();
} catch (IfcModelInterfaceException e) {
e.printStackTrace();
} catch (SerializerException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
use of org.bimserver.models.ifc2x3tc1.IfcRepresentation in project BIMserver by opensourceBIM.
the class ModelColorizer method setColor.
public void setColor(IfcProduct product, double[] color, float transparency) throws IfcModelInterfaceException {
if (!productToStyledItem.containsKey(product) || productToStyledItem.get(product).isEmpty()) {
// There is no style, let's construct a path to a new one
System.out.println("No style for " + product + " " + product.getGlobalId());
IfcProductRepresentation productRepresentation = product.getRepresentation();
if (product.getRepresentation() == null) {
productRepresentation = model.create(IfcProductRepresentation.class);
product.setRepresentation(productRepresentation);
}
IfcRepresentation representation = null;
if (productRepresentation.getRepresentations().isEmpty()) {
representation = model.create(IfcRepresentation.class);
productRepresentation.getRepresentations().add(representation);
} else {
representation = productRepresentation.getRepresentations().get(0);
}
IfcRepresentationItem representationItem = null;
if (representation.getItems().isEmpty()) {
representationItem = model.create(IfcRepresentationItem.class);
representation.getItems().add(representationItem);
} else {
representationItem = representation.getItems().get(0);
}
IfcStyledItem styledItem = model.create(IfcStyledItem.class);
representationItem.getStyledByItem().clear();
representationItem.getStyledByItem().add(styledItem);
createStyle(color, transparency, styledItem);
} else if (productToStyledItem.get(product).size() == 1) {
// There is one style, we can work with that
IfcStyledItem styledItem = productToStyledItem.get(product).iterator().next();
Set<IfcProduct> products = styledItemToProduct.get(styledItem);
if (products.isEmpty()) {
// That's weird, inconsistent with other map
} else if (products.size() == 1) {
// That's probably us, we can alter the Style safely
createStyle(color, transparency, styledItem);
} else {
// Multiple objects are using this style, we have to do some magic
}
} else {
// There are multiple styles, that's a bit much...
System.out.println(productToStyledItem.get(product).size() + " styles for " + product);
}
}
use of org.bimserver.models.ifc2x3tc1.IfcRepresentation in project BIMserver by opensourceBIM.
the class IfcTools2D method get2D.
public Area get2D(IfcProduct ifcProduct, double multiplierMillimeters) {
IfcObjectPlacement objectPlacement = ifcProduct.getObjectPlacement();
double[] productMatrix = placementToMatrix(objectPlacement);
// Matrix.dump(productMatrix);
IfcProductRepresentation representation = ifcProduct.getRepresentation();
if (representation == null) {
return null;
}
for (IfcRepresentation ifcRepresentation : representation.getRepresentations()) {
if ("Curve2D".equals(ifcRepresentation.getRepresentationType())) {
// Skip
} else {
if (ifcRepresentation instanceof IfcShapeRepresentation) {
IfcShapeRepresentation ifcShapeRepresentation = (IfcShapeRepresentation) ifcRepresentation;
for (IfcRepresentationItem ifcRepresentationItem : ifcShapeRepresentation.getItems()) {
Area area = getArea(multiplierMillimeters, productMatrix, ifcRepresentationItem);
if (area != null && area.getPathIterator(null).isDone()) {
return area;
}
}
}
}
}
// Fall back to 3D geometry projected from the top
GeometryInfo geometry = ifcProduct.getGeometry();
if (geometry != null) {
GeometryData geometryData = geometry.getData();
if (geometryData != null) {
int[] indices = GeometryUtils.toIntegerArray(geometryData.getIndices().getData());
float[] vertices = GeometryUtils.toFloatArray(geometryData.getVertices().getData());
double[] matrix = GeometryUtils.toDoubleArray(geometry.getTransformation());
Area area = new Area();
for (int i = 0; i < indices.length; i += 3) {
int index1 = indices[i + 0];
int index2 = indices[i + 1];
int index3 = indices[i + 2];
float[] a = new float[] { vertices[index1 * 3], vertices[index1 * 3 + 1], vertices[index1 * 3 + 2] };
float[] b = new float[] { vertices[index2 * 3], vertices[index2 * 3 + 1], vertices[index2 * 3 + 2] };
float[] c = new float[] { vertices[index3 * 3], vertices[index3 * 3 + 1], vertices[index3 * 3 + 2] };
float[][] points = new float[][] { a, b, c };
// if (similar(a[2], b[2], c[2])) {
boolean first = true;
Path2D.Float path = new Path2D.Float();
for (int j = 0; j < 3; j++) {
float[] point = points[j];
float[] res = new float[4];
Matrix.multiplyMV(res, 0, matrix, 0, new double[] { point[0], point[1], point[2], 1 }, 0);
float x = (float) (res[0] * multiplierMillimeters);
float y = (float) (res[1] * multiplierMillimeters);
if (first) {
path.moveTo(x, y);
first = false;
} else {
path.lineTo(x, y);
}
}
path.closePath();
area.add(new Area(path));
// }
}
return area;
}
} else {
LOGGER.info("No geometry generated for " + ifcProduct);
}
return null;
}
use of org.bimserver.models.ifc2x3tc1.IfcRepresentation in project BIMserver by opensourceBIM.
the class IfcUtils method dumpRepresentationInfo.
public static String dumpRepresentationInfo(IfcProduct ifcProduct) {
StringBuilder sb = new StringBuilder();
sb.append("Dumping representation info for " + ifcProduct.eClass().getName() + "\n");
IfcProductRepresentation representation = ifcProduct.getRepresentation();
for (IfcRepresentation ifcRepresentation : representation.getRepresentations()) {
sb.append("\t" + ifcRepresentation.eClass().getName() + "\n");
if (ifcRepresentation instanceof IfcShapeRepresentation) {
IfcShapeRepresentation ifcShapeRepresentation = (IfcShapeRepresentation) ifcRepresentation;
sb.append("\t\tRepresentationIdentifier: " + ifcShapeRepresentation.getRepresentationIdentifier() + "\n");
sb.append("\t\tRepresentationType: " + ifcShapeRepresentation.getRepresentationType() + "\n");
}
for (IfcRepresentationItem ifcRepresentationItem : ifcRepresentation.getItems()) {
sb.append("\t\t" + ifcRepresentationItem.eClass().getName() + "\n");
}
}
return sb.toString();
}
Aggregations