from panda3d.core import Quat, Point3, Point2 from toontown.toontowngui.Clickable import Clickable class Clickable3d(Clickable): def setClickRegionFrame(self, left, right, bottom, top): transform = self.contents.getNetTransform() # We use the inverse of the cam transform so that it will not be # applied to the frame points twice: camTransform = base.cam.getNetTransform().getInverse() # Compose the inverse of the cam transform and our node's transform: transform = camTransform.compose(transform) # Discard its rotational components: transform.setQuat(Quat()) # Transform the frame points into cam space: mat = transform.getMat() camSpaceTopLeft = mat.xformPoint(Point3(left, 0, top)) camSpaceBottomRight = mat.xformPoint(Point3(right, 0, bottom)) # Project into screen space: screenSpaceTopLeft = Point2() screenSpaceBottomRight = Point2() base.camLens.project(Point3(camSpaceTopLeft), screenSpaceTopLeft) base.camLens.project(Point3(camSpaceBottomRight), screenSpaceBottomRight) left, top = screenSpaceTopLeft right, bottom = screenSpaceBottomRight self.region.setFrame(left, right, bottom, top)