示例#1
0
    def __init__(self, scene_viewer):
        self.geo = hou.Geometry()
        self.knob_geo = hou.Geometry()
        self.knob_pt = self.knob_geo.createPoint()
        self.scene_viewer = scene_viewer
        self.sphere_verb = hou.sopNodeTypeCategory().nodeVerb("sphere")
        self.sphere_verb.setParms({'type': 2, 'rows': 32, 'cols': 32})

        self.sphere_verb.execute(self.geo, [])

        self.circle_verb = hou.sopNodeTypeCategory().nodeVerb("circle")
        self.circle_verb.setParms({'type': 1, 'divs': 32})

        self.circle_geo = hou.Geometry()
        self.circle_verb.execute(self.circle_geo, [])

        self.drawable = hou.GeometryDrawable(
            self.scene_viewer,
            hou.drawableGeometryType.Face,
            "rollerball",
            params={
                'style': hou.drawableGeometryFaceStyle.Plain,
                'backface_culling': 1,
                'color1': hou.Vector4(0.2, 0.2, 0.2, 0.5),
                'fade_factor': 0.2
            })

        self.knob_drawable = hou.GeometryDrawable(
            self.scene_viewer,
            hou.drawableGeometryType.Point,
            "rollerball_knob",
            params={
                'style': hou.drawableGeometryPointStyle.SmoothCircle,
                'color1': hou.Vector4(1.0, 1.0, 1.0, 1.0),
                'radius': 6,
                'fade_factor': 0.5
            })
        self.knob_drawable.setGeometry(self.knob_geo)
        self.drawable.setGeometry(self.geo)

        self.is_behind = False
        self.is_ball = True

        self.circle_N = hou.Vector3(0, 1, 0)

        self.start_transform = hou.Matrix4(1)
        self.start_vec = hou.Vector3()
        self.start_mouse_x = 0.0
        self.start_mouse_y = 0.0
        self.start_ray_dir = hou.Vector3(0, 0, 0)
        self.start_ray_origin = hou.Vector3(0, 0, 0)

        # vector for twist
        self.primary_axis = hou.Vector3(0, 0, 1)
        # vector for bend
        self.secondary_axis = hou.Vector3(1, 0, 0)

        self.axis = hou.Vector3(0, 0, 1)
示例#2
0
    def __init__(self, state_name, scene_viewer):
        self.state_name = state_name
        self.scene_viewer = scene_viewer
        self.poly_id = -1
        self.cursor_text = "Text"
        self.geometry = None
        self.geometryHandles = None
        self.mouseStart = hou.Vector2()
        self.mouseXLast = -1
        self.mouse_screen = hou.Vector2()
        self.cursorStartPos = hou.Vector3()
        self.dragStartValue = 0
        self.handleStartPos = hou.Vector3()
        self.currentPoint = -1
        self.currentHandleIdx = -1
        self.currentPrimid = -1
        self.currentPrimu = -1
        self.currentPrimDist = -1
        self.dragAction = False
        self.isHandle = False
        self.autoSlide = False
        self.slideHandlesAhead = False
        self.slideHandlesBehind = False
        self.handlePosMethod = 0

        self.text = hou.TextDrawable(self.scene_viewer, "text")

        # Construct a geometry drawable group
        line = hou.GeometryDrawable(self.scene_viewer, hou.drawableGeometryType.Line, "line",
                                    params={
                                        "color1": (0.0, 0.0, 1.0, 1.0),
                                        "style": hou.drawableGeometryLineStyle.Plain,
                                        "line_width": 3}
                                    )

        face = hou.GeometryDrawable(self.scene_viewer, hou.drawableGeometryType.Face, "face",
                                    params={
                                        "style": hou.drawableGeometryFaceStyle.Plain,
                                        "color1": (0.0, 1.0, 0.0, 1.0)}
                                    )

        point = hou.GeometryDrawable(self.scene_viewer, hou.drawableGeometryType.Point, "point",
                                     params={
                                         "num_rings": 2,
                                         "radius": 8,
                                         "color1": (1.0, 0.0, 0.0, 1.0),
                                         "style": hou.drawableGeometryPointStyle.LinearCircle}
                                     )

        self.poly_guide = hou.GeometryDrawableGroup("poly_guide")

        self.poly_guide.addDrawable(face)
        self.poly_guide.addDrawable(line)
        self.poly_guide.addDrawable(point)
