Beispiel #1
0
 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)]
Beispiel #2
0
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)
Beispiel #3
0
 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
Beispiel #5
0
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
Beispiel #6
0
    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()
Beispiel #8
0
    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)
Beispiel #9
0
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
Beispiel #10
0
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()