예제 #1
0
 def fromString(self, aString):
     # format is x1 y1 x2 y2
     stream = usstream.KfStringStream()
     stream.onStringSeparator(aString, " ")
     succesful, self.x1 = usupport.boundForString(stream.nextToken(), uparams.kFieldFloat)
     succesful, self.y1 = usupport.boundForString(stream.nextToken(), uparams.kFieldFloat)
     succesful, self.x2 = usupport.boundForString(stream.nextToken(), uparams.kFieldFloat)
     succesful, self.y2 = usupport.boundForString(stream.nextToken(), uparams.kFieldFloat)
     return(self)
예제 #2
0
 def adjustValue(self):
     newString = ansistring()
     oldValueInCurrentUnit = 0.0
     newValue = 0.0
     newValueInPlantUnit = 0.0
     oldString = ""
     prompt = ""
     nameString = ""
     unitString = ""
     minString = ""
     maxString = ""
     outOfRange = false
     
     oldValueInCurrentUnit = self.toCurrentUnit(self.currentValue)
     newString = usupport.digitValueString(oldValueInCurrentUnit)
     oldString = newString
     nameString = UNRESOLVED.copy(self.Caption, 1, 30)
     if len(nameString) == 30:
         nameString = nameString + "..."
     unitString = uunits.UnitStringForEnum(self.param.unitSet, self.currentUnitIndex)
     minString = usupport.digitValueString(self.toCurrentUnit(self.minValue))
     maxString = usupport.digitValueString(self.toCurrentUnit(self.maxValue))
     prompt = "Type a new value."
     if InputQuery("Enter value", prompt, newString):
         if (newString != oldString) and (usupport.boundForString(newString, self.param.fieldType, newValue)):
             newValueInPlantUnit = self.toPlantUnit(newValue)
             outOfRange = self.checkValueAgainstBounds(newValueInPlantUnit)
             if not outOfRange:
                 self.currentValue = newValueInPlantUnit
                 umain.MainForm.doCommand(updcom.PdChangeRealValueCommand().createCommandWithListOfPlants(umain.MainForm.selectedPlants, self.currentValue, self.param.fieldNumber, self.arrayIndex, self.param.regrow))
                 self.updateDisplay()
                 self.Invalidate()
예제 #3
0
def stringToSCurve(aString):
    result = SCurveStructure()
    
    result.x1 = 0
    result.y1 = 0
    result.x2 = 0
    result.y2 = 0
    result.c1 = 0
    result.c2 = 0
    # format is x1 y1 x2 y2 
    stream = usstream.KfStringStream()
    stream.onStringSeparator(aString, " ")
    succesful, result.x1 = usupport.boundForString(stream.nextToken(), uparams.kFieldFloat)
    succesful, result.y1 = usupport.boundForString(stream.nextToken(), uparams.kFieldFloat)
    succesful, result.x2 = usupport.boundForString(stream.nextToken(), uparams.kFieldFloat)
    succesful, result.y2 = usupport.boundForString(stream.nextToken(), uparams.kFieldFloat)
    return result
예제 #4
0
    def adjustValue(self):
        newString = ansistring()
        oldString = ""
        nameString = ""
        prompt = ""
        currentUnitString = ""
        newValue = 0.0
        oldValue = 0.0
        valueInCurrentUnit = 0.0
        index = 0
        failed = false
        points = [0] * (range(0, 1 + 1) + 1)

        if self.selectedItemIndex < kItemX1:
            return
        index = self.selectedItemIndex - kItemX1
        oldValue = self.currentValues[index]
        nameString = UNRESOLVED.copy(self.Caption, 1, 30)
        currentUnitString = uunits.UnitStringForEnum(self.param.unitSet, self.currentUnitIndex)
        if len(nameString) == 30:
            nameString = nameString + "..."
        if not odd(index):
            # x
            valueInCurrentUnit = self.toCurrentUnit(self.currentValues[index])
            newString = usupport.digitValueString(valueInCurrentUnit)
            # y
            # don't convert y value - is always 0-1
        else:
            valueInCurrentUnit = self.currentValues[index]
            newString = FloatToStrF(valueInCurrentUnit, UNRESOLVED.ffFixed, 7, 2)
        oldString = newString
        prompt = "Type a new value."
        if InputQuery("Enter value", prompt, newString):
            if (newString != oldString) and (usupport.boundForString(newString, self.param.fieldType, newValue)):
                if not odd(index):
                    self.currentValues[index] = self.toPlantUnit(newValue)
                else:
                    self.currentValues[index] = newValue
                points[0] = self.pointFromXY(self.currentValues[0], self.currentValues[1])
                points[1] = self.pointFromXY(self.currentValues[2], self.currentValues[3])
                self.keepPointInGraphRect(points[(index - 1) / 2])
                self.keepPointsFromCrossing(points[0], points[1], (index - 1) / 2)
                failed = self.drawSCurve(false, failed)
                if failed:
                    self.currentValues[index] = oldValue
                    ShowMessage("Invalid value.")
                else:
                    # don't create change point command here, because only one float is changed
                    umain.MainForm.doCommand(
                        updcom.PdChangeRealValueCommand().createCommandWithListOfPlants(
                            umain.MainForm.selectedPlants,
                            self.currentValues[index],
                            self.param.fieldNumber,
                            index,
                            self.param.regrow,
                        )
                    )
                    self.Invalidate()