示例#3
0
文件: ruler.py 项目: mokchira/ruler
 def __init__(self, scene_viewer, color, show_text, text_scale):
     line = createLineGeometry()
     frustum = createFrustumGeometry()
     self.color = color
     self.disk_x = Measurement.disk_maker.makeDisk((1, 0, 0), (.7, .2, .2))
     self.disk_y = Measurement.disk_maker.makeDisk((0, 1, 0), (.2, .7, .2))
     self.disk_z = Measurement.disk_maker.makeDisk((0, 0, 1), (.2, .2, .7))
     self.scene_viewer = scene_viewer
     self.tail_spot_drawable = hou.GeometryDrawable(
         scene_viewer, hou.drawableGeometryType.Line, "tail_spot", frustum)
     self.head_spot_drawable = hou.GeometryDrawable(
         scene_viewer, hou.drawableGeometryType.Line, "head_spot", frustum)
     self.line_drawable = hou.GeometryDrawable(
         scene_viewer, hou.drawableGeometryType.Line, "line", line)
     self.tail_disk_drawable = None
     self.head_disk_drawable = None
     self.text_drawable = hou.TextDrawable(scene_viewer, "text_drawable")
     self.text_params = {
         'text': None,
         'translate': hou.Vector3(0.0, 0.0, 0.0),
         'highlight_mode': hou.drawableHighlightMode.MatteOverGlow,
         'glow_width': 10,
         'color2': hou.Vector4(0, 0, 0, 0.5),
         'scale': hou.Vector3(text_scale, text_scale, text_scale)
     }
     self.spot_params = {
         'color1': color.getVec(),
         'fade_factor': 0.5,
         'highlight_mode': hou.drawableHighlightMode.MatteOverGlow,
         'glow_width': 5
     }
     self.line_params = {
         'line_width': 4.0,
         'style': (10.0, 5.0),
         'color1': color.getVec(),
         'fade_factor': 0.3,
         'highlight_mode': hou.drawableHighlightMode.MatteOverGlow,
         'glow_width': 5
     }
     self.tail_pos = hou.Vector3(0.0, 0.0, 0.0)
     self.head_pos = hou.Vector3(0.0, 0.0, 0.0)
     self.spot_size = 0.01
     self.measurement = 0.0
     self.font_size = Measurement.default_font_size
     self.font_color = color.getHexStr()
     self.text = Measurement.default_text
     self.curPlane = None
     self.angle_snapping = False
     self.name = ""
     self.show_text = show_text
     self.updateTextField()
示例#4
0
文件: ruler.py 项目: mokchira/ruler
 def setHeadDisk(self, plane, scene_viewer):
     if plane == Plane.X:
         self.head_disk_drawable = hou.GeometryDrawable(
             scene_viewer, hou.drawableGeometryType.Line, "circle",
             self.disk_x)
     elif plane == Plane.Y:
         self.head_disk_drawable = hou.GeometryDrawable(
             scene_viewer, hou.drawableGeometryType.Line, "circle",
             self.disk_y)
     elif plane == Plane.Z:
         self.head_disk_drawable = hou.GeometryDrawable(
             scene_viewer, hou.drawableGeometryType.Line, "circle",
             self.disk_z)
     else:
         return
示例#5
0
文件: ruler.py 项目: mokchira/ruler
 def setTailDisk(self, plane, scene_viewer, model_to_camera, camera_to_ndc):
     if plane == Plane.X:
         self.tail_disk_drawable = hou.GeometryDrawable(
             scene_viewer, hou.drawableGeometryType.Line, "circle",
             self.disk_x)
     if plane == Plane.Y:
         self.tail_disk_drawable = hou.GeometryDrawable(
             scene_viewer, hou.drawableGeometryType.Line, "circle",
             self.disk_y)
     if plane == Plane.Z:
         self.tail_disk_drawable = hou.GeometryDrawable(
             scene_viewer, hou.drawableGeometryType.Line, "circle",
             self.disk_z)
     self.setDiskTransform(self.tail_disk_drawable, self.tail_pos,
                           model_to_camera, camera_to_ndc)
