################################### ### DM2_w24 # AGruber@tugraz.at ### ### ue_05 UN_headquaters NYC ### ################################### ############################## import rhinoscriptsyntax as rs import random, time, sys sys.path.append("P:/") sys.path.append("P:/WWW/arhitekt0811/DM2") 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 axes display > 0/1 = off/on rs.ViewDisplayMode(rs.CurrentView(), "wireframe") rs.Command("cplane w t enter", 0) # cPlane World Top dm.PointRadius(displayModeX="all", rad=3, styl=3) dm.printDisplay(1) # nomen est omen rs.EnableRedraw(0) # MAC >> uncomment dm.newEmptyLayer("Default") dm.newEmptyLayer("Projected_Curves") dm.newEmptyLayer("Projected_Curves::crvs", [210,210,190]) dm.newEmptyLayer("Projected_Curves::srfs", [10,10,40]) rs.LayerMaterialIndex("Projected_Curves::srfs", rs.LayerMaterialIndex("GIS::DGM_5m")) #dm.newEmptyLayer("Adjusted_Curves", [0,200,0]) # Remove existing curves from the "Adjusted_Curves" layer def delete_adjusted_curves(): objects = rs.ObjectsByLayer("Adjusted_Curves") if objects: rs.DeleteObjects(objects) #delete_adjusted_curves() dm.newEmptyLayer("PROJ", [0, 0, 200]) dist = 60 anz = 11 anzTweens = 16 anzRuns = 8 for i in range(anzRuns): start = [1100 + dist * i, 1600, 0] ziel = rs.VectorAdd(start, [random.uniform(60, 120), random.uniform(-300, -300) - i * 10, 0]) lin = rs.AddCurve([start, ziel]) coords = rs.DivideCurve(lin, anz, 0) rs.DeleteObject(lin) if 1: coordsX = [] for j in range(0, anz - 1): #print(j) coordsX.append(rs.VectorAdd(coords[j], [random.uniform(-40, 40), random.uniform(-40, 20), 0])) coordsX.append(ziel) for deg in [2,7]: crv = rs.AddCurve(coordsX, deg) ###rs.ObjectColor( rs.CopyObject( crv ), [200,0,200]) rs.RebuildCurve( crv, degree=deg, point_count=anz) ### try 2 avoid "SelSelfIntersectingCrv" !! rs.ObjectName(crv, "slalom_"+str(i)+"_"+str(deg)) tweens = rs.AddTweenCurves(rs.AllObjects()[0], rs.AllObjects()[1], number_of_curves=anzTweens, method=1, sample_number=10) ##from_curve_id, to_curve_id, number_of_curves=1, method=0, sample_number=10) rs.ObjectName( tweens, "slalom_"+str(i)+"_0" ) ################ ### just testing rs.Command("SelSelfIntersectingCrv enter", 0) if rs.SelectedObjects(): print "SelSelfIntersectingCrv" #SelSelfIntersectingCrv() ### just testing ################ if 1: dm.newEmptyLayer("Stoecke", [200, 0, 0]) poleSpacing = 2 lineThickness = 5 for crv in rs.ObjectsByName("slalom_*_"+str(deg)): #crv_name = "slalom_"+str(deg) #print crv_name #crv = rs.ObjectsByName(crv_name)[0] coords = rs.CurveEditPoints(crv) for j in range(1, len(coords), 2): base = coords[j] offsetV = [poleSpacing, 0, 0] secondPoint = rs.VectorAdd(base, offsetV) line1 = rs.AddLine(base, rs.VectorAdd(base, [0, 0, poleSpacing+2])) line2 = rs.AddLine(secondPoint, rs.VectorAdd(secondPoint, [0, 0, poleSpacing+2])) #Enable PrintPreview to see rs.ObjectPrintWidth(line1, lineThickness) rs.ObjectPrintWidth(line2, lineThickness) rs.ObjectColor(line1, (255, 0, 0)) rs.ObjectColor(line2, (0, 255, 0)) ############## ### PROJECTING model_surface = rs.ObjectsByName("040_3")[0] anzR = 64*4 rs.CurrentLayer("Projected_Curves::srfs") ###############################GoGo for run in range(0, anzRuns, 1): slaloms = rs.ObjectsByName("slalom_"+str(run)+"_*") for crv in slaloms: nam = rs.ObjectName( crv ) projected = rs.ProjectCurveToSurface( crv, model_surface, [0,0,1])[0] rs.RebuildCurve( projected, 1, anzR ) rs.ObjectName(projected, nam) rs.DeleteObject(crv) rs.Redraw() if 1: dm.esc() run7 = rs.ObjectsByName("slalom_"+str(run)+"_7")[0] rs.RebuildCurve( run7, 1, anzR ) allCoords = [] allCoords.append(rs.CurveEditPoints( run7 ) ) crvs = [] crvs.append(rs.ObjectsByName("slalom_"+str(run)+"_7")[0]) crvs.extend( rs.ObjectsByName("slalom_"+str(run)+"_0") ) for runNr,crv in enumerate(crvs[0:]): dm.esc() runX = crv coords = [] for ptX in rs.CurvePoints( runX ): param = rs.CurveClosestPoint(run7, ptX) ptClosest = rs.EvaluateCurve( run7, param ) #rs.AddCurve( [ptX, ptClosest] ) dist = rs.Distance( ptX, ptClosest ) ptX[2] += dist*0.001/anzTweens*runNr**3 ### exponentiell coords.append( ptX ) runNrCrv = rs.AddCurve( coords, 2 ) rs.RebuildCurve( runNrCrv, 1, anzR ) allCoords.append( rs.CurveEditPoints( runNrCrv ) ) rs.ObjectName( runNrCrv, "slalom_"+str(run)+"_"+str(runNr)+"_hoch" ) col = 10*runNr rs.ObjectColor( runNrCrv, [200, 200, col ]) rs.Redraw() rs.DeleteObjects( crvs ) crvs = rs.ObjectsByName("slalom_"+str(run)+"_*_hoch") crvs.reverse() crvs.append( rs.ObjectsByName("slalom_"+str(run)+"_2")[0] ) lof = rs.AddLoftSrf( crvs, loft_type=1 ) rs.ObjectName( lof, "piste_run_"+str(run) ) rs.ObjectLayer( crvs, "Projected_Curves::crvs") rs.DeleteObjects(rs.ObjectsByLayer("Adjusted_Curves")) if 1: ### curves crvHoch = crvs[-2] crvTief = crvs[-1] rs.ObjectLayer(rs.AddTweenCurves( crvHoch, crvTief, number_of_curves=anzTweens), "Projected_Curves::crvs") for i in range(anzR): coords = [] for coordsList in allCoords: coords.append(coordsList[i]) crv = rs.AddCurve( coords, 1) rs.ObjectLayer( crv, "Projected_Curves::crvs") rs.ObjectColor(crv, [210,210,190]) rs.Redraw() #rs.AddTweenCurves(run7, run2Hoch, number_of_curves=8, method=0, sample_number=10) #rs.AddTweenCurves(run2, run2Hoch, number_of_curves=8, method=0, sample_number=10) #dm.pnt ######################### rs.CurrentLayer("Stoecke") all_top_points = [] pole_centers = [] stockNew_list = [] stoeckeUnten = rs.ObjectsByLayer("Stoecke") for stock in stoeckeUnten: p0 = rs.CurveStartPoint(stock) ptX = rs.AddPoint(p0) ptP = rs.ProjectPointToSurface(ptX, model_surface, [0,0,1])[0] rs.DeleteObject(ptX) ptOben = rs.VectorAdd(ptP, [0,0,7]) ptOben = rs.VectorAdd(ptOben, dm.randVec(-1,1)) stockNew = rs.AddLine(ptP, ptOben) rs.ObjectColor(stockNew, [0,0,175]) rs.ObjectLayer(stockNew, "Stoecke") LP = rs.DivideCurve(stockNew, 3, create_points=False) if LP and len(LP) > 1: mid_index = len(LP) // 2 all_top_points.append(LP[mid_index:]) pole_centers.append(ptP) stockNew_list.append(stockNew) rs.DeleteObjects(stoeckeUnten) paired_indices = set() pairs = [] for i, base_pt in enumerate(pole_centers): if i in paired_indices: continue min_dist = float("inf") closest = None for j, other_pt in enumerate(pole_centers): if i != j and j not in paired_indices: dist = rs.Distance(base_pt, other_pt) if dist < min_dist: min_dist = dist closest = j if closest is not None: pairs.append((i, closest)) paired_indices.add(i) paired_indices.add(closest) for idx1, idx2 in pairs: top_half_1 = all_top_points[idx1] top_half_2 = all_top_points[idx2] for j in range(min(len(top_half_1), len(top_half_2))): rs.AddLine(top_half_1[j], top_half_2[j]) rs.LayerPrintWidth("Stoecke", 1.25 ) re_curves = rs.ObjectsByLayer("Stoecke") if re_curves: for stoecke in re_curves: if rs.IsCurve(stoecke): rs.RebuildCurve(stoecke, 20, 3) ######################### ##################### rs.DeleteObjects( rs.ObjectsByLayer("PROJ")) rs.ViewDisplayMode(rs.CurrentView(), "rendered") rs.CurrentLayer("Default") dm.printDisplay(1)