Scriptedbypurpose
explicit and scripted processes within designNick Pisca
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
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.
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
Nicholas Pisca
Lecturer - UCSB_MATSenior Automation Consultant + Knowledge Manager - Gehry Technologies 12720..pacific.ave.#9;l.a.;ca..90066..[310]8621142
// online scripting database: www.nickpisca.com/go
// waste vegetable oil awareness: www.nickpisca.com/wvo
contact: nickpisca@gmail.com