示例#6
0
def makeGeometryDrawableGroup(sceneviewer, groupname):
    # Construct a geometry drawable group
    line = hou.GeometryDrawable(sceneviewer,
                                hou.drawableGeometryType.Line,
                                "line",
                                params={
                                    "color1": (0.0, 0.0, 1.0, 1.0),
                                    "style":
                                    hou.drawableGeometryLineStyle.Plain,
                                    "line_width": 3
                                })

    face = hou.GeometryDrawable(sceneviewer,
                                hou.drawableGeometryType.Face,
                                "face",
                                params={
                                    "style":
                                    hou.drawableGeometryFaceStyle.Plain,
                                    "color1": (0.0, 1.0, 0.0, 1.0)
                                })

    point = hou.GeometryDrawable(
        sceneviewer,
        hou.drawableGeometryType.Point,
        "point",
        params={
            "num_rings": 2,
            "radius": 10,
            "color1": (1.0, 0.0, 0.0, 1.0),
            "style": hou.drawableGeometryPointStyle.LinearCircle
        })

    groupgeo = hou.GeometryDrawableGroup(groupname)

    groupgeo.addDrawable(face)
    groupgeo.addDrawable(line)
    groupgeo.addDrawable(point)

    return groupgeo
示例#7
0
文件: ruler.py 项目: mokchira/ruler
 def __init__(self, state_name, scene_viewer):
     self.state_name = state_name
     self.scene_viewer = scene_viewer
     self.geometry_viewport = hou.SceneViewer.curViewport(self.scene_viewer)
     self.geo_intersector = None
     self.geometry = None
     self.measurements = MeasurementContainer(self.geometry_viewport,
                                              State.text_size)
     self.current_node = None
     self.curPlane = None
     self.show(False)
     self.angle_snapping = False
     self.cur_angle = 0
     point = createPointGeometry()
     self.point_drawable = hou.GeometryDrawable(
         scene_viewer, hou.drawableGeometryType.Point, "point", point)
     self.point_params = {
         'style': hou.drawableGeometryPointStyle.SmoothCircle,
         'radius': 2,
         'color2': hou.Vector4(0, 1, 1, 1),
         'color1': hou.Vector4(.9, .8, .1, 1.),
         'highlight_mode': hou.drawableHighlightMode.MatteOverGlow,
         'glow_width': 20
     }
     self.active = False
     self.angle_text_drawable = hou.TextDrawable(self.scene_viewer,
                                                 "angle_text")
     self.angle_text_params = {
         'text': "Fizz",
         'translate': hou.Vector3(0.0, 0.0, 0.0),
         'highlight_mode': hou.drawableHighlightMode.MatteOverGlow,
         'glow_width': 10,
         'color2': hou.Vector4(0, 0, 0, 0.5)
     }
     self.arc_drawable = hou.GeometryDrawable(self.scene_viewer,
                                              hou.drawableGeometryType.Line,
                                              "arc")
     self.mode = Mode.doing_nothing
示例#8
0
    def __init__(self, sceneviewer):

        self.scene_viewer = sceneviewer

        self.knob_geo = hou.Geometry()
        self.knob_pt = self.knob_geo.createPoint()

        self.knob_drawable = hou.GeometryDrawable(
            self.scene_viewer,
            hou.drawableGeometryType.Point,
            "highlighter_knob",
            params={
                'style': hou.drawableGeometryPointStyle.SmoothCircle,
                'color1': hou.Vector4(1.0, 1.0, 1.0, 1.0),
                'radius': 8,
                'fade_factor': 0.5
            })

        self.knob_drawable.setGeometry(self.knob_geo)

        self.show(False)