|
| MAS ETH ARCH/CAAD - 2005/06 - STUDENT PAGES Master of Advanced Studies in Architecture, Specialization in Computer Aided Architectural Design | 065-0005/6 Supervision: Prof. Dr. Ludger Hovestadt, Philipp Schaerer Chair of CAAD, ETH Zurich CELLDIVISION __________________________________________________________________________________________________________________________ __________________________________________________________________________________________________________________________ __________________________________________________________________________________________________________________________ __________________________________________________________________________________________________________________________ __________________________________________________________________________________________________________________________ __________________________________________________________________________________________________________________________ PROCEDURE sweep; VAR j,s,k,m,n,i:INTEGER; h,myPoly,lastPoly,firstObject:HANDLE; profileHandle,myHandle,myConnector:HANDLE; neuPx,neuPy,neuPz,px,py,pz:REAL; c,rest:REAL; weightx,weighty:REAL; myArray:DYNARRAY[] OF POINT3D; a1,a2,a3,a4:POINT3D; Procedure myDivide01(p1,p2,p3,p4:POINT3D;weightx,weighty:REAL); VAR p5,p6:POINT3D; BEGIN p5.x := (p2.x - p1.x)/6*3+p1.x; p5.y := (p2.y - p1.y)/6*3+p1.y; p6.x:= (p4.x - p3.x)/6*3+p3.x; p6.y:= (p4.y - p3.y)/6*3+p3.y; myPoly:=CreateNurbsCurve(p5.x,p5.y,myArray[1].z,true,1); AddVertex3D(myPoly,p6.x,p6.y,myArray[1].z); oval(-weightx/2,-weighty/2,weightx/2,weighty/2); profileHandle:= LNewObj; myHandle:= CreateExtrudeAlongPath(myPoly,profileHandle); DelObject(profileHandle); c:=Abs(Distance(p5.x,p5.y,p6.x,p6.y)); weightx:=weightx-0.5; weighty:=weighty-1; IF c>15 THEN BEGIN myDivide01(p5,p6,p4,p1,weightx,weighty); myDivide01(p5,p6,p3,p2,weightx,weighty); END; END; BEGIN myPoly:=FObject; ALLOCATE myArray[1..GetVertNum(myPoly)]; FOR m:=0 TO (GetVertNum(myPoly)-1) DO BEGIN GetPolyPt3D(myPoly,m,px,py,pz); myArray[m+1].x:=px; myArray[m+1].y:=py; myArray[m+1].z:=pz; END; s:= GetVertNum(myPoly); myPoly:=CreateNurbsCurve(myArray[1].x,myArray[1].y,myArray[1].z,true,1); FOR m:=2 TO s DO BEGIN AddVertex3D(myPoly,myArray[m].x,myArray[m].y,myArray[m].z); END; AddVertex3D(myPoly,myArray[1].x,myArray[1].y,myArray[1].z); rest:=s MOD 2; {ungeradeZahl} IF rest=1 THEN BEGIN neuPx:=(myArray[3].x+myArray[2].x)/2; neuPy:=(myArray[3].y+myArray[2].y)/2; AddVertex3D(myPoly,neuPx,neuPy,0); s:=s+1; END; weightx:=5; weighty:=10; oval(-weightx/2,-weighty/2,weightx/2,weighty/2); profileHandle:= LNewObj; myHandle:= CreateExtrudeAlongPath(myPoly,profileHandle); DelObject(profileHandle); BEGIN s:= s/2-1; {anzahl polygone} k:=0; myPoly:=CreateNurbsCurve(myArray[1].x,myArray[1].y,myArray[1].z,true,1); FOR j:= 0 TO (s-1) DO BEGIN AddVertex3D(myPoly,myArray[2+k].x,myArray[2+k].y,myArray[2+k].z); AddVertex3D(myPoly,myArray[3+k].x,myArray[3+k].y,myArray[3+k].z); AddVertex3D(myPoly,myArray[4+k].x,myArray[4+k].y,myArray[4+k].z); AddVertex3D(myPoly,myArray[1].x,myArray[1].y,myArray[1].z); oval(-weightx/2,-weighty/2,weightx/2,weighty/2); profileHandle:= LNewObj; myHandle:= CreateExtrudeAlongPath(myPoly,profileHandle); DelObject(profileHandle); a1.x:=myArray[1].x; a1.y:=myArray[1].y; a1.z:=myArray[1].z; a2.x:=myArray[2+k].x; a2.y:=myArray[2+k].y; a2.z:=myArray[2+k].z; a3.x:=myArray[3+k].x; a3.y:=myArray[3+k].y; a3.z:=myArray[3+k].z; a4.x:=myArray[4+k].x; a4.y:=myArray[4+k].y; a4.z:=myArray[4+k].z; k:=k+2; myDivide01(a1,a2,a3,a4,weightx,weighty); END; (*DelObject(myPoly);*) lastPoly:= FObject; DelObject(lastPoly); END; END; RUN (sweep); -- NDSMatthiasZaeh - 08 Dec 2005
|
This website has been archived and is no longer maintained.