use of org.bimserver.models.ifc2x3tc1.IfcTrimmedCurve in project BIMserver by opensourceBIM.
the class TestReadTrim 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.checkin(newProject.getOid(), "test", deserializer.getOid(), false, Flow.SYNC, new URL("https://github.com/opensourceBIM/TestFiles/raw/master/TestData/data/TST.ifc"));
// Refresh project info
newProject = bimServerClient.getServiceInterface().getProjectByPoid(newProject.getOid());
IfcModelInterface model = bimServerClient.getModel(newProject, newProject.getLastRevisionId(), true, false);
for (IfcTrimmedCurve ifcTrimmedCurve : model.getAllWithSubTypes(IfcTrimmedCurve.class)) {
for (IfcTrimmingSelect ifcTrimmingSelect : ifcTrimmedCurve.getTrim1()) {
if (ifcTrimmingSelect instanceof IfcParameterValue) {
IfcParameterValue ifcParameterValue = (IfcParameterValue) ifcTrimmingSelect;
System.out.println("Trim1: " + ifcParameterValue.getWrappedValue());
}
}
for (IfcTrimmingSelect ifcTrimmingSelect : ifcTrimmedCurve.getTrim2()) {
if (ifcTrimmingSelect instanceof IfcParameterValue) {
IfcParameterValue ifcParameterValue = (IfcParameterValue) ifcTrimmingSelect;
System.out.println("Trim2: " + ifcParameterValue.getWrappedValue());
}
}
}
} catch (Throwable e) {
e.printStackTrace();
if (e instanceof AssertionError) {
throw (AssertionError) e;
}
fail(e.getMessage());
}
}
use of org.bimserver.models.ifc2x3tc1.IfcTrimmedCurve in project BIMserver by opensourceBIM.
the class IfcTools2D method getArea.
private Area getArea(double multiplierMillimeters, double[] productMatrix, IfcRepresentationItem ifcRepresentationItem) {
if (ifcRepresentationItem instanceof IfcExtrudedAreaSolid) {
IfcExtrudedAreaSolid ifcExtrudedAreaSolid = (IfcExtrudedAreaSolid) ifcRepresentationItem;
IfcAxis2Placement3D position = ifcExtrudedAreaSolid.getPosition();
// 1 0 0 0 <- 3de argument
// 0 1 0 0 <- cross product van 2 en 3 (levert ortogonale vector op)
// 0 0 1 0 <- 2st argument
// 5 0 0 1 <- 1st argument
double[] matrix = placement3DToMatrix(position);
if (productMatrix != null) {
double[] rhs = matrix;
matrix = Matrix.identity();
Matrix.multiplyMM(matrix, 0, productMatrix, 0, rhs, 0);
}
IfcDirection extrudedDirection = ifcExtrudedAreaSolid.getExtrudedDirection();
// TODO do something with this
IfcProfileDef ifcProfileDef = ifcExtrudedAreaSolid.getSweptArea();
if (ifcProfileDef instanceof IfcArbitraryProfileDefWithVoids) {
IfcArbitraryProfileDefWithVoids ifcArbitraryProfileDefWithVoids = (IfcArbitraryProfileDefWithVoids) ifcProfileDef;
IfcCurve outerCurve = ifcArbitraryProfileDefWithVoids.getOuterCurve();
Path2D outerPath = null;
if (outerCurve instanceof IfcPolyline) {
outerPath = curveToPath(matrix, outerCurve, multiplierMillimeters);
} else {
storeUnimplemented(outerCurve);
}
if (outerPath != null) {
Area area = new Area(outerPath);
for (IfcCurve innerCurve : ifcArbitraryProfileDefWithVoids.getInnerCurves()) {
Path2D.Float innerPath = curveToPath(matrix, innerCurve, multiplierMillimeters);
if (innerPath != null) {
area.subtract(new Area(innerPath));
}
}
return area;
}
} else if (ifcProfileDef instanceof IfcArbitraryClosedProfileDef) {
IfcArbitraryClosedProfileDef ifcArbitraryClosedProfileDef = (IfcArbitraryClosedProfileDef) ifcProfileDef;
Path2D.Float path2d = new Path2D.Float();
IfcCurve outerCurve = ifcArbitraryClosedProfileDef.getOuterCurve();
boolean first = true;
if (outerCurve instanceof IfcPolyline) {
IfcPolyline ifcPolyline = (IfcPolyline) outerCurve;
double[] res = new double[4];
int i = 0;
for (IfcCartesianPoint cartesianPoint : ifcPolyline.getPoints()) {
EList<Double> coords = cartesianPoint.getCoordinates();
Matrix.multiplyMV(res, 0, matrix, 0, new double[] { coords.get(0), coords.get(1), 0, 1 }, 0);
if (first) {
path2d.moveTo(res[0] * multiplierMillimeters, res[1] * multiplierMillimeters);
first = false;
} else {
if (i > 1) {
}
path2d.lineTo(res[0] * multiplierMillimeters, res[1] * multiplierMillimeters);
}
i++;
}
path2d.closePath();
return new Area(path2d);
} else if (outerCurve instanceof IfcCompositeCurve) {
IfcCompositeCurve ifcCompositeCurve = (IfcCompositeCurve) outerCurve;
for (IfcCompositeCurveSegment ifcCompositeCurveSegment : ifcCompositeCurve.getSegments()) {
IfcCurve curve = ifcCompositeCurveSegment.getParentCurve();
if (curve instanceof IfcPolyline) {
IfcPolyline ifcPolyline = (IfcPolyline) curve;
double[] res = new double[4];
for (IfcCartesianPoint cartesianPoint : ifcPolyline.getPoints()) {
EList<Double> coords = cartesianPoint.getCoordinates();
Matrix.multiplyMV(res, 0, matrix, 0, new double[] { coords.get(0), coords.get(1), 0, 1 }, 0);
if (first) {
path2d.moveTo(res[0] * multiplierMillimeters, res[1] * multiplierMillimeters);
first = false;
} else {
path2d.lineTo(res[0] * multiplierMillimeters, res[1] * multiplierMillimeters);
}
}
} else if (curve instanceof IfcTrimmedCurve) {
storeUnimplemented(curve);
} else {
storeUnimplemented(curve);
}
}
try {
path2d.closePath();
return new Area(path2d);
} catch (Exception e) {
//
}
}
} else if (ifcProfileDef instanceof IfcRectangleProfileDef) {
IfcRectangleProfileDef ifcRectangleProfileDef = (IfcRectangleProfileDef) ifcProfileDef;
double[] min = new double[] { ifcRectangleProfileDef.getPosition().getLocation().getCoordinates().get(0) - ifcRectangleProfileDef.getXDim() / 2, ifcRectangleProfileDef.getPosition().getLocation().getCoordinates().get(1) - ifcRectangleProfileDef.getYDim() / 2, 0, 1 };
double[] max = new double[] { ifcRectangleProfileDef.getPosition().getLocation().getCoordinates().get(0) + ifcRectangleProfileDef.getXDim() / 2, ifcRectangleProfileDef.getPosition().getLocation().getCoordinates().get(1) + ifcRectangleProfileDef.getYDim() / 2, 0, 1 };
Cube cube = new Cube(min, max);
cube.transform(matrix);
double[] transformedMin = cube.getMin();
double[] transformedMax = cube.getMax();
Path2D.Float path2d = new Path2D.Float();
path2d.moveTo(transformedMin[0] * multiplierMillimeters, transformedMin[1] * multiplierMillimeters);
path2d.lineTo(transformedMax[0] * multiplierMillimeters, transformedMin[1] * multiplierMillimeters);
path2d.lineTo(transformedMax[0] * multiplierMillimeters, transformedMax[1] * multiplierMillimeters);
path2d.lineTo(transformedMin[0] * multiplierMillimeters, transformedMax[1] * multiplierMillimeters);
path2d.lineTo(transformedMin[0] * multiplierMillimeters, transformedMin[1] * multiplierMillimeters);
path2d.closePath();
return new Area(path2d);
} else {
storeUnimplemented(ifcProfileDef);
}
} else if (ifcRepresentationItem instanceof IfcPolyline) {
IfcPolyline ifcPolyline = (IfcPolyline) ifcRepresentationItem;
double[] res = new double[4];
Path2D.Float path2d = new Path2D.Float();
boolean first = true;
for (IfcCartesianPoint cartesianPoint : ifcPolyline.getPoints()) {
EList<Double> coords = cartesianPoint.getCoordinates();
Matrix.multiplyMV(res, 0, productMatrix, 0, new double[] { coords.get(0), coords.get(1), 0, 1 }, 0);
if (first) {
path2d.moveTo(res[0] * multiplierMillimeters, res[1] * multiplierMillimeters);
first = false;
} else {
path2d.lineTo(res[0] * multiplierMillimeters, res[1] * multiplierMillimeters);
}
}
path2d.closePath();
return new Area(path2d);
} else {
storeUnimplemented(ifcRepresentationItem);
}
return null;
}
Aggregations