Saturday, May 24, 2014

geomoves

taken on May 23 at the Headlands state park, near Mackinaw City, MI.

Wednesday, April 23, 2014

Panel Unrolling

Unrolling panels from both knowledge patterns.

The second set (generated from second knowledge pattern) is unrolled at (i+1) to space them correctly.

Here's a comprehensive overview:

STEP1, gets curves from a multi-section surface.

let d1(roofudfcurve)
let i (integer)

i=0

for i while i <= curvenumber /2
{
d1 = CreateOrModifyTemplate("roofdesign|roofudfcurve",CURVES ,`Relations\Knowledge Pattern.1\roofudfcurve`   ,i)

d1.Line2  =  CONTEXT\Line.2
d1.Line5 = CONTEXT\Line.6
d1.Line3 = CONTEXT\Line.5
d1.Line4 = CONTEXT\Line.7
d1.Line1 = CONTEXT\Line.3
d1.Surface1 = CONTEXT\Fill.3
d1.curvenumber   = curvenumber  - 1
d1.curveposition   = (i*2)-1

EndModifyTemplate(d1)
d1.Name = "CRV" + ToString(i)
d1.Color =   ToString(200)+","+ToString(100)+",255"
}

STEP2, Generates intermediary curves.

let d1(roofudfcurve)
let i (integer)

i=0

for i while i <= curvenumber /2
{
d1 = CreateOrModifyTemplate("roofdesign|roofudfcurve",CURVES2 ,`Relations\Knowledge Pattern.3\roofudfcurve`   ,i)

d1.Line2  =  CONTEXT\Line.2
d1.Line5 = CONTEXT\Line.6
d1.Line3 = CONTEXT\Line.5
d1.Line4 = CONTEXT\Line.7
d1.Line1 = CONTEXT\Line.3
d1.Surface1 = CONTEXT\Fill.3
d1.curvenumber   = curvenumber  - 1
d1.curveposition   = (i*2)-2

EndModifyTemplate(d1)
d1.Name = "CRV" + ToString(i)
}

STEP3, Generates and unrolls first set of surfaces

let p1(roofudfsurf)
let i (integer)
let j (integer)
let cn (integer)
let sn (Integer)

let da (length)
let db (length)
let dc (length)
let la (length)
let lb (length)
let pa (length)
let pb (length)
let pc (length)
let angle (angle)
let cut (angle)

i = 1

da = D1
db = D2
dc = D3
la = L1
lb = L2
pa = P1
pb = P2
pc = P3
angle = L1A
cut = CUT1

cn = curvenumber
sn = surfnumber

for i while i <= cn/2
{
j=1
for j while j<=sn/2
{
p1=CreateOrModifyTemplate("roofdesign|roofudfsurf", SURF2   ,`Relations\Knowledge Pattern.4\roofudfsurf5` , (i-1)*sn+j) /*generates the panels*/

p1.CRV9= `Relations\Knowledge Pattern.3\roofudfcurve`    ->GetItem(i)
p1.CRV10= `Relations\Knowledge Pattern.1\roofudfcurve`    ->GetItem(i)
p1.surfposition = (j*2)-2
p1.surfnumber  = sn

p1.Line.17=`Relations\Knowledge Pattern.5\roofudfunroll` ->GetItem(i)
p1.Plane.7=UNROLL\Plane.3 /*needed for unfold*/
p1.CONSTRUCTION\D1 = da
p1.CONSTRUCTION\D2 = db
p1.CONSTRUCTION\D3 =dc
p1.CONSTRUCTION\P1 = pa
p1.CONSTRUCTION\P2 = pb
p1.CONSTRUCTION\P3 = pc
p1.CONSTRUCTION\L1 = la
p1.CONSTRUCTION\L2 = lb
p1.Point.4 =Attractors\Point.11
p1.Point3 =Attractors\Point.10
p1.Point2 = Attractors\Point.9
p1.Point1 = Attractors\Point.8
EndModifyTemplate(p1)
p1.Name= "panel." + ToString(i) +"."+ToString(j)
}
}

