Beispiel #1
0
 def show_window(self, target_pos):
     # draw line around target representing how close the subject has to be looking to get reward
     # print('show window around square', square_pos)
     tolerance = self.plot_variables[
         self.text_dict['Tolerance']] / self.deg_per_pixel
     # print 'tolerance in pixels', tolerance
     # print 'square', square[0], square[2]
     eye_window = LineSegs()
     eye_window.setThickness(2.0)
     eye_window.setColor(1, 0, 0, 1)
     angle_radians = radians(360)
     for i in range(50):
         a = angle_radians * i / 49
         y = tolerance * sin(a)
         x = tolerance * cos(a)
         eye_window.drawTo((x + target_pos[0], 55, y + target_pos[1]))
     # draw a radius line
     # eye_window.moveTo(square[0], 55, square[2])
     # eye_window.drawTo(square[0], 55, square[2] + self.plot_variables[self.text_dict['Tolerance']])
     # print 'distance drawn', self.distance((square[0], square[2]), (square[0], square[2] + self.plot_variables[self.text_dict['Tolerance']]))
     # True optimizes the line segments, which sounds useful
     node = self.base.render.attachNewNode(eye_window.create(True))
     node.show(BitMask32.bit(0))
     node.hide(BitMask32.bit(1))
     self.eye_window.append(node)
Beispiel #2
0
    def __init__(self):
        """ """
        TQGraphicsNodePath.__init__(self)

        ls = LineSegs()
        ls.setThickness(1)

        # X axis
        ls.setColor(1.0, 0.0, 0.0, 1.0)
        ls.moveTo(0.0, 0.0, 0.0)
        ls.drawTo(1.0, 0.0, 0.0)

        # Y axis
        ls.setColor(0.0, 1.0, 0.0, 1.0)
        ls.moveTo(0.0, 0.0, 0.0)
        ls.drawTo(0.0, 1.0, 0.0)

        # Z axis
        ls.setColor(0.0, 0.0, 1.0, 1.0)
        ls.moveTo(0.0, 0.0, 0.0)
        ls.drawTo(0.0, 0.0, 1.0)

        geomnode = ls.create()
        self.set_p3d_nodepath(NodePath(geomnode))
        self.setLightOff(1)
Beispiel #3
0
 def plot_eye_trace(self, first_eye):
     # print 'plot trace'
     # if plotting too many eye positions, things slow down and
     # python goes into lala land. Never need more than 500, and
     # last 300 is definitely plenty, so every time it hits 500,
     # get rid of first 200.
     if len(self.eye_nodes) > 500:
         # print('get rid of eye nodes', len(self.eye_nodes))
         # Since this just removes the node, but doesn't delete
         # the object in the list, can do this in a for loop,
         for index in range(200):
             self.eye_nodes[index].removeNode()
         # now get rid of the empty nodes in eye_nodes
         # print('new length', len(self.eye_nodes))
         self.eye_nodes = self.eye_nodes[200:]
         # print('new length', len(self.eye_nodes))
     eye = LineSegs()
     # eye.setThickness(2.0)
     eye.setThickness(2.0)
     # print 'last', last_eye
     # print 'now', self.current_eye_data
     eye.moveTo(first_eye[0], 55, first_eye[1])
     for data_point in self.current_eye_data:
         eye.drawTo(data_point[0], 55, data_point[1])
     # print('plotted eye', eye_data_to_plot)
     node = self.base.render.attachNewNode(eye.create(True))
     node.show(BitMask32.bit(0))
     node.hide(BitMask32.bit(1))
     self.eye_nodes.append(node)
