示例#1
0
 def __init__(self, parent, **kwargs):
     super(RandoTerrainHomeWidget, self).__init__(parent, **kwargs)
     self._firstView = True
     self._statusBox, statusLayout = self._createElementWidget(
         self, QtGui.QVBoxLayout, True)
     statusLayout.addStretch()
     self._nimbleStatus = NimbleStatusElement(
         self._statusBox,
         disabled=self.mainWindow.appConfig.get(
             UserConfigEnum.NIMBLE_TEST_STATUS, True))
     statusLayout.addWidget(self._nimbleStatus)
     self.magnitudeValLabel.setText('1')
     self.magnitude = 1
     self.sizeDial.setRange(1, 10)
     self.magnitudeDial.setRange(1, 100)
     self.sizeDial.valueChanged.connect(self._sizeChanged)
     self.magnitudeDial.valueChanged.connect(self._magnitudeChanged)
     self.generateTerrainButton.clicked.connect(self._generateTerrain)
     self.sizes = []
     for n in range(1, 11):
         self.sizes.append(pow(2, n) + 1)
     self._sizeChanged(1)
 def __init__(self, parent, **kwargs):
     super(RandoTerrainHomeWidget, self).__init__(parent, **kwargs)
     self._firstView = True
     self._statusBox, statusLayout = self._createElementWidget(self, QtGui.QVBoxLayout, True)
     statusLayout.addStretch()
     self._nimbleStatus = NimbleStatusElement(
         self._statusBox,
         disabled=self.mainWindow.appConfig.get(UserConfigEnum.NIMBLE_TEST_STATUS, True))
     statusLayout.addWidget(self._nimbleStatus)
     self.magnitudeValLabel.setText('1')
     self.magnitude = 1
     self.sizeDial.setRange(1, 10)
     self.magnitudeDial.setRange(1, 100)
     self.sizeDial.valueChanged.connect(self._sizeChanged)
     self.magnitudeDial.valueChanged.connect(self._magnitudeChanged)
     self.generateTerrainButton.clicked.connect(self._generateTerrain)
     self.sizes = []
     for n in range(1, 11):
         self.sizes.append(pow(2, n) + 1)
     self._sizeChanged(1)
