hprInterval fuction didnt make orbit visible

Panda3D Samples Code

In panda3d I work on the samples to get knowledge about panda3d, In solar-systems code there is a hprInterval fuction which make planets to orbit around sun, I want to visible see that orbit but I cannot find and method to that. Is anyone know how can I draw that orbit so I can see the path of planets?

self.orbit_period_earth = Sequence(
            self.orbit_root_earth.hprInterval(
                self.yearscale, (360, 0, 0)),
            Func(messenger.send, "newYear"))
        self.day_period_earth = self.earth.hprInterval(
            self.dayscale, (360, 0, 0))

I don’t think that there’s a single method that will cause a trail to be drawn.

However, there are a number of ways that it could be implemented, I daresay. Perhaps the simplest would be to use MeshDrawer, and to have it draw a “linked segment”, using points at intervals along the course of the orbit.

Note in that API link both of the relevant methods there: “linkSegment” and “linkSegmentEnd”. Both are important, I believe

Note also that, despite the manual page, a MeshDrawer object needn’t be re-drawn every frame: you can draw the geometry once and then leave it in place, I do believe.

1 Like

Thanks for the answer. Mesh drawer seems logical but I solve that with this code.

orbit = LineSegs()

        # Set the thickness and color of the orbit line
        orbit.setThickness(3)
        orbit.setColor(1, 1, 1, 1)

        # Set the starting point of the orbit We can play with this variable to change orbit position (with drawTo metdod)
        orbit.moveTo(math.cos(math.radians(0))*1.2, math.sin(math.radians(0))*1.2, 0)

        # Use a for loop to draw a circle around the center point
        # with a radius of 1 unit
        for angle in range(0, 360):
            x = math.cos(math.radians(angle))
            y = math.sin(math.radians(angle))
            orbit.drawTo(x*1.2, y*1.2, 0)

        # Create a NodePath to render the orbit
        orbit_np = orbit.create()
        self.earth.attachNewNode(orbit_np)
1 Like

Yup, LineSegs should work well indeed, I would imagine! :slight_smile:

1 Like