def draw(self, start, end): segs = LineSegs() segs.set_color(*self.color) segs.moveTo(start._vec) # access to a protected member segs.drawTo(end._vec) # access to a protected member segs_node = segs.create() self.lines += [render.attachNewNode(segs_node)]
class LineEffects(): def __init__(self): self.linesegs = LineSegs("lines") self.bullet = None def remove_bullet(self): if self.bullet: self.bullet.detach_node() def draw_bullet(self, a, b, color): if color == 1: color = (1,0,1,1) elif color == 2: color = (0,1,1,1) else: color = (1,1,1,1) self.linesegs.set_color(color) a = a.get_pos(render) self.linesegs.move_to(a) self.linesegs.draw_to(b) lines = self.linesegs.create() self.bullet = render.attach_new_node(lines) impact = base.icons["impact"] impact = impact.copy_to(self.bullet) impact.set_pos(b)
def draw(self, start, end): if self.car.fsm.getCurrentOrNextState() != 'Results': if self.car.name == game.player_car.name: segs = LineSegs() segs.set_color(*self.color) segs.moveTo(start) segs.drawTo(end) segs_node = segs.create() self.gnd_lines += [render.attachNewNode(segs_node)]
def draw_grid(x_size, y_size, s): lines = LineSegs() lines.set_color((0, 0, 0, 1)) offset = s / 2 for x in range(x_size): x = (x * s) - offset lines.move_to(x, -offset, 0) lines.draw_to(x, (y_size * s) - offset, 0) for y in range(y_size): y = (y * s) - offset lines.move_to(-offset, y, 0) lines.draw_to((x_size * s) - offset, y, 0) grid = NodePath(lines.create()) return grid
def draw_lines(base): linesegs = LineSegs("lines") # Border xs, ys = base.map_size sequence = SequenceNode("border") for color in ((0, 0, 0.4, 1), (0, 0, 0.5, 1), (0, 0, 0.6, 1), (0, 0, 0.5, 1)): linesegs.set_color(color) linesegs.set_thickness(3) linesegs.move_to((-xs, 0, 0)) linesegs.draw_to((-xs, ys, 0)) linesegs.draw_to((xs, ys, 0)) linesegs.draw_to((xs, 0, 0)) linesegs.draw_to((-xs, 0, 0)) lines = linesegs.create() sequence.add_child(lines) sequence.loop(True) sequence.set_frame_rate(30) base.border = render.attach_new_node(sequence) for i in range(2): n = NodePath("border") base.border.instance_to(n) n.reparent_to(render) n.set_z(-(i * 5)) # Mine cross base.models["lines"] = {} base.models["lines"]["cross"] = NodePath("cross") sequence = SequenceNode("cross") for color in ((1, 0, 0, 1), (1, 0, 1, 1), (0, 1, 0, 1), (1, 1, 0, 1)): linesegs.set_thickness(3) linesegs.move_to((1, 0, 0)) linesegs.draw_to((-1, 0, 0)) linesegs.move_to((0, 1, 0)) linesegs.draw_to((0, -1, 0)) linesegs.set_color(color) lines = linesegs.create() sequence.add_child(lines) sequence.loop(True) sequence.set_frame_rate(60) base.models["lines"]["cross"].attach_new_node(sequence) base.linesegs = linesegs
def draw_path(self, current_position, path): from panda3d.core import LineSegs, Vec4, Vec3 path = [Vec3(*v) for v in path] segments = LineSegs() segments.set_thickness(2.0) segments.set_color((1, 1, 0, 1)) segments.move_to(current_position) for point in path: segments.draw_to(point) if self._path_node: self._path_node.remove_node() node = segments.create() self._path_node = render.attach_new_node(node) self._replan_timer = Timer(1.5) self._replan_timer.on_target = self._replan
def linesegs_sample(x_segs, y_segs, wrap_x=False, wrap_y=False, **columns): segs = LineSegs() for x in range(x_segs + 1): for y in range(y_segs + 1): x_e, y_e = x, y if wrap_x and x == x_segs: x_e = 0 if wrap_y and y == y_segs: y_e = 0 values = { name: f( float(x_e) / float(x_segs), float(y_e) / float(y_segs), ) for name, (dtype, f) in columns.items() } if y == 0: segs.set_color(values['color']) segs.move_to(values['vertex']) else: segs.set_color(values['color']) segs.draw_to(values['vertex']) for y in range(y_segs + 1): for x in range(x_segs + 1): x_e, y_e = x, y if wrap_x and x == x_segs: x_e = 0 if wrap_y and y == y_segs: y_e = 0 values = { name: f( float(x_e) / float(x_segs), float(y_e) / float(y_segs), ) for name, (dtype, f) in columns.items() } if x == 0: segs.set_color(values['color']) segs.move_to(values['vertex']) else: segs.set_color(values['color']) segs.draw_to(values['vertex']) return segs.create()
def __init__(self): self.cameraMode = 0 ShowBase.__init__(self) self.taskMgr.add(self.spinCameraTask, "spinCameraTask") self.prepareDron() samples = [0] * 9 for i in range(0, 9): samples[i] = [0] * 5 self.samples = samples self.text_lines = { 0: OnscreenText(text=str(0.0), pos=(-1.6, 0.9), scale=.05, fg=(1, 1, 1, 1), align=TextNode.ALeft, mayChange=1), 1: OnscreenText(text=str(0.0), pos=(-1.6, 0.8), scale=.05, fg=(1, 1, 1, 1), align=TextNode.ALeft, mayChange=1), 2: OnscreenText(text=str(0.0), pos=(-1.6, 0.7), scale=.05, fg=(1, 1, 1, 1), align=TextNode.ALeft, mayChange=1), 3: OnscreenText(text=str(0.0), pos=(-1.6, 0.6), scale=.05, fg=(1, 1, 1, 1), align=TextNode.ALeft, mayChange=1), 4: OnscreenText(text=str(0.0), pos=(-1.6, 0.5), scale=.05, fg=(1, 1, 1, 1), align=TextNode.ALeft, mayChange=1), 5: OnscreenText(text=str(0.0), pos=(-1.6, 0.4), scale=.05, fg=(1, 1, 1, 1), align=TextNode.ALeft, mayChange=1), 6: OnscreenText(text=str(0.0), pos=(-1.6, 0.3), scale=.05, fg=(1, 1, 1, 1), align=TextNode.ALeft, mayChange=1), 7: OnscreenText(text=str(0.0), pos=(-1.6, 0.2), scale=.05, fg=(1, 1, 1, 1), align=TextNode.ALeft, mayChange=1), 8: OnscreenText(text=str(0.0), pos=(-1.6, 0.1), scale=.05, fg=(1, 1, 1, 1), align=TextNode.ALeft, mayChange=1) } bounds_bottom = LineSegs("bbottom") bounds_bottom.set_color(1, 0, 0) bounds_bottom.moveTo(0, 0, 0) bounds_bottom.drawTo(4096, 0, 0) bounds_bottom.drawTo(4096, 4096, 0) bounds_bottom.drawTo(0, 4096, 0) bounds_bottom.drawTo(0, 0, 0) NodePath(bounds_bottom.create()).reparentTo(self.render) bounds_mid = LineSegs("mid") bounds_mid.set_color(0, 1, 0) bounds_mid.moveTo(0, 0, 256 / 3) bounds_mid.drawTo(4096, 0, 256 / 3) bounds_mid.drawTo(4096, 4096, 256 / 3) bounds_mid.drawTo(0, 4096, 256 / 3) bounds_mid.drawTo(0, 0, 256 / 3) bounds_mid.moveTo(0, 0, 2 * 256 / 3) bounds_mid.drawTo(4096, 0, 2 * 256 / 3) bounds_mid.drawTo(4096, 4096, 2 * 256 / 3) bounds_mid.drawTo(0, 4096, 2 * 256 / 3) bounds_mid.drawTo(0, 0, 2 * 256 / 3) NodePath(bounds_mid.create()).reparentTo(self.render) bounds_top = LineSegs("btop") bounds_top.set_color(1, 0, 0) bounds_top.moveTo(0, 0, 256) bounds_top.drawTo(4096, 0, 256) bounds_top.drawTo(4096, 0, 0) bounds_top.moveTo(4096, 0, 256) bounds_top.drawTo(4096, 4096, 256) bounds_top.drawTo(4096, 4096, 0) bounds_top.moveTo(4096, 4096, 256) bounds_top.drawTo(0, 4096, 256) bounds_top.drawTo(0, 4096, 0) bounds_top.moveTo(0, 4096, 256) bounds_top.drawTo(0, 0, 256) bounds_top.drawTo(0, 0, 0) bounds_top.moveTo(0, 0, 256) NodePath(bounds_top.create()).reparentTo(self.render) ground_grid = LineSegs("mid") ground_grid.set_color(0.25, 0.38, 0) for x in range(128): ground_grid.moveTo(0, x * 32, 0) ground_grid.drawTo(4096, x * 32, 0) ground_grid.moveTo(x * 32, 0, 0) ground_grid.drawTo(x * 32, 4096, 0) NodePath(ground_grid.create()).reparentTo(self.render) self.terrainLine = LineSegs("terrainLine") self.terrainLine.set_color(1, 1, 1) #bounds_top.drawTo(0,4096,0) #bounds_top.moveTo(0,4096,256) #bounds_top.reparentTo(self.render) self.accept("space-up", self.changeCamera)
class Wizualizacja(ShowBase): def __init__(self): self.cameraMode = 0 ShowBase.__init__(self) self.taskMgr.add(self.spinCameraTask, "spinCameraTask") self.prepareDron() samples = [0] * 9 for i in range(0, 9): samples[i] = [0] * 5 self.samples = samples self.text_lines = { 0: OnscreenText(text=str(0.0), pos=(-1.6, 0.9), scale=.05, fg=(1, 1, 1, 1), align=TextNode.ALeft, mayChange=1), 1: OnscreenText(text=str(0.0), pos=(-1.6, 0.8), scale=.05, fg=(1, 1, 1, 1), align=TextNode.ALeft, mayChange=1), 2: OnscreenText(text=str(0.0), pos=(-1.6, 0.7), scale=.05, fg=(1, 1, 1, 1), align=TextNode.ALeft, mayChange=1), 3: OnscreenText(text=str(0.0), pos=(-1.6, 0.6), scale=.05, fg=(1, 1, 1, 1), align=TextNode.ALeft, mayChange=1), 4: OnscreenText(text=str(0.0), pos=(-1.6, 0.5), scale=.05, fg=(1, 1, 1, 1), align=TextNode.ALeft, mayChange=1), 5: OnscreenText(text=str(0.0), pos=(-1.6, 0.4), scale=.05, fg=(1, 1, 1, 1), align=TextNode.ALeft, mayChange=1), 6: OnscreenText(text=str(0.0), pos=(-1.6, 0.3), scale=.05, fg=(1, 1, 1, 1), align=TextNode.ALeft, mayChange=1), 7: OnscreenText(text=str(0.0), pos=(-1.6, 0.2), scale=.05, fg=(1, 1, 1, 1), align=TextNode.ALeft, mayChange=1), 8: OnscreenText(text=str(0.0), pos=(-1.6, 0.1), scale=.05, fg=(1, 1, 1, 1), align=TextNode.ALeft, mayChange=1) } bounds_bottom = LineSegs("bbottom") bounds_bottom.set_color(1, 0, 0) bounds_bottom.moveTo(0, 0, 0) bounds_bottom.drawTo(4096, 0, 0) bounds_bottom.drawTo(4096, 4096, 0) bounds_bottom.drawTo(0, 4096, 0) bounds_bottom.drawTo(0, 0, 0) NodePath(bounds_bottom.create()).reparentTo(self.render) bounds_mid = LineSegs("mid") bounds_mid.set_color(0, 1, 0) bounds_mid.moveTo(0, 0, 256 / 3) bounds_mid.drawTo(4096, 0, 256 / 3) bounds_mid.drawTo(4096, 4096, 256 / 3) bounds_mid.drawTo(0, 4096, 256 / 3) bounds_mid.drawTo(0, 0, 256 / 3) bounds_mid.moveTo(0, 0, 2 * 256 / 3) bounds_mid.drawTo(4096, 0, 2 * 256 / 3) bounds_mid.drawTo(4096, 4096, 2 * 256 / 3) bounds_mid.drawTo(0, 4096, 2 * 256 / 3) bounds_mid.drawTo(0, 0, 2 * 256 / 3) NodePath(bounds_mid.create()).reparentTo(self.render) bounds_top = LineSegs("btop") bounds_top.set_color(1, 0, 0) bounds_top.moveTo(0, 0, 256) bounds_top.drawTo(4096, 0, 256) bounds_top.drawTo(4096, 0, 0) bounds_top.moveTo(4096, 0, 256) bounds_top.drawTo(4096, 4096, 256) bounds_top.drawTo(4096, 4096, 0) bounds_top.moveTo(4096, 4096, 256) bounds_top.drawTo(0, 4096, 256) bounds_top.drawTo(0, 4096, 0) bounds_top.moveTo(0, 4096, 256) bounds_top.drawTo(0, 0, 256) bounds_top.drawTo(0, 0, 0) bounds_top.moveTo(0, 0, 256) NodePath(bounds_top.create()).reparentTo(self.render) ground_grid = LineSegs("mid") ground_grid.set_color(0.25, 0.38, 0) for x in range(128): ground_grid.moveTo(0, x * 32, 0) ground_grid.drawTo(4096, x * 32, 0) ground_grid.moveTo(x * 32, 0, 0) ground_grid.drawTo(x * 32, 4096, 0) NodePath(ground_grid.create()).reparentTo(self.render) self.terrainLine = LineSegs("terrainLine") self.terrainLine.set_color(1, 1, 1) #bounds_top.drawTo(0,4096,0) #bounds_top.moveTo(0,4096,256) #bounds_top.reparentTo(self.render) self.accept("space-up", self.changeCamera) def changeCamera(self): self.cameraMode += 1 if self.cameraMode > 4: self.cameraMode = 0 #bounds_top.drawTo(0,4096,0) #bounds_top.moveTo(0,4096,256) #bounds_top.reparentTo(self.render) def prepareDron(self): self.dronActor = Actor("dron") self.dronActor.setScale(0.2, 0.2, 0.2) self.dronActor.reparentTo(self.render) self.dronActor.setPos(2048, 2018, 128) def spinCameraTask(self, task): try: data = self.getParams() print(data[3], data[4], data[5]) self.dronActor.setPos(data[0], data[1], data[2]) self.dronActor.setHpr(data[5], data[6], data[7]) dronPos = self.dronActor.getPos() angleDegrees = task.time * 0.0 angle = (task.time * 0.0) * (pi / 180.0) self.last_data = data except Exception as e: data = self.last_data print(e) # pprint(data) labels = { 0: "X = ", 1: "Y = ", 2: "Wysokość bezw. = ", 3: "Wysokość wzgl. = ", 4: "Bateria = ", 5: "Azymut = ", 6: "Pitch = ", 7: "Roll = ", 8: "Czas = " } for x in data: if data.index(x) == 8: try: time_string = "Dzień: " + str(ord(x[1])) + ", " + str( ord(x[2])).zfill(2) + ":" + str(ord( x[3])).zfill(2) + ":" + str(ord(x[4])).zfill(2) self.text_lines[data.index(x)].setText( labels[data.index(x)] + str(time_string)) except IndexError: self.text_lines[data.index(x)].setText( labels[data.index(x)] + "") else: self.text_lines[data.index(x)].setText( labels[data.index(x)] + str(float("{:10.3f}".format(x)))) # print(data[0], data[1], data[2]) self.dronActor.setPos(data[0], data[1], data[2]) self.dronActor.setHpr(data[5], data[6], data[7]) dronPos = self.dronActor.getPos() angleDegrees = task.time * 0.0 angle = (task.time * 0.0) * (pi / 180.0) #self.camera.setPos(dronPos.getX()+40, dronPos.getY()-40, dronPos.getZ()+3) #self.camera.setPos(dronPos.getX()+20*sin(angle), dronPos.getY()-20*cos(angle), dronPos.getZ()+3) #self.camera.setPos(dronPos.getX(), dronPos.getY(),280) if self.cameraMode == 0: self.camera.setPos(self.dronActor.getPos()) self.camera.setPos(self.camera, 0, 10, 20) self.camera.lookAt(self.dronActor) elif self.cameraMode == 1: self.camera.setPos(0, 0, 255) self.camera.lookAt(self.dronActor) elif self.cameraMode == 2: self.camera.setPos(4096, 4096, 255) self.camera.lookAt(self.dronActor) if self.cameraMode == 3: self.camera.setPos(self.dronActor, 0, 20, 3) self.camera.lookAt(self.dronActor) if self.cameraMode == 4: self.camera.setPos(self.dronActor, 0, 45, 6) self.camera.lookAt(self.dronActor) #self.camera.setPos(dronPos.getX(), dronPos.getY(),280) self.drawTerrainLine(data[3]) return Task.cont def drawTerrainLine(self, relativeHeight): dronePos = self.dronActor.getPos() tHeight = dronePos.getZ() - relativeHeight self.terrainLine.drawTo(dronePos.getX(), dronePos.getY(), tHeight) NodePath(self.terrainLine.create()).reparentTo(self.render) def getParams(self): data = [0] * 9 r = requests.get('http://192.168.0.19:5000/singleRead') loadedData = json.loads(r.text) for i in range(0, 8): self.samples[i].append(loadedData[i]) if len(self.samples[i]) > 5: del self.samples[i][0] uart = loadedData[8] del loadedData[8] data[0] = median(self.samples[0]) data[1] = median(self.samples[1]) data[2] = median(self.samples[2]) data[3] = median(self.samples[3]) data[4] = median(self.samples[4]) data[5] = median(self.samples[5]) data[6] = median(self.samples[6]) data[7] = median(self.samples[7]) data[8] = uart return data def walk(self, direction): self.dronWalking = direction def stop(self): self.dronWalking = False def setTurn(self, value): self.dronTurn = value
def line_art(sd, stemlet_length, stemlet_diameter, rest_segments, style): segs = LineSegs() segs.set_thickness(2.0) if style.stem: segs.set_color(style.stem) segs.move_to(0, 0, 0) segs.draw_to(0, 0, stemlet_length) # Ring around base if style.ring: # Segment base ring segs.set_color(style.ring) for r in range(style.ring_segs): from_v = r / style.ring_segs * 2 * math.pi to_v = (r + 1) / style.ring_segs * 2 * math.pi segs.move_to( math.sin(from_v) * stemlet_diameter, math.cos(from_v) * stemlet_diameter, 0, ) segs.draw_to( math.sin(to_v) * stemlet_diameter, math.cos(to_v) * stemlet_diameter, 0, ) # Endcap ring if rest_segments == 1: for r in range(style.ring_segs): from_v = r / style.ring_segs * 2 * math.pi to_v = (r + 1) / style.ring_segs * 2 * math.pi segs.move_to( math.sin(from_v) * stemlet_diameter, math.cos(from_v) * stemlet_diameter, stemlet_length, ) segs.draw_to( math.sin(to_v) * stemlet_diameter, math.cos(to_v) * stemlet_diameter, stemlet_length, ) # Bark if style.bark: segs.set_color(style.bark) for r in range(style.ring_segs): lobing = 1 + math.sin(2 * math.pi * sd.lobes * r / style.ring_segs) v = r / style.ring_segs * 2 * math.pi segs.move_to( math.sin(v) * stemlet_diameter * lobing, math.cos(v) * stemlet_diameter * lobing, 0, ) segs.draw_to( math.sin(v) * stemlet_diameter * lobing, math.cos(v) * stemlet_diameter * lobing, stemlet_length, ) # x/y indicators if style.xyz_at_top: indicator_z = stemlet_length else: indicator_z = 0.0 if style.x: segs.set_color(style.x) segs.move_to(0, 0, indicator_z) segs.draw_to(stemlet_diameter, 0, indicator_z) if style.y: segs.set_color(style.y) segs.move_to(0, 0, indicator_z) segs.draw_to(0, stemlet_diameter, indicator_z) return segs.create()