示例#3
0
class RandoTerrainHomeWidget(PyGlassWidget):
    def __init__(self, parent, **kwargs):
        super(RandoTerrainHomeWidget, self).__init__(parent, **kwargs)
        self._firstView = True
        self._statusBox, statusLayout = self._createElementWidget(
            self, QtGui.QVBoxLayout, True)
        statusLayout.addStretch()
        self._nimbleStatus = NimbleStatusElement(
            self._statusBox,
            disabled=self.mainWindow.appConfig.get(
                UserConfigEnum.NIMBLE_TEST_STATUS, True))
        statusLayout.addWidget(self._nimbleStatus)
        self.magnitudeValLabel.setText('1')
        self.magnitude = 1
        self.sizeDial.setRange(1, 10)
        self.magnitudeDial.setRange(1, 100)
        self.sizeDial.valueChanged.connect(self._sizeChanged)
        self.magnitudeDial.valueChanged.connect(self._magnitudeChanged)
        self.generateTerrainButton.clicked.connect(self._generateTerrain)
        self.sizes = []
        for n in range(1, 11):
            self.sizes.append(pow(2, n) + 1)
        self._sizeChanged(1)

    def _sizeChanged(self, val):
        self.size = self.sizes[val - 1]
        self.dimensionsLabel.setText(str(self.size) + "x" + str(self.size))

    def _magnitudeChanged(self, val):
        self.magnitude = val
        self.magnitudeValLabel.setText(str(val))

    def _activateWidgetDisplayImpl(self, **kwargs):
        if self._firstView:
            self._nimbleStatus.refresh()
            self._firstView = False

    def _generateTerrain(self):
        cmds.polyPlane(n='terrain',
                       sx=self.size - 1,
                       sy=self.size - 1,
                       w=self.size,
                       h=self.size)
        shapes = cmds.ls("terrain", sl=True, fl=True)
        self.terrain = shapes[0]

        offset_magnitude = int(self.magnitude)
        self.setVertexHeight((0, 0),
                             randint(-offset_magnitude, offset_magnitude))
        self.setVertexHeight((self.size - 1, 0),
                             randint(-offset_magnitude, offset_magnitude))
        self.setVertexHeight((0, self.size - 1),
                             randint(-offset_magnitude, offset_magnitude))
        self.setVertexHeight((self.size - 1, self.size - 1),
                             randint(-offset_magnitude, offset_magnitude))

        length = self.size - 1
        while length >= 1:
            half_length = length / 2
            for x in range(0, self.size - 1, length):
                for y in range(0, self.size - 1, length):
                    bottom_left = self.getVertexHeight((x, y))
                    bottom_right = self.getVertexHeight((x + length, y))
                    top_left = self.getVertexHeight((x, y + length))
                    top_right = self.getVertexHeight((x + length, y + length))
                    average = (top_left + top_right + bottom_left +
                               bottom_right) / 4.0
                    offset = randint(int(-offset_magnitude),
                                     int(offset_magnitude))
                    point = (x + half_length, y + half_length)
                    flat_index = self.getFlatIndex(point)
                    if 0 <= flat_index <= self.size * self.size:
                        self.setVertexHeight(point, average + offset)

            for x in range(0, self.size - 1, half_length):
                for y in range((x + half_length) % length, self.size - 1,
                               length):
                    left = self.getVertexHeight(
                        ((x - half_length + self.size) % self.size, y))
                    right = self.getVertexHeight(
                        ((x + half_length) % self.size, y))
                    top = self.getVertexHeight(
                        (x, (y + half_length + self.size) % self.size))
                    bottom = self.getVertexHeight(
                        (x, (y - half_length) % self.size))
                    average = (left + right + top + bottom) / 4
                    offset = randint(int(-offset_magnitude),
                                     int(offset_magnitude))
                    point = (x, y)
                    flat_index = self.getFlatIndex(point)
                    if 0 <= flat_index <= self.size * self.size:
                        self.setVertexHeight((x, y), average + offset)
            offset_magnitude /= 2.0
            length /= 2
        print "DONE!"

    def getVertexHeight(self, vertex):
        return self.getVertex(vertex)[1]

    def getFlatIndex(self, vertex):
        x, y = vertex
        flat_index = y * self.size + x
        return flat_index

    def setVertexHeight(self, vertex, val):
        flat_index = self.getFlatIndex(vertex)
        index_string = str(self.terrain)
        index_string += ".pnts["
        index_string += str(flat_index)
        index_string += "]"
        vertex_position = cmds.xform(index_string,
                                     query=True,
                                     translation=True,
                                     worldSpace=True)
        cmds.xform(index_string,
                   t=(vertex_position[0], val, vertex_position[2]),
                   worldSpace=True)

    def getVertex(self, vertex):
        x, y = vertex
        if x * y < (self.size * self.size) - 1:
            flat_index = y * self.size + x
            index_string = str(self.terrain)
            index_string += ".pnts["
            index_string += str(flat_index)
            index_string += "]"
            vertex_position = cmds.xform(index_string,
                                         query=True,
                                         translation=True,
                                         worldSpace=True)
            return vertex_position