Beispiel #4
0
    def createMoveVis(self):
        # Instance each selected map object to the vis root
        for obj in base.selectionMgr.selectedObjects:
            instRoot = NodePath("instRoot")
            inst = obj.np.instanceTo(instRoot)
            instRoot.wrtReparentTo(self.toolVisRoot)
            self.xformObjects.append((obj, instRoot, inst))

        # Show an infinite line along the axis we are moving the object
        # if we are using the 3D view
        if self.widget.activeAxis:
            axis = self.widget.activeAxis.axisIdx
            segs = LineSegs()
            col = Vec4(0, 0, 0, 1)
            col[axis] = 1.0
            segs.setColor(col)
            p = Point3(0)
            p[axis] = -1000000
            segs.moveTo(p)
            p[axis] = 1000000
            segs.drawTo(p)
            self.axis3DLines = self.toolRoot.attachNewNode(segs.create())
            self.axis3DLines.setLightOff(1)
            self.axis3DLines.setFogOff(1)

        self.widget.stash()
 def __init__(self, root: NodePath) -> None:
     self.__roots = [root]
     self.__draw_nps = []
     self.__circles = []
     self.__thicknesses = [2.5]
     self.__line_segs = LineSegs()
     self.__line_segs.set_thickness(2.5)
Beispiel #6
0
    def drawBBox(self, scnObj):
        ls = LineSegs()
        x, y, z = scnObj.pos
        rx, rz, ry = scnObj.radius
        ls.setThickness(5)
        ls.setColor(1, 0.4, 0.0, 0.3)

        ls.moveTo(x, y, z)
        ls.drawTo(x + rx, y + ry, z + rz)
        ls.drawTo(x + rx, y - ry, z + rz)
        ls.drawTo(x - rx, y - ry, z + rz)
        ls.drawTo(x - rx, y + ry, z + rz)
        ls.drawTo(x + rx, y + ry, z + rz)

        ls.moveTo(x, y, z)
        ls.drawTo(x + rx, y + ry, z - rz)
        ls.drawTo(x + rx, y - ry, z - rz)
        ls.drawTo(x - rx, y - ry, z - rz)
        ls.drawTo(x - rx, y + ry, z - rz)
        ls.drawTo(x + rx, y + ry, z - rz)

        linegeomn = ls.create(dynamic=False)
        np = self.render.attachNewNode(linegeomn)
        scnObj.setNodePath(
            np)  # Rotation should occure ere, TODO but maybe it shouldnt
Beispiel #7
0
    def drawLineSegments(self,
                         scnObjs):  #Point will be origin of line segments
        ls = LineSegs()

        ls.setThickness(5)
        ind = 0
        for scnobj in scnObjs:
            point = scnobj.pos
            a0 = scnobj.a0
            a1 = scnobj.a1
            a2 = scnobj.a2

            #Draw th new threes
            ls.setColor(1, 0, 0, 0.7)
            ls.moveTo(float(point[0]), float(point[1]), float(point[2]))
            ls.drawTo(float(point[0] + a0[0]), point[1] + float(a0[1]),
                      point[2] + float(a0[2]))

            ls.setColor(0, 1, 0, 0.7)
            ls.moveTo(float(point[0]), float(point[1]), float(point[2]))
            ls.drawTo(float(point[0] + a1[0]), point[1] + float(a1[1]),
                      point[2] + float(a1[2]))

            ls.setColor(0, 0, 1, 0.7)
            ls.moveTo(float(point[0]), float(point[1]), float(point[2]))
            ls.drawTo(float(point[0] + a2[0]), point[1] + float(a2[1]),
                      point[2] + float(a2[2]))

            #ls.setColor(1,0,0,0.7)
            ind += 1

        linegeomn = ls.create(dynamic=False)  # Creates a geomnode
        nodePath = self.render.attachNewNode(linegeomn)
        self.linesegs.append(nodePath)
Beispiel #8
0
 def add_line(self, start_p: Union[Vec3, Tuple], end_p: Union[Vec3, Tuple],
              color, thickness: float):
     line_seg = LineSegs("interface")
     line_seg.setColor(*color)
     line_seg.moveTo(start_p)
     line_seg.drawTo(end_p)
     line_seg.setThickness(thickness)
     NodePath(line_seg.create(False)).reparentTo(self.render)
 def __init__(self, parentNodePath):
   self.mainNodePath = NodePath("Lines")
   self.mainNodePath.reparentTo(parentNodePath)
   
   self.lineSegs = LineSegs()
   self.lineSegs.setThickness(1)
   self.lineNodePaths = []
   self.points = []