예제 #5
0
def stringToSCurve(aString):
    result = SCurveStructure()

    result.x1 = 0
    result.y1 = 0
    result.x2 = 0
    result.y2 = 0
    result.c1 = 0
    result.c2 = 0
    # format is x1 y1 x2 y2
    stream = usstream.KfStringStream()
    stream.onStringSeparator(aString, " ")
    succesful, result.x1 = usupport.boundForString(stream.nextToken(),
                                                   uparams.kFieldFloat)
    succesful, result.y1 = usupport.boundForString(stream.nextToken(),
                                                   uparams.kFieldFloat)
    succesful, result.x2 = usupport.boundForString(stream.nextToken(),
                                                   uparams.kFieldFloat)
    succesful, result.y2 = usupport.boundForString(stream.nextToken(),
                                                   uparams.kFieldFloat)
    return result
예제 #6
0
def stringToSCurve(aString):
    result = SCurveStructure()
    stream = KfStringStream()
    
    result.x1 = 0
    result.y1 = 0
    result.x2 = 0
    result.y2 = 0
    result.c1 = 0
    result.c2 = 0
    # format is x1 y1 x2 y2 
    stream = usstream.KfStringStream.create
    try:
        stream.onStringSeparator(aString, " ")
        result.x1 = usupport.boundForString(stream.nextToken(), uparams.kFieldFloat, result.x1)
        result.y1 = usupport.boundForString(stream.nextToken(), uparams.kFieldFloat, result.y1)
        result.x2 = usupport.boundForString(stream.nextToken(), uparams.kFieldFloat, result.x2)
        result.y2 = usupport.boundForString(stream.nextToken(), uparams.kFieldFloat, result.y2)
    finally:
        stream.free
    return result
예제 #7
0
    def adjustValue(self):
        newString = ansistring()
        oldValueInCurrentUnit = 0.0
        newValue = 0.0
        newValueInPlantUnit = 0.0
        oldString = ""
        prompt = ""
        nameString = ""
        unitString = ""
        minString = ""
        maxString = ""
        outOfRange = false

        oldValueInCurrentUnit = self.toCurrentUnit(self.currentValue)
        newString = usupport.digitValueString(oldValueInCurrentUnit)
        oldString = newString
        nameString = UNRESOLVED.copy(self.Caption, 1, 30)
        if len(nameString) == 30:
            nameString = nameString + "..."
        unitString = uunits.UnitStringForEnum(self.param.unitSet,
                                              self.currentUnitIndex)
        minString = usupport.digitValueString(self.toCurrentUnit(
            self.minValue))
        maxString = usupport.digitValueString(self.toCurrentUnit(
            self.maxValue))
        prompt = "Type a new value."
        if InputQuery("Enter value", prompt, newString):
            if (newString != oldString) and (usupport.boundForString(
                    newString, self.param.fieldType, newValue)):
                newValueInPlantUnit = self.toPlantUnit(newValue)
                outOfRange = self.checkValueAgainstBounds(newValueInPlantUnit)
                if not outOfRange:
                    self.currentValue = newValueInPlantUnit
                    umain.MainForm.doCommand(updcom.PdChangeRealValueCommand(
                    ).createCommandWithListOfPlants(
                        umain.MainForm.selectedPlants, self.currentValue,
                        self.param.fieldNumber, self.arrayIndex,
                        self.param.regrow))
                    self.updateDisplay()
                    self.Invalidate()