Monday, October 22, 2012

Now with content!

It turns out AMPL is definitely overkill for the majority of this project.  It may still be useful in the future to resolving conflicting elements when multiple content generation methods are working at once, but for now direct code will work better.  Having moved into C++ is was relatively simple to get test geometry distributing according to a user supplied configuration file.  Currently the program reads in a configuration file and library of elements and the produces a single composite OBJ file from instances of the elements following the rules in the configuration file.  My current visualization strategy is to drop it into Maya.  Example time!
These two facades were produced by altering the proportions of the bottom right door.  On the left the width is unconstrained, so it stays narrow and a second door fits.  On the right the door is locked to a 2:3 ration and the second door no longer fits.  Lets look at the file with the change in indicated:

GLobals:
    output test.obj
    width 10

    depth 3
    type facade
    floors 2 height 3
    style test
end
Floor 0:

    element door lockAspect
    element wall width .5
    element window width 2
    element wall
    element door lockAspect aspect .6666
    element wall
    element door
end
Floor 1:

    height 2
    element wall
    element window width
    element wall width 5
    element window width 
end
floor 2:

    element wall width 3
    element window
    element wall
    element window width 5
end


There are a few stability things going on here.  The global number of floors is overridden by the definition of another floor, later there should be tools for selecting which floors to use or repeat.  Floor 1 is overriding the global floor height just to prove that it works.  Additionally, each element can optionally set fixed width, height, aspect ratio  locked default aspect, etc.  All of those values have defaults and if left unset have logic to  adjust them to the building's needs.  Any elements that does not fit in the building width gets ignored and any leftover space gets filled with blank wall.

It is a personal goal to make as many arguments and constraints optional as possible to leave this system as flexible as possible.  Next up, filling in those awkward gaps around short elements and getting nonuniform scaling to that bigger elements don't have thicker frames (also maybe vertical alignment options).

No comments:

Post a Comment