Scriptedbypurpose

explicit and scripted processes within design

Nick Pisca

www.nickpisca.com

07_nickpisca_closeup.jpg

Nick Pisca received his BSAS from the University of Wisconsin Milwaukee School of Architecture and Urban Planning in 2003 and his Master of Architecture from the Southern California Institute ofArchitecture in 2006.  He had focused his academic research on 4Dcomputational design, working with a combination of emergent andevolutionary techniques in Rhinoscript, ActionScript and Maya MEL.His thesis, called Flesh[]logically.transparent++rand[$x], served as alaunch pad for his professorial career; he has conducted seminars andworkshops at SCIarc, UC-Santa Barbara, the Ohio State University,UW-Seattle, and various firms.  Hired in 2005 at Gehry Technologies,he became the company’s first Automation Consultant where heinvestigated automation for Building Information Technology and theparametric programs Digital Project and CATIA.  In 2007, he became theSenior Automation Consultant and currently undertakes variousscripting projects for large-scale architectural, contracting,fabrication, and research projects.  Pisca is the founder of 0001d andGenerative Omnibus, and he promotes WVO awareness and otherenvironmental causes.

Recursive Balcony Shade Project

01_nickpisca_finalproject.jpg

02_nickpisca_driversurface.jpg

03_nickpisca_patterning.jpg

04_nickpisca_materialspan.jpg

05_nickpisca_nodalconnect.jpg

06_nickpisca_interiorcond.jpg

Nick Pisca 2006Program & Renderings:  Digital ProjectScript Language:  Visual BasicPanelization & SimplificationThis project combines advanced parametric modeling techniques withscripted approaches for optimization of complex curvatures.  The goalwas to be able to take any blobby surface and rationalize it to a highpercentage of standard sized panels.   The algorithm would recursivelycycle thru the nurbs geometry until most of its surface area could bereplaced with equilateral triangle panels.  This particular iterationof the script [aka, the Balcony Project] allowed the construction ofthe project with 71% and 82% of the total material count withidentical Triangle Panels and Main Structural Dowels, respectively,even though its driving surface has extreme positive and negativeGaussian curvature.   These regularized panels can be mass producedand installed on site quickly; they are modeled to perform assolar-thermal heaters, translucent shades, or accommodate anytriangular-shaped assembly.  The remaining minority of irregularpanels and nodal connections are CNC milled and both areparametrically modeled to limit the amount of milling required forproduction.  They are designed for a simple 3-axis mill and areoriented to require only one-side of routing.  Their instantiationscan be accomplished via script or manual procedures.

nickpiscapanel1_balcony.jpgnickpiscapanel2_balcony.jpg

SCRIPT (Digital project):

Sub CATMain() ‘*********************** ‘*****  Triangle DeploymentCode ‘*****  Author:  Nick Pisca ‘*****  Status:  Working. In-Prog’*****  Requirements:  Digital Project V1R2 or newer, Catia BN 15′**********************************************************