class RandoTerrainHomeWidget(PyGlassWidget):
    def __init__(self, parent, **kwargs):
        super(RandoTerrainHomeWidget, self).__init__(parent, **kwargs)
        self._firstView = True
        self._statusBox, statusLayout = self._createElementWidget(self, QtGui.QVBoxLayout, True)
        statusLayout.addStretch()
        self._nimbleStatus = NimbleStatusElement(
            self._statusBox,
            disabled=self.mainWindow.appConfig.get(UserConfigEnum.NIMBLE_TEST_STATUS, True))
        statusLayout.addWidget(self._nimbleStatus)
        self.magnitudeValLabel.setText('1')
        self.magnitude = 1
        self.sizeDial.setRange(1, 10)
        self.magnitudeDial.setRange(1, 100)
        self.sizeDial.valueChanged.connect(self._sizeChanged)
        self.magnitudeDial.valueChanged.connect(self._magnitudeChanged)
        self.generateTerrainButton.clicked.connect(self._generateTerrain)
        self.sizes = []
        for n in range(1, 11):
            self.sizes.append(pow(2, n) + 1)
        self._sizeChanged(1)

    def _sizeChanged(self, val):
        self.size = self.sizes[val - 1]
        self.dimensionsLabel.setText(str(self.size) + "x" + str(self.size))

    def _magnitudeChanged(self, val):
        self.magnitude = val
        self.magnitudeValLabel.setText(str(val))

    def _activateWidgetDisplayImpl(self, **kwargs):
        if self._firstView:
            self._nimbleStatus.refresh()
            self._firstView = False

    def _generateTerrain(self):
        cmds.polyPlane(n='terrain', sx=self.size-1, sy=self.size-1, w=self.size, h=self.size)
        shapes = cmds.ls("terrain", sl=True, fl=True)
        self.terrain = shapes[0]

        offset_magnitude = int(self.magnitude)
        self.setVertexHeight((0, 0), randint(-offset_magnitude, offset_magnitude))
        self.setVertexHeight((self.size - 1, 0), randint(-offset_magnitude, offset_magnitude))
        self.setVertexHeight((0, self.size - 1), randint(-offset_magnitude, offset_magnitude))
        self.setVertexHeight((self.size - 1, self.size - 1), randint(-offset_magnitude, offset_magnitude))

        length = self.size - 1
        while length >= 1:
            half_length = length / 2
            for x in range(0, self.size - 1, length):
                for y in range(0, self.size - 1, length):
                    bottom_left = self.getVertexHeight((x, y))
                    bottom_right = self.getVertexHeight((x + length, y))
                    top_left = self.getVertexHeight((x, y + length))
                    top_right = self.getVertexHeight((x + length, y + length))
                    average = (top_left + top_right + bottom_left + bottom_right) / 4.0
                    offset = randint(int(-offset_magnitude), int(offset_magnitude))
                    point = (x + half_length, y + half_length)
                    flat_index = self.getFlatIndex(point)
                    if 0 <= flat_index <= self.size * self.size:
                        self.setVertexHeight(point, average + offset)

            for x in range(0, self.size - 1, half_length):
                for y in range((x + half_length) % length, self.size-1, length):
                    left = self.getVertexHeight(((x - half_length + self.size) % self.size, y))
                    right = self.getVertexHeight(((x + half_length) % self.size, y))
                    top = self.getVertexHeight((x, (y + half_length + self.size) % self.size))
                    bottom = self.getVertexHeight((x, (y - half_length) % self.size))
                    average = (left + right + top + bottom) / 4
                    offset = randint(int(-offset_magnitude), int(offset_magnitude))
                    point = (x, y)
                    flat_index = self.getFlatIndex(point)
                    if 0 <= flat_index <= self.size * self.size:
                        self.setVertexHeight((x, y), average + offset)
            offset_magnitude /= 2.0
            length /= 2
        print "DONE!"

    def getVertexHeight(self, vertex):
        return self.getVertex(vertex)[1]

    def getFlatIndex(self, vertex):
        x, y = vertex
        flat_index = y * self.size + x
        return flat_index

    def setVertexHeight(self, vertex, val):
        flat_index = self.getFlatIndex(vertex)
        index_string = str(self.terrain)
        index_string += ".pnts["
        index_string += str(flat_index)
        index_string += "]"
        vertex_position = cmds.xform(index_string, query=True, translation=True, worldSpace=True)
        cmds.xform(index_string, t=(vertex_position[0], val, vertex_position[2]), worldSpace=True)

    def getVertex(self, vertex):
        x, y = vertex
        if x * y < (self.size * self.size) - 1:
            flat_index = y * self.size + x
            index_string = str(self.terrain)
            index_string += ".pnts["
            index_string += str(flat_index)
            index_string += "]"
            vertex_position = cmds.xform(index_string, query=True, translation=True, worldSpace=True)
            return vertex_position