STEP4, Generates and unrolls second set of surfaces.

let p1(roofudfsurf)
let i (integer)
let j (integer)
let cn (integer) /*number of curves*/
let sn (Integer) /* number of surfaces*/

i = 1
cn = curvenumber
sn = surfnumber

for i while i <= cn/2
{
j=1
for j while j<=sn/2
{
p1=CreateOrModifyTemplate("roofdesign|roofudfsurf", SURF   ,`Relations\Knowledge Pattern.2\roofudfsurf` , (i-1)*sn+j) /*generates the panels*/

p1.CRV9= `Relations\Knowledge Pattern.1\roofudfcurve`    ->GetItem(i)
p1.CRV10= `Relations\Knowledge Pattern.3\roofudfcurve`    ->GetItem(i+1)

p1.surfposition = (j*2)-1
p1.surfnumber  = sn
p1.Line.17=`Relations\Knowledge Pattern.5\roofudfunroll` ->GetItem(i+1)
p1.Plane.7=UNROLL\Plane.3 /*needed for unfold*/
p1.Point.4 =Attractors\Point.11
p1.Point3 =Attractors\Point.10
p1.Point2 = Attractors\Point.9
p1.Point1 = Attractors\Point.8
EndModifyTemplate(p1)
p1.Name= "panel." + ToString((i-1)*sn+j)
}
}

Here is Knowledge Pattern.5 that the previous scripts are referencing:

let d1(roofudfunroll)
let i (integer)

i=0

for i while i <= curvenumber
{
d1 = CreateOrModifyTemplate("roofdesign|roofudfunroll",UNROLLCURVES ,`Relations\Knowledge Pattern.5\roofudfunroll`  ,i)
d1.Line.2  =  UNROLL\Line.323
d1.Line.1 =  UNROLL\Line.324
d1.curvenumber   = curvenumber  - 1
d1.curveposition   = i - 1
EndModifyTemplate(d1)
d1.Name = "UNROLL" + ToString(i)
}

Sunday, April 20, 2014

final progress 75%

Here is the first knowledge pattern script, used to call the variables from the UDF as well as instantiate the first set of surfaces in the running bond pattern.

let p1(roofudfsurf)
let i (integer)
let j (integer)
let cn (integer)
let sn (Integer)

let da (length)
let db (length)
let dc (length)
let la (length)
let lb (length)
let pa (length)
let pb (length)
let pc (length)
let angle (angle)
let cut (angle)

i = 1

da = D1
db = D2
dc = D3
la = L1
lb = L2
pa = P1
pb = P2
pc = P3
angle = L1A
cut = CUT1

cn = curvenumber
sn = surfnumber

for i while i <= cn/2
{
j=1
for j while j<=sn/2
{
p1=CreateOrModifyTemplate("roofdesign|roofudfsurf", SURF2   ,`Relations\Knowledge Pattern.4\roofudfsurf5` , (i-1)*sn+j) /*generates the panels*/
p1.CRV9= `Relations\Knowledge Pattern.3\roofudfcurve`    ->GetItem(i)
p1.CRV10= `Relations\Knowledge Pattern.1\roofudfcurve`    ->GetItem(i)

p1.surfposition = (j*2)-2
p1.surfnumber  = sn

p1.CONSTRUCTION\D1 = da
p1.CONSTRUCTION\D2 = db
p1.CONSTRUCTION\D3 =dc

p1.CONSTRUCTION\P1 = pa
p1.CONSTRUCTION\P2 = pb
p1.CONSTRUCTION\P3 = pc

p1.CONSTRUCTION\L1 = la
p1.CONSTRUCTION\L2 = lb

p1.Point.4 =Attractors\Point.11
p1.Point3 =Attractors\Point.10
p1.Point2 = Attractors\Point.9
p1.Point1 = Attractors\Point.8

EndModifyTemplate(p1)
p1.Name= "panel." + ToString((i-1)*sn+j)

}
}

Below is the script for the second set of surfaces.

let p1(roofudfsurf)
let i (integer)
let j (integer)
let cn (integer) /*number of curves*/
let sn (Integer) /* number of surfaces*/

i = 1
cn = curvenumber
sn = surfnumber

for i while i <= cn/2
{
j=1
for j while j<=sn/2
{
p1=CreateOrModifyTemplate("roofdesign|roofudfsurf", SURF   ,`Relations\Knowledge Pattern.2\roofudfsurf` , (i-1)*sn+j) /*generates the panels*/
p1.CRV9= `Relations\Knowledge Pattern.1\roofudfcurve`    ->GetItem(i)
p1.CRV10= `Relations\Knowledge Pattern.3\roofudfcurve`    ->GetItem(i+1)

p1.surfposition = (j*2)-1
p1.surfnumber  = sn

p1.Point.4 =Attractors\Point.11
p1.Point3 =Attractors\Point.10
p1.Point2 = Attractors\Point.9
p1.Point1 = Attractors\Point.8

EndModifyTemplate(p1)
p1.Name= "panel." + ToString((i-1)*sn+j)

}
}

______________________________________

Saturday, April 19, 2014

final progress 50%

Thanks to some help from Karl, we've almost figured out the alternating surface pattern.

Basically, we run three knowledgepatterns, one that establishes the first set of curves, one that establishes the alternating set, and then one to build the geometry at the appropriate spacing (which I'm still trying to understand). Here's the code for each.. so far:

This gives two lists of curves-- CURVES, and CURVES2. By understanding how these curves relate to each other, we can systematically determine where the surfaces will be instantiated.

The idea is to divide the alternating curves at alternating intervals, allowing for a custom population of surfaces. I may need to rebuild the surfaceUDF part in a more simple way, ie coming from 2 points rather than four. If this is the case, referring to sketch above, the geometry for panel A0 can be derived from CURVES//CRV5 -and- CURVES2//CRV5 @ their respective EVEN ratio. Continuing this logic, panel B0 can be derived from CURVES2//CRV5 -and- CURVES//CRV4 @ their respective ODD ratio. This is seen in the script as:

p1.surfposition = (j*2)-2
p1.surfposition = (j*2)-1

depending on which curves we're working on.

The surfaces are skipping one position, which is almost what we want. Either way, I will begin rebuilding the surfaceUDF file now...

more to come this evening.

Thursday, April 17, 2014

final progress 25%

This sketch demonstrates the aggregation logic and other conceptualizations of the project.

The base surface is 10,000 units in length and 672 units in height. In order to achieve the appropriate curve interval within this asymmetrical surface geometry, 3 additional support curves were placed at .25, .50, and .75 ratios longitudinally. Splines bridge the five support curves and are projected (via the Y-axis, NOT normal to the surface) onto the base surface. The ideal density, aesthetically speaking, is 14 curves.

The unit is constructed from four input points from which a series of offset planes are constructed. The surfaces are all triangular and can be unrolled without geometric issue, while also allowing highly flexible transformation. I'm working on driving all of these transformations through multiple different attractor points, and will see a complex gradation develop over the entire surface. Below is an example of the part's instantiation, plus a range of geometric transformations it may have.

Surface Population with self-same units.

'faked' running bond (by moving geometry along X manually).

Several densities of the self-same unit.

Sunday, March 30, 2014

assignment 09 +10 - knowledge patterns

This week's activity deploys a script that projects a line beginning and ended at a specific ratio (with respect to another curve) onto a surface according to that surface's normal. Not to be confused with a contour operation. By working inside Digital Project's Create Knowledge Pattern feature, we can automate operations such as this. Further iterations will look at deploying surface panels with parameters that allow for control over orientation, size, etc.

Here's a viewing screen concept rendering, made by adding a variable thickness multi-section surface along the projected curves. Below are parametric instances that have differing thickness multi-section curvatures.