PhD student Sebastian Gmelin, Prof. Kristian Agger, Aarhus School of Architecture – Double curved surfaces became common practice in architectural design. While their digital creation is well supported through a wide range of computer software, crafting them remains a specialist task – expensive and laborious. Building information modeling (BIM) lifts computer drawings from being pure geometrical descriptions to a representation of real building objects. It will be researched to use the additional information supplied to create complex geometry within a certain range of parameters, given by a specific construction material or structural system. The result will not only be a geometrical shape but also a specific construction method or even a set of interacting forces. B-processor is an open-source BIM software, currently being developed by the Aarhus School of Architecture (Prof. Kristian Agger) and the Alexandra Institute (Michael Lassen). It creates a platform to develop modeling tools as described above and will form the base for the PhD thesis.
The first attempts to create curved objects in B-processor lead to the following conclusions:
Any curved object will need a series of input parameters usually called control vertices, control polygon or control mesh
This input is used to compute the curve from an algorithm
There is a desire to change the parameters after the curve was computed. This means the object should provide the flexibility to redraw itself once an input parameter changed.
It was discussed that this problem could be described more generally as a parametric object providing the following functionality and parameters:
The object is a group of elements: geometrical input, additional parameters, a script (i.e. the algorithm computing a curve) and the resulting geometry
The script would be run each time of the input parameters (geometrical or additional) is changed.
Rerunning the script recomputes the resulting geometry. In the case of B-processor this means to delete the previous result and redraw the geometry. It was discussed to only redraw local changes instead of the complete geometry but this will rather be a later optimization.
All element parts are organized within the object browser as children of the main geometry object, allowing the user easy access.
The geometry parameters of the object will be realized using the existing B-net functionality.
The attached scripts should be Java scripts to allow full functionality and access to all methods and properties. In a second step a scripting languages “B-script” could be implemented, allowing the creation of simple scripts.
The object should be set up very flexibly, i.e. an object should be allowed to create new objects or being the input for other objects (lofts, sweeps…)
In Eclipse, right-click on the main project folder and chose >team< … >update< in the context menu. This will upload changes other users made into your local code copy.
Start Cygwin shell, and direct to your workspace folder
c:
cd Users/[…]/workspace/build
run the batch build command “./build.sh clean dist”
In Eclipse, right/click on the main project folder and chose >refresh< in the context menu.
Chose >Project< in the main menu bar and >clean< the project
Right-click on the main project folder (or changed folder) and chose >team< … >commit< to commit your changes to the server copy of the code.
List<Vertex> vertices = new ArrayList(net.getVertices());
List<Edge> edges = new ArrayList(net.getEdges());
List<Vertex> orderPoints = new ArrayList();
List<Vertex> curvePoints = new LinkedList();
if (vertices.size()>=3) {
LinkedList<Edge> nEdges = new LinkedList();
nEdges = (LinkedList) order(edges);
// write into List
for (int i=0; i<nEdges.size(); i++) {
orderPoints.add(nEdges.get(i).from);
}
orderPoints.add(nEdges.get(nEdges.size()-1).to);
// make Spline go through endpoints
for (int i=0; i<=2; i++) {
orderPoints.add(orderPoints.get(orderPoints.size()-1));
orderPoints.add(0,orderPoints.get(0));
}
// create space object to draw new elements
Space result = Space.createUnion(UNRBSname); // calculate Uniform Nonrational Spline Curve
for (int i=3; i<= orderPoints.size()-2; i++) {
for (int t=0; t<subdiv; t++) {
curvePoints.add(unrbsCalc(orderPoints.subList(i-3, i+1),t/subdiv));
}
}
// draw Spline Curve
for (int i=1;i<curvePoints.size()-1;i++) {
result.add(new Edge(curvePoints.get(i-1),curvePoints.get(i)));
}