import rhinoscriptsyntax as rs import random, time, sys, os sys.path.append("P:/WWW/ortii/DM2") sys.path.append("P:/") import DM_lib as dm rs.UnitSystem(4) rs.ShowGrid(None, 0) rs.ShowGridAxes(None, 1) rs.ViewDisplayMode(rs.CurrentView(), "shaded") rs.Command("cplane w t enter", 0) dm.PointRadius(displayModeX=0, rad=3, styl=3) dm.printDisplay(state=1) rs.EnableRedraw(0) dm.newEmptyLayer("myPROJ", [100, 100, 100]) dm.newEmptyLayer("myPROJ2", [0, 255, 100]) dm.newEmptyLayer("leitcrv", [0, 0, 0]) rs.CurrentLayer("myPROJ") px = (800, 300, 2100) p1 = rs.VectorAdd(px, [0, 1000, 0]) p2 = rs.VectorAdd(p1, [1000, 0, 50]) p3 = rs.VectorAdd(p2, [0, -1000, 50]) p4 = rs.VectorAdd(p3, [0, 0, 100]) p5 = rs.VectorAdd(p4, [-50, 100, 100]) p6 = rs.VectorAdd(p5, [-500, 0, 50]) p7 = rs.VectorAdd(p6, [0, 25, 0]) p8 = rs.VectorAdd(p7, [-75, 0, 100]) p9 = rs.VectorAdd(p8, [0, 400, 0]) p10 = rs.VectorAdd(p9, [-200, 50, -200]) p11 = rs.VectorAdd(p10, [-300, 75, -25]) p12 = rs.VectorAdd(p11, [-200, 0, -25]) p13 = rs.VectorAdd(p12, [-200, 0, -25]) p14 = rs.VectorAdd(p13, [-150, -500, 150]) coords = (px, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14) rs.CurrentLayer("myPROJ") crv = rs.AddCurve(coords, 23) lenC = rs.CurveLength(crv) divCircs = int(lenC/50) anzCircs = divCircs * 10 rad = divCircs * (2/3) coords = rs.DivideCurve(crv, anzCircs, create_points=0) rs.CurrentLayer("leitcrv") rs.ObjectName(crv, "leitcurve") rohr = rs.AddPipe(crv, [0, lenC], [rad, rad], cap=2) rs.ObjectName(rohr, "rohr") rs.HideObject(rs.ObjectsByName("leitcurve")[0]) rs.HideObject(rs.ObjectsByName("rohr")[0]) if 0: srf1 = rs.ObjectsByName("040_1")[0] srf2 = rs.ObjectsByName("040_0")[0] if 0 and srf1 and srf2: rs.CurrentLayer("GIS::DGM_5m") #trimmed_srf1 = rs.TrimBrep(srf1, rohr, tolerance=None) #trimmed_srf2 = rs.TrimBrep(srf2, rohr, tolerance=None) nam1 = rs.ObjectName( srf1 ) nam2 = rs.ObjectName( srf2 ) splits1 = rs.SplitBrep(srf1, rohr, 1) #rs.ObjectName( splits1, nam1 ) splits2 = rs.SplitBrep(srf2, rohr, 1) #rs.ObjectName( splits2, nam2 ) for obj in splits1+splits2: if rs.SurfaceArea( obj )[0] < 100000: pass rs.DeleteObject( obj ) #rs.FlipSurface(trimmed_srf1, flip=True) #rs.FlipSurface(trimmed_srf2, flip=True) cam_positions = rs.DivideCurve(crv, anzCircs) captureIt = 1 framNr = 0 #path = "L:/animatzi/bohrer/" path = "C:/Users/alexa/Desktop/studium/DM2/bohrer/" if not os.path.exists(path): os.makedirs(path) def cam_1(cam_positions, j, x=70): cam_tar = cam_positions[j] cam_pos = cam_positions[j-x] if j-x >= 0 else cam_positions[0] dm.setCameraTarget(cam_pos, cam_tar, lens=30, rota=0, upVec=0, verbose=0) def cam_2(cam_positions, j, framNr): initial_distance = 0 bbox = rs.BoundingBox(rs.ObjectsByName("circ")[j]) bbox_center = rs.PointDivide(rs.VectorAdd(bbox[0], bbox[6]), 2) distance_factor = initial_distance + (framNr * 1.5) camera_position = rs.VectorAdd(bbox_center, [distance_factor, distance_factor, distance_factor]) cam_tar = cam_positions[j] dm.setCameraTarget(camera_position, cam_tar, lens=50, rota=10, upVec=0, verbose=0) framNr = 0 allCircCoordsLists = [] allPlanes = [] for cor in coords: paraX = rs.CurveClosestPoint(crv, cor) planeX = rs.CurvePerpFrame(crv, paraX) circ = rs.AddCircle(planeX, rad) circCoords = rs.DivideCurve(circ, divCircs, 0) rs.DeleteObject(circ) allCircCoordsLists.append(circCoords) allPlanes.append(planeX) verbindungen = [] for i in range(divCircs): dm.esc() coords = [] for j in range(anzCircs): shift = (i + j) % divCircs cor = allCircCoordsLists[j][shift] coords.append(cor) crv = rs.AddCurve(coords, 1) rs.ObjectName(crv, "schlange") rs.DeleteObjects(rs.ObjectsByName("schlange")[0:]) coords_opposite = [] for j in range(anzCircs): opposite_shift = (i + divCircs // 2 + j) % divCircs cor = allCircCoordsLists[j][opposite_shift] coords_opposite.append(cor) crv_opposite = rs.AddCurve(coords_opposite, 1) rs.ObjectName(crv_opposite, "schlange_opposite") rs.DeleteObjects(rs.ObjectsByName("schlange_opposite")[0:]) if len(verbindungen) > 0: rs.DeleteObjects(verbindungen) aussenCoords = [] aussenLines = [] circs = [] killValue = 180 if i % 10 == 0: for j in range(anzCircs): dm.esc() p1 = coords[j] p2 = coords_opposite[j] verb = rs.AddLine(p1, p2) rs.ObjectName(verb, "verb") verbindungen.append(verb) aussenCoords.extend([p1, p2]) verbs = rs.ObjectsByName("verb") if 1 and len(verbs) > killValue: rs.DeleteObject(verbs[-1]) rs.DeleteObjects(aussenLines[-2:]) if len(aussenCoords) > 2: rs.AddLine(aussenCoords[-1], aussenCoords[-3]) rs.AddLine(aussenCoords[-2], aussenCoords[-4]) rs.ObjectName(rs.AllObjects()[0:2], "aussenLine") aussenLines = rs.ObjectsByName("aussenLine") planeX = allPlanes[j-5] rs.AddCircle(planeX, rad) rs.ObjectName(rs.AllObjects()[0], "circ") circs = rs.ObjectsByName("circ") rs.HideObject(rs.ObjectsByName("circ")[-5:(j+5)]) if i < len(cam_positions): if framNr <= 400: cam_1(cam_positions, j) elif 400 < framNr <= 550: cam_2(cam_positions, j, framNr) else: cam_1(cam_positions, j) rs.Redraw() nam = dm.makeName("DNA", frameNumber=framNr) if 1 and captureIt: rs.Command("-viewCaptureToFile Width=640 Height=360 Scale=2 DrawCPlaneAxes=No TransparentBackground=No "+path+nam, 0) framNr += 1 print framNr if 1 and framNr > 830: break dm.zA(proz=0.95) rs.EnableRedraw(1) rs.CurrentLayer("Default")