Beispiel #10
0
 def plot_zero_lines(self):
     plot_zero = LineSegs()
     plot_zero.setThickness(2.0)
     plot_zero.setColor(Vec4(1, 0, 1, 1))
     plot_zero.moveTo(-1, 0, self.x_mag)
     plot_zero.drawTo(1, 0, self.x_mag)
     plot_zero.moveTo(-1, 0, self.y_mag)
     plot_zero.drawTo(1, 0, self.y_mag)
     base.render2d.attach_new_node(plot_zero.create(True))
Beispiel #11
0
 def _drawSetpointLine(self):
     self.setpointNP.removeNode()
     ls = LineSegs()
     # ls.setThickness(1)
     ls.setColor(1.0, 1.0, 1.0, 1.0)
     ls.moveTo(self.getPos())
     ls.drawTo(self.setpoint)
     node = ls.create()
     self.setpointNP = self.base.render.attachNewNode(node)
Beispiel #12
0
 def _drawForceLine(self):
     self.forceLineNP.removeNode()
     ls = LineSegs()
     # ls.setThickness(1)
     ls.setColor(0.0, 1.0, 0.0, 1.0)
     ls.moveTo(self.getPos())
     ls.drawTo(self.getPos() + self.rigidBody.getTotalForce() * 0.2)
     node = ls.create()
     self.forceLineNP = self.base.render.attachNewNode(node)
Beispiel #13
0
 def _drawVelocityLine(self):
     self.velocityLineNP.removeNode()
     ls = LineSegs()
     # ls.setThickness(1)
     ls.setColor(0.0, 0.0, 1.0, 1.0)
     ls.moveTo(self.getPos())
     ls.drawTo(self.getPos() + self.getVel())
     node = ls.create()
     self.velocityLineNP = self.base.render.attachNewNode(node)
Beispiel #14
0
 def _drawActualDroneLine(self):
     self.actualDroneLineNP.removeNode()
     ls = LineSegs()
     # ls.setThickness(1)
     ls.setColor(0.0, 0.0, 0.0, 1.0)
     ls.moveTo(self.getPos())
     ls.drawTo(self.actualDronePosition)
     node = ls.create()
     self.actualDroneLineNP = self.base.render.attachNewNode(node)
Beispiel #15
0
 def draw_edge(self, e, e_color):
     line_drawer = LineSegs('line_drawer')
     line_drawer.setColor(e_color)
     line_drawer.setThickness(1.5)
     line_drawer.moveTo(e.v1.pos)
     line_drawer.drawTo(e.v2.pos)
     edge_node = line_drawer.create()
     rendered_edge = self.render_root.attachNewNode(edge_node)
     self.render_nodes['edge_' + str(e.ID)] = rendered_edge
Beispiel #16
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)]
Beispiel #17
0
    def __init__(self):
        self.cardmaker = CardMaker("card")
        self.linesegs = LineSegs("line")
        self.pointmaker = PointMaker("point")
        self.shapes = {}
        self.make_lod()

        self.pointmaker.add()
        self.shapes["Point"] = self.pointmaker.wrap_up()
        self.pointmaker.new()
    def draw(self, subdiv=1000):
        ls = LineSegs('mopath')
        p = Point3()
        for ti in range(subdiv):
            t = float(ti) / float(subdiv) * self.maxT
            tp = self.calcTime(t)
            self.xyzNurbsCurve.getPoint(tp, p)
            ls.drawTo(p)

        return NodePath(ls.create())
Beispiel #19
0
    def __init__(self, manager, number):
        """
		Initialises the drone as a bullet and panda object.
		:param manager: The drone manager creating this very drone.
		"""
        self.manager = manager  # Drone manager handling this drone
        self.base = manager.base  # Simulation
        self.crazyflie = None  # object of real drone, if connected to one
        self.debug = False  # If debugging info should be given
        self.in_flight = False  # If currently in flight
        self.number = number  # Number of drone in list

        # Every drone has its own vector to follow if an avoidance manouver has to be done
        self.avoidance_vector = LVector3f(random.uniform(-1, 1),
                                          random.uniform(-1, 1),
                                          random.uniform(-1, 1)).normalize()

        # Create bullet rigid body for drone
        drone_collision_shape = BulletSphereShape(self.COLLISION_SPHERE_RADIUS)
        self.drone_node_bullet = BulletRigidBodyNode("RigidSphere")
        self.drone_node_bullet.addShape(drone_collision_shape)
        self.drone_node_bullet.setMass(self.RIGID_BODY_MASS)

        # Set some values for the physics object
        self.drone_node_bullet.setLinearSleepThreshold(
            self.LINEAR_SLEEP_THRESHOLD)
        self.drone_node_bullet.setFriction(self.FRICTION)
        self.drone_node_bullet.setLinearDamping(self.LINEAR_DAMPING)

        # Attach to the simulation
        self.drone_node_panda = self.base.render.attachNewNode(
            self.drone_node_bullet)

        # ...and physics engine
        self.base.world.attachRigidBody(self.drone_node_bullet)

        # Add a model to the drone to be actually seen in the simulation
        drone_model = self.base.loader.loadModel(
            "models/drones/drone_florian.egg")
        drone_model.setScale(0.2)
        drone_model.reparentTo(self.drone_node_panda)

        # Set the position and target position to their default (origin)
        default_position = LPoint3f(0, 0, 0)
        self.drone_node_panda.setPos(default_position)
        self.target_position = default_position

        # Create a line renderer to draw a line from center to target point
        self.line_creator = LineSegs()
        # Then draw a default line so that the update function works as expected (with the removal)
        self.target_line_node = self.base.render.attachNewNode(
            self.line_creator.create(False))

        # Create node for text
        self.drone_text_node_panda = None
Beispiel #20
0
    def render_sight(self):
        ls = procedural_sight(LineSegs(), True, False)
        ls = procedural_sight(ls, False, False)
        ls.setThickness(3)
        self.sight_clear_node = ls.create()

        ls = procedural_sight(LineSegs(), True, True)
        ls = procedural_sight(ls, False, True)
        ls.setThickness(3)
        self.sight_engaged_node = ls.create()

        self.sight_clear_np = NodePath(self.sight_clear_node)
        self.sight_clear_np.setColorScale(0, 0.5, 0, 1.0)

        self.sight_engaged_np = NodePath(self.sight_engaged_node)
        self.sight_engaged_np.setColorScale(GG)

        self.sight_clear_np.reparentTo(render2d)
        self.sight_engaged_np.reparentTo(render2d)
        self.sight_engaged_np.hide()
Beispiel #21
0
 def draw_path(self,path):
     if self.vis:
         self.vis.removeNode()
     l=LineSegs()
     l.setColor(1,0,0,1)
     l.setThickness(2)
     l.moveTo(path[0])
     for point in path:
         l.drawTo(point)
     self.vis=render.attachNewNode(l.create())
     self.vis.setZ(0.5)
def drawHilbertCurve(pts):  # 2n + c
    for p in range(len(pts) - 1):  # n
        seg = LineSegs()  # c
        seg.setThickness(3)  # c
        seg.draw_to(pts[p][0], 0, pts[p][2])  # c
        seg.draw_to(pts[p + 1][0], 0, pts[p + 1][2])  # c
        node = seg.create()  # c
        nodes.append(node)  # c

    for node in nodes:  # n
        base.aspect2d.attach_new_node(node)  # c
Beispiel #23
0
 def __init__(self, widget, axis):
     TransformWidgetAxis.__init__(self, widget, axis)
     segs = LineSegs()
     segs.setThickness(2)
     vertices = LEUtils.circle(0, 0, 1, 64)
     for i in range(len(vertices)):
         x1, y1 = vertices[i]
         x2, y2 = vertices[(i + 1) % len(vertices)]
         segs.moveTo(x1, 0, y1)
         segs.drawTo(x2, 0, y2)
     self.axisCircle = self.attachNewNode(segs.create())
     self.axisCircle.setAntialias(AntialiasAttrib.MLine)
Beispiel #24
0
    def drawWheelBase(self):
        wheelSegs = LineSegs("wheelBase")
        wheelSegs.setThickness(5)
        wheelSegs.moveTo(self.wheelFront + Vec3(0.0, 5.0, 1.44))
        wheelSegs.drawTo(self.wheelFront + Vec3(0.0, -5.0, 1.44))

        wheelSegs.moveTo(self.wheelBack + Vec3(0.0, 5.0, 1.44))
        wheelSegs.drawTo(self.wheelBack + Vec3(0.0, -5.0, 1.44))

        wheelNode = wheelSegs.create()
        wheelNodePath = self.car.attachNewNode(wheelNode)
        return wheelNodePath
Beispiel #25
0
 def draw_cross(self, deg_per_pixel):
     cross = LineSegs()
     cross.setThickness(2.0)
     # cross hair is 1/2 degree visual angle,
     # so go 1/4 on each side
     dist_from_center = 0.25 / deg_per_pixel
     cross.moveTo(0 + dist_from_center, 55, 0)
     cross.drawTo(0 - dist_from_center, 55, 0)
     cross.moveTo(0, 55, 0 - dist_from_center)
     cross.drawTo(0, 55, 0 + dist_from_center)
     self.x_node = self.base.render.attachNewNode(cross.create(True))
     self.x_node.hide()
    def __init__(self,
                 name: str = 'cube_mesh',
                 wireframe_thickness: float = 5) -> None:
        self.name = name

        self.__vertex_data_format = GeomVertexFormat.getV3n3()
        self.__vertex_data = GeomVertexData(name, self.__vertex_data_format,
                                            Geom.UHStatic)

        self.geom = Geom(self.__vertex_data)
        self.__triangles = GeomTriangles(Geom.UHStatic)
        self.__triangle_data = self.__triangles.modifyVertices()

        self.__vertex = GeomVertexWriter(self.__vertex_data, 'vertex')
        self.__normal = GeomVertexWriter(self.__vertex_data, 'normal')

        self.__face_count = 0

        def add_face(face: Face) -> None:
            self.__make_face(face)

        self.__make_face(Face.LEFT)
        self.__make_face(Face.RIGHT)
        self.__make_face(Face.BACK)
        self.__make_face(Face.FRONT)
        self.__make_face(Face.BOTTOM)
        self.__make_face(Face.TOP)

        self.__triangles.close_primitive()
        self.geom.add_primitive(self.__triangles)

        def is_connected(x, y, z, x1, y1, z1):
            return (abs(x - x1) == 1 and abs(y - y1) != 1 and abs(z - z1) != 1) or \
                   (abs(x - x1) != 1 and abs(y - y1) == 1 and abs(z - z1) != 1) or \
                   (abs(x - x1) != 1 and abs(y - y1) != 1 and abs(z - z1) == 1)

        ls = LineSegs()
        ls.set_thickness(wireframe_thickness)
        arr_x = [0, 0, 0, 0, 1, 1, 1, 1]
        arr_y = [0, 0, 1, 1, 1, 1, 0, 0]
        arr_z = [0, -1, -1, 0, 0, -1, -1, 0]
        for pos1 in range(len(arr_x) - 1):
            for pos2 in range(pos1, len(arr_x)):
                x = arr_x[pos1]
                y = arr_y[pos1]
                z = arr_z[pos1]
                x1 = arr_x[pos2]
                y1 = arr_y[pos2]
                z1 = arr_z[pos2]
                if (is_connected(x, y, z, x1, y1, z1)):
                    ls.move_to(x, y, z)
                    ls.draw_to(x1, y1, z1)
        self.__wireframe_node = ls.create()
Beispiel #27
0
 def redraw_wps(self):
     if not hasattr(self.mediator, 'phys'): return  # first frame, refactor
     if not self.mediator.phys.waypoints: return
     # it may be invoked on track's destruction
     if self.wp_np: self.wp_np.remove_node()
     segs = LineSegs()
     for w_p in self.mediator.phys.waypoints:
         for dest in w_p.prevs:
             segs.moveTo(w_p.pos)
             segs.drawTo(dest.pos)
     segs_node = segs.create()
     self.wp_np = render.attach_new_node(segs_node)
