1)
Calling “setH” will simply set the direction in which your model is facing. What you (presumably) want is for the model to face a certain angle relative to its current direction. That is, you want it to not simply face a given direction, but to turn.
To that end, there are two basic options:
First, you could set its angle relative to itself. In Panda3D, many methods like “setH” accept an optional first parameter that specifies a NodePath that the primary parameter is understood to be relative to. In this case, we want the value to be relative to the model itself, so we pass in the model itself as that optional first parameter. Something like this:
self.myModel.setH(self.myModel, 10)
I think that this may come with caveats when scaling factors are applied to the model, however; I’m pretty confident that this is the case when setting position, but I’m not sure that it applies when setting direction.
The second option is similar, but instead of setting the model’s angle relative to itself, we simply get its current angle and add the turn-value to it. Something like this:
self.myModel.setH(self.myModel.getH() + 10)
(A quick note: if you’re not using a fixed clock-rate, you might want to consider multiplying turns and movements by the time since the last program update. You can get this via the “global clock”, as described here: https://www.panda3d.org/manual/?title=The_Global_Clock
2)
I’m not sure of what you mean. Do you mean that it doesn’t move in the direction in which it’s facing?
If so, then based on the code that you provide, it looks like this is because you’re moving the object relative to its parent, rather than relative to itself. Thus its direction has no effect on the direction in which it’s being moved.