################################### ### DM2_w24 # AGruber@tugraz.at ### ### ue_05 UN_headquaters NYC ### ################################### ############################## import rhinoscriptsyntax as rs import random, time, sys ### sys.path.append("P:/") ### import DM_lib as dm ### reload(dm) ############################## rs.UnitSystem(4) # km = 5, meters = 4, cm = 3 etc rs.ShowGrid(None, 0) # grid > 0 = off rs.ShowGridAxes(None, 1) # y/y/z axen display > 0/1 = off/on rs.ViewDisplayMode(rs.CurrentView(), "wireframe") rs.Command("cplane w t enter", 0) # cPlane World Top dm.PointRadius(displayModeX=0, rad=3, styl=3) dm.printDisplay(0) # nomen est omen rs.EnableRedraw(0) ### MAC >> uncomment ! ###_________________________________________# ### basic settings for grid to fit UN_slab # ### # ! no need 2 change ! floors = H = dm.H = 40 # default=40 / incl roof slabs = L = dm.L = 11 # default=11 depth = D = dm.D = 4 # default= 4 / division in building_depth floorHeight = fH = dm.fH = 4.0 # default= 4.0 / 4.0*(H-1) = 156 meters # ############# # get gridCoords L*D*H = 1760 UnoGridCoords = dm.getUnoGridCoords() # get from DM_lib as dm #################___________________________# dm.newEmptyLayer("UNO::setUp::points", [150,150,200]) dm.newEmptyLayer("UNO::setUp::geo", [150, 20,150]) dm.newEmptyLayer("UNO::setUp::crv", [200, 100, 100]) dm.newEmptyLayer("UNO::setUp", [120,120,140]) ################## depthVec = dVec = rs.VectorUnitize(rs.VectorSubtract( dm.getUnoCoord(0, 0, 0), dm.getUnoCoord(0, 2, 0) )) lengthVec = lVec = rs.VectorUnitize(rs.VectorSubtract( dm.getUnoCoord(0, 0, 0), dm.getUnoCoord(1, 0, 0) )) hVec = rs.VectorUnitize(rs.VectorSubtract( dm.getUnoCoord(0, 0, 1), dm.getUnoCoord(0, 0, 0) )) ################## if 1: ### SETUP >> dont' exec @ homework ! if 1: rs.AddLine( dm.getUnoCoord(0, 0, 0), dm.getUnoCoord(1, 0, 0) ) rs.AddLine( dm.getUnoCoord(0, 0, 0), dm.getUnoCoord(0, 1, 0) ) rs.AddLine( dm.getUnoCoord(0, 0, 0), dm.getUnoCoord(0, 0, 1) ) rs.ObjectColor(rs.AllObjects()[1], [0, 222, 0] ) rs.ObjectColor(rs.AllObjects()[2], [222, 0, 0] ) rs.ObjectColor(rs.AllObjects()[0], [0, 0, 222] ) rs.ObjectPrintWidth( rs.AllObjects()[0:3], 1.0 ) p0 = dm.getUnoCoord( 0, 0, 0) p1 = dm.getUnoCoord( 10, 0, 0) p2 = dm.getUnoCoord( 10, 3, 0) p3 = dm.getUnoCoord( 0, 3, 0) unoBaseCoords = [p0, p1, p2, p3, p0] unoBaseCrv = rs.AddCurve( unoBaseCoords, 1) unoTopCoords = [dm.getUnoCoord( 0, 0, 39), dm.getUnoCoord( 10, 0, 39), dm.getUnoCoord( 10, 3, 39), dm.getUnoCoord( 0, 3, 39), dm.getUnoCoord( 0, 0, 39), ] unoTopCrv = rs.AddCurve( unoTopCoords, 1) rs.ZoomExtents() def gC (l=1, d=2, h=3): cor = dm.getUnoCoord(l, d, h) return cor #_____________________________here you go: ################# ##### demoCoaster ################# dm.newEmptyLayer("myPROJ", [100,100,100]) def demoCoaster(anzahl = 128, circDiv = 64, rad = 3.5, makeAll = 2, crvDeg = 3, delCircs = 1): karlaCoords = [] p0 = rs.VectorAdd( dm.getUnoCoord( 0, 0, 10 ), rs.VectorScale(lVec, 10) ) karlaCoords = [p0] counter = 0 for h in range(0, H-1, 2): counter = counter+1 if counter%4 == 1: karlaCoor = rs.VectorAdd(dm.getUnoCoord( int((L-1)/2), 0, h ), rs.VectorScale(dVec, random.uniform(0,50))) if counter%4 == 2: karlaCoor = dm.getUnoCoord( L-1, int((D-1)/2), h ) if counter%4 == 3: karlaCoor = rs.VectorAdd(dm.getUnoCoord( int((L-1)/2), D-1, h ), rs.VectorScale(dVec, random.uniform(0,50)*-1)) if counter%4 == 0: karlaCoor = dm.getUnoCoord( 0, int((D-1)/2), h ) karlaCoords.append(karlaCoor) karlaCoords.append(karlaCoords[0]) crv = rs.AddCurve(karlaCoords, 2) dom = rs.CurveDomain(crv)[1] deltaAng = 360/circDiv allCoords = [] for p in range(0, anzahl+1): fac = p/anzahl coord = rs.EvaluateCurve( crv, dom*fac ) ## para = dom*fac ! para = rs.CurveClosestPoint(unoBaseCrv, coord) coordOnCrv = rs.EvaluateCurve( unoBaseCrv, para ) if makeAll == 2: rs.AddCurve( [coord, coordOnCrv ] ) # dm.plnCurvePerp( crv, dom*fac ) ### same as: planeX = rs.CurvePerpFrame( crv, dom*fac ) ### Returns: plane: Plane on succes ! vecXY = dm.vecCurvePerpXY( crv, dom*fac ) ### parallel zu xy_ebene >> horizontal !!! tanX = rs.CurveTangent( crv, dom*fac ) ### nomen est omen :) if p==0: tanS = tanX if p==anzahl: tanE = tanX if 1: ### best result ! vecXY = rs.VectorScale(vecXY, rad) crvXY = rs.AddLine( coord, rs.VectorAdd(coord, vecXY) ) ### horizontal !!! rs.ObjectColor( crvXY, [0,200,0]) rs.ObjectColor( rs.AddLine( planeX[0], rs.VectorAdd(planeX[0], rs.VectorScale(tanX, rad)) ), [0,0,222]) rs.ObjectColor( rs.AddLine( planeX[0], rs.VectorAdd(planeX[0], rs.VectorScale(planeX[1], rad)) ), [222,0,0]) coords = [] for j in range( int(circDiv*0.5)+1 ): if not delCircs: rs.AddLine( coord, rs.VectorAdd(coord, rs.VectorRotate(vecXY, deltaAng*j, tanX) )) coords.append( rs.VectorAdd(coord, rs.VectorRotate(vecXY, deltaAng*j, tanX) ) ) if not delCircs: circ = rs.AddCurve( coords, 1 ) allCoords.append( coords ) else: ### auch gut ! angX = rs.VectorAngle(planeX[1], vecXY) planeX = rs.RotatePlane( planeX, angX, tanX) circ = rs.AddCircle(planeX, rad ) rs.ObjectName( circ, "cir_"+str(p)) rs.RotateObject(circ, coord, angX, axis=tanX, copy=0) coords = rs.DivideCurve( circ, circDiv, 0) cirLin = rs.AddLine(coord, coords[0]) #rs.AddPoint( coords[0] ) rs.ObjectName( cirLin, "cirLin_"+str(p)) if delCircs: rs.DeleteObjects([circ, cirLin]) allCoords.append(coords) if makeAll: for i in range( int(circDiv*0.5)+1 ): coords = [] for circList in allCoords: coords.append( circList[i] ) if makeAll == 1: rs.ObjectColor(rs.AddCurve(coords, degree=crvDeg), [100,190,190] ) if makeAll == 2: rs.ObjectColor(rs.AddInterpCurve(coords, degree=crvDeg, knotstyle=3), [190,100,190] ) ##rs.AddInterpCurve(points, degree=3, knotstyle=0, start_tangent=None, end_tangent=None if i%2==0: rs.Redraw() anzPoints = len(rs.ObjectsByType(1)) print "anzPoints", anzPoints rs.CurrentLayer("UNO::setUp::crv") #demoCoaster( anzahl = 128, circDiv = 64, rad = 3.5, makeAll = 2, crvDeg = 3, delCircs = 1 ) #demoCoaster( 128, 64, 3.5, 2, 3, 1 ) #demoCoaster( ) rs.CurrentLayer("UNO::setUp::crv") p0 = gC (l=10, d=0, h=39) p00 = gC (9, 2, 39) p01 = rs.VectorAdd (p00, rs.VectorScale(hVec, 15.0)) rs.AddPoint (p0) p1 = rs.VectorAdd (p00, rs.VectorScale(dVec, 30.0)) p2 = gC (4, 3, 35) p3 = rs.VectorAdd (p2, rs.VectorScale(dVec, 30.0)) p4 = gC (0, 3, 29) p5 = rs.VectorAdd (p4, rs.VectorScale(dVec, 30.0)) p6 = rs.VectorAdd (p4, rs.VectorScale(lVec, 30.0)) p7 = gC (0, 0, 25) p8 = rs.VectorAdd (p7, rs.VectorScale(lVec, 50.0)) p9 = rs.VectorAdd (p7, rs.VectorScale(dVec, -30.0)) p10 = gC (10, 0, 20) p11 = rs.VectorAdd (p10, rs.VectorScale(dVec, -15.0)) p12 = gC (10, 3, 8) p13 = rs.VectorAdd (p12, rs.VectorScale(lVec, -100.0)) p14 = rs.VectorAdd (p12, rs.VectorScale(dVec, 30.0)) p15 = gC (0, 3, 6) p16 = rs.VectorAdd (p15, rs.VectorScale(dVec, 60.0)) p17 = gC (0, 0, 4) p18 = rs.VectorAdd (p17, rs.VectorScale(lVec, 30.0)) p19 = gC (0, 0, 7) p20 = rs.VectorAdd (p19, rs.VectorScale(dVec, -60.0)) p21 = gC (7, 0, 1) p22 = rs.VectorAdd (p21, rs.VectorScale(dVec, -90.0)) coords = [p0,p01,p1,p2,p3,p4,p5,p6,p7,p8,p9,p11,p13,p14,p16,p18,p20,p22] #rs.AddCurve (coords, 1) crvDiv = 256 crv = rs.AddCurve (coords, 2) coords = rs.DivideCurve (crv, crvDiv, create_points=0) #rs.AddPoints (coords) for cor in coords: pass #rs.AddCircle( cor, 5.5) #rs.CurvePerpFrame () ##CurvePerpFrame (curve_id, parameter) dom = rs.CurveDomain ( crv ) #print "dom =", dom dom = rs.CurveDomain ( crv ) [1] #print "dom =", dom pX = rs.EvaluateCurve( crv, dom*0.5 ) planeX = rs.CurvePerpFrame ( crv, dom*0.5) #rs.AddCircle ( planeX, 5.5) #paraX = rs.CurveClosestPoint ( crv,coords[10] ) #planeX = rs.CurvePerpFrame ( crv, paraX) #rs.AddCircle ( planeX, 5.5) circDiv = 36 allCoordsLists = [] for cor in coords: paraX = rs.CurveClosestPoint ( crv, cor ) planeX = rs.CurvePerpFrame ( crv, paraX) circ= rs.AddCircle ( planeX, 7) circCoords = rs.DivideCurve (circ, circDiv , 0) rs.DeleteObject (circ) allCoordsLists.append( circCoords ) i = 0 for i in range (circDiv): coords = [] for list1 in allCoordsLists: pX = list1[i] coords.append (pX) rs.ObjectColor(rs.AddCurve(coords), [0,255,0]) #Stuetzen interval = 10 #abstand von punkten vo die stuetzen sich verbinden anchor_points = [] for i in range(0, len(coords), interval): point_on_pipe = coords[i] ground_point = list(point_on_pipe) ground_point[2] = 0 anchor_points.append(rs.AddPoint(ground_point)) rs.AddLine(point_on_pipe, ground_point) for anchor in anchor_points: rs.ObjectColor(anchor, [200, 100, 100]) #____________________________:here you end ################################### ################################### #dm.zA( proz=0.95 ) rs.EnableRedraw(1) ### 4 the MACs #dm.printDisplay(1) dm.newEmptyLayer("Default")