Beispiel #28
0
 def createGrid(self):
     segs = LineSegs()
     segs.setThickness(4.0)
     segs.setColor(Vec4(1, 1, 0, 0.3))
     for i in xrange(self.level.maxX):
         segs.moveTo(i + 1, 0, utils.GROUND_LEVEL)
         segs.drawTo(i + 1, self.level.maxY, utils.GROUND_LEVEL + 0.02)
     for j in xrange(self.level.maxY):
         segs.moveTo(0, j + 1, utils.GROUND_LEVEL)
         segs.drawTo(self.level.maxX, j + 1, utils.GROUND_LEVEL + 0.02)
     self.grid = NodePath(segs.create())
     self.grid.setTransparency(TransparencyAttrib.MAlpha)
    def fire_laser(self, panda3dworld, entity_id):
        now = globalClock.getRealTime()
        if now - self.last_time_laser_fired < self.laser_reload_time:
            if defines.ENTITIES[entity_id]['CATEGORY'] == 'ship':
                panda3dworld.keys["fire"] = 0
            elif defines.ENTITIES[entity_id]['CATEGORY'] == 'ship2':
                panda3dworld.keys["p2fire"] = 0
        else:
            self.last_time_laser_fired = now

            pos = defines.ENTITIES[entity_id]["NODE"].getPos()
            angle = 360 - defines.ENTITIES[entity_id]["NODE"].getR() 
            # print angle
            start_pos_x = pos.x + 0.5 * cos(angle* pi/180)
            start_pos_y = pos.z + 0.5 * sin(angle* pi/180)
            pos_x = pos.x + 10 * cos(angle* pi/180)
            pos_y = pos.z + 10 * sin(angle* pi/180)

            callback = test_laser_collision(start_pos_x, start_pos_y, pos_x, pos_y)
            if callback.hit:
                pos_x = callback.point.x
                pos_y = callback.point.y
                for contact_id, entity in defines.ENTITIES.items(): 
                    if entity['BODY'].fixtures[0] == callback.fixture:
                        if entity['CATEGORY'] == "ship" or entity['CATEGORY'] == "ship2" or entity['CATEGORY'] == "asteroid":
                            entity['SHIELD'] -= 10
                        elif entity['CATEGORY'] == "bullet":
                            defines.ENTITIES[contact_id]['NODE'].removeNode()
                            defines.ENTITIES[contact_id]['PHYSIC_NODE'].removeNode()
                            defines.world.DestroyBody(defines.ENTITIES[contact_id]['BODY'])
                            del defines.ENTITIES[contact_id]
            ls = LineSegs("lines")
            ls.setColor(1,1,1,1)
            ls.drawTo(start_pos_x, 55, start_pos_y)
            ls.drawTo(pos_x, 55, pos_y)
            laser = ls.create(False)
            laserPath = render.attachNewNode(laser)
            laserPath.setBin("unsorted", 0)
            laserPath.setDepthTest(False)


            sound = base.loader.loadSfx("sounds/laser.ogg")
            sound.setVolume(0.2)
            sound.play()
 
            taskMgr.doMethodLater(0.05, remove_laser_task, 'remove laser', extraArgs=[laserPath], appendTask=True)

            defines.ENTITIES[entity_id]['ENERGY'] -= 5
            if defines.ENTITIES[entity_id]['CATEGORY'] == 'ship':
                panda3dworld.keys["fire"] = 0
            elif defines.ENTITIES[entity_id]['CATEGORY'] == 'ship2':
                panda3dworld.keys["p2fire"] = 0
Beispiel #30
0
 def plot_match_square(self, corners):
     print 'plot match square'
     print corners
     match = LineSegs()
     match.setThickness(1.5)
     match.setColor(0, 0, 0)
     match.move_to(corners[0][0], -5, corners[1][0])
     match.draw_to(corners[0][1], -5, corners[1][0])
     match.draw_to(corners[0][1], -5, corners[1][1])
     match.draw_to(corners[0][0], -5, corners[1][1])
     match.draw_to(corners[0][0], -5, corners[1][0])
     # print self.render2d
     self.match_square = self.render2d.attach_new_node(match.create())