Dim MyDocAs PartDocument: Dim MySel As Selection: Dim MyPart As Part: DimTheSPAWorkBench:  Set TheSPAWorkBench =CATIA.ActiveDocument.GetWorkbench(”SPAWorkbench”) Set MyDoc =CATIA.ActiveDocument: Set MyPart = MyDoc.Part: Set MySel =MyDoc.Selection: Dim MyHSFactory As HybridShapeFactory: SetMyHSFactory = MyPart.HybridShapeFactory: Dim MyHybridBodies AsHybridBodies: Set MyHybridBodies = MyPart.HybridBodies DimparameterList As Parameters: Set parameterList = MyPart.Parameters IfMySel.Count <> 0 Then     MySel.Clear End If Dim MajorSet AsHybridBody: Set MajorSet = MyHybridBodies.Add() MajorSet.Name =”Collection”: MySel.Add MajorSet MySel.VisProperties.SetShowcatVisPropertyNoShowAttr: MySel.Clear Dim FillSet As HybridBody: SetFillSet = MyHybridBodies.Add() FillSet.Name = “FillGeom” Dim StartLineAs HybridShape:Set StartLine=MyPart.FindObjectByName(”STARTLINE”) DimGenSurf As HybridShape: Set GenSurf =MyPart.FindObjectByName(”DRVSURF”) RecursTri StartLine/ End Sub SubRecursTri(StartLine As Variant) Dim MyDoc As PartDocument: Dim MySelAs Selection: Dim MyPart As Part: Dim TheSPAWorkBench:  SetTheSPAWorkBench = CATIA.ActiveDocument.GetWorkbench(”SPAWorkbench”)Set MyDoc = CATIA.ActiveDocument: Set MyPart = MyDoc.Part: Set MySel =MyDoc.Selection: Dim MyHSFactory As HybridShapeFactory: SetMyHSFactory = MyPart.HybridShapeFactory: Dim MyHybridBodies AsHybridBodies: Set MyHybridBodies = MyPart.HybridBodies DimparameterList As Parameters: Set parameterList = MyPart.Parameters DimaxisSystems1 As AxisSystems: Set axisSystems1 = MyPart.AxisSystems DimaxisSystem1 As AxisSystem: Set axisSystem1 =axisSystems1.Item(”Absolute Axis System”) Dim AxisRef As Reference:SetAxisRef= MyPart.CreateReferenceFromObject(axisSystem1) Dim MajorSet AsHybridBody: Set MajorSet = MyHybridBodies.Item(”Collection”) DimFillSet As HybridBody: Set FillSet = MyHybridBodies.Item(”FillGeom”)Dim StartLineRef As Reference Set StartLineRef =MyPart.CreateReferenceFromObject(StartLine) Dim GenSurfRef AsReference: Set GenSurfRef =MyPart.CreateReferenceFromObject(MyPart.FindObjectByName(”DRVSURF”))Dim NearPtRef As Reference: Set NearPtRef =MyPart.CreateReferenceFromObject(MyPart.FindObjectByName(”NEARPT”))Dim NearPt2Ref As Reference: Set NearPt2Ref =MyPart.CreateReferenceFromObject(MyPart.FindObjectByName(”NEARPT2″))Dim RadiusVal As Double: RadiusVal = 30 * 25.4 Dim LPt, RPt AsHybridShapePointOnCurve Set LPt =MyHSFactory.AddNewPointOnCurveFromPercent(StartLineRef, 1, True) SetRPt = MyHSFactory.AddNewPointOnCurveFromPercent(StartLineRef, 0, True)MajorSet.AppendHybridShape LPt: MajorSet.AppendHybridShape RPt DimLPtRef, RPtRef As Reference Set LPtRef =MyPart.CreateReferenceFromObject(LPt) Set RPtRef =MyPart.CreateReferenceFromObject(RPt) Dim LSphere, RSphere AsHybridShapeSphere Set LSphere = MyHSFactory.AddNewSphere(LPtRef,AxisRef, RadiusVal, 3, 3, 3, 3) Set RSphere =MyHSFactory.AddNewSphere(RPtRef, AxisRef, RadiusVal, 3, 3, 3, 3)LSphere.Limitation = 1: RSphere.Limitation = 1MajorSet.AppendHybridShape LSphere: MajorSet.AppendHybridShape RSphereDim LSphereRef, RSphereRef As Reference Set LSphereRef =MyPart.CreateReferenceFromObject(LSphere) Set RSphereRef =MyPart.CreateReferenceFromObject(RSphere) MyPart.UpdateObject LSphere:MyPart.UpdateObject RSphere Dim LCirc, RCirc AsHybridShapeIntersection Set LCirc =MyHSFactory.AddNewIntersection(LSphereRef, GenSurfRef) Set RCirc =MyHSFactory.AddNewIntersection(RSphereRef, GenSurfRef)MajorSet.AppendHybridShape LCirc: MajorSet.AppendHybridShape RCirc DimLCircRef, RCircRef As Reference Set LCircRef =MyPart.CreateReferenceFromObject(LCirc)Set RCircRef = MyPart.CreateReferenceFromObject(RCirc) Dim InterNearAs HybridShapeIntersection Set InterNear =MyHSFactory.AddNewIntersection(LCircRef, RCircRef) InterNear.PointType= 0 MajorSet.AppendHybridShape InterNear: SmartUpdate InterNear DimInterNearRef As Reference Set InterNearRef =MyPart.CreateReferenceFromObject(InterNear) Dim HSNear, HSNear2 AsHybridShapeNear Set HSNear = MyHSFactory.AddNewNear(InterNearRef,NearPtRef) Set HSNear2 = MyHSFactory.AddNewNear(InterNearRef,NearPt2Ref) MajorSet.AppendHybridShape HSNearMajorSet.AppendHybridShape HSNear2 SmartUpdate HSNear: SmartUpdateHSNear2: Dim OldFillRef As Reference Dim Coords: Dim Measurable: DimFillYes As HybridShapeFill Dim BackFillEdge, LFillEdge, RFillEdge AsHybridShapeFillEdge:tracking = 1 If FillSet.HybridShapes.Count <> 0Then     For XX = 1 To FillSet.HybridShapes.Count:        SetOldFillRef = MyPart.CreateReferenceFromObject(FillSet.HybridShapes.Item(XX))        Set Measurable = TheSPAWorkBench.GetMeasurable(OldFillRef)    MinimumDistance = Measurable.GetMinimumDistance(HSNear)         IfMinimumDistance < 10 * 25.4 Then             MySel.Add HSNear:MySel.Delete: tracking = 0:  Exit For         End If     Next XX EndIf If tracking = 1 Then     Dim LLine, RLine As HybridShapeLinePtPt Set LLine = MyHSFactory.AddNewLinePtPt(LPtRef, HSNear)     Set RLine= MyHSFactory.AddNewLinePtPt(RPtRef, HSNear)MajorSet.AppendHybridShape LLine     MajorSet.AppendHybridShape RLine   SmartUpdate RLine:     SmartUpdate LLine     Set FillYes =MyHSFactory.AddNewFill     Set BackFillEdge =MyHSFactory.AddNewFillEdge(StartLineRef, 0, 0#)     Set LFillEdge =MyHSFactory.AddNewFillEdge(LLine, 0, 0#)     Set RFillEdge =MyHSFactory.AddNewFillEdge(RLine, 0, 0#)     FillYes.AddFillEdgeBackFillEdge     FillYes.AddFillEdge LFillEdge:FillYes.AddFillEdge RFillEdge     FillSet.AppendHybridShape FillYes:   SmartUpdate FillYes     RecursTri LLine:     RecursTri RLine End Iftrac6ing = 1 If FillSet.HybridShapes.Count <> 0 Then     For XX = 1 ToFillSet.HybridShapes.Count:         Set OldFillRef =MyPart.CreateReferenceFromObject(FillSet.HybridShapes.Item(XX)) Set Measurable = TheSPAWorkBench.GetMeasurable(OldFillRef)MinimumDistance = Measurable.GetMinimumDistance(HSNear2)         IfMinimumDistance < 10 * 25.4 Then             MySel.Add HSNear2:MySel.Delete: trac6ing = 0 : Exit For         End If     Next XX EndIf If trac6ing = 1 Then     Dim LLine2, RLine2 As HybridShapeLinePtPt   Set LLine2 = MyHSFactory.AddNewLinePtPt(LPtRef, HSNear2)     SetRLine2 = MyHSFactory.AddNewLinePtPt(RPtRef, HSNear2)MajorSet.AppendHybridShape LLine2     MajorSet.AppendHybridShapeRLine2     SmartUpdate RLine2:    SmartUpdate LLine2     Set FillYes =MyHSFactory.AddNewFill     Set BackFillEdge =MyHSFactory.AddNewFillEdge(StartLineRef, 0, 0#)     Set LFillEdge =MyHSFactory.AddNewFillEdge(LLine2, 0, 0#)     Set RFillEdge =MyHSFactory.AddNewFillEdge(RLine2, 0, 0#)     FillYes.AddFillEdgeBackFillEdge:    FillYes.AddFillEdge LFillEdge     FillYes.AddFillEdgeRFillEdge:    FillSet.AppendHybridShape FillYes     SmartUpdateFillYes:     RecursTri LLine2:     RecursTri RLine2 End If End Sub

99_nickpisca_academic.jpg

Nicholas Pisca
Lecturer - UCSB_MATSenior Automation Consultant + Knowledge Manager - Gehry Technologies 12720..pacific.ave.#9;l.a.;ca..90066..[310]8621142

www.nickpisca.com 

// online scripting database: www.nickpisca.com/go

// waste vegetable oil awareness: www.nickpisca.com/wvo

contact: nickpisca@gmail.com