Merge branch 'master' of ssh://git.code.sf.net/p/free-cad/code
This commit is contained in:
commit
3c6bc1eaea
|
@ -140,6 +140,7 @@ def importFrd(filename):
|
||||||
disp = m['Displacement']
|
disp = m['Displacement']
|
||||||
o = FreeCAD.ActiveDocument.addObject('Fem::FemResultVector','Displacement')
|
o = FreeCAD.ActiveDocument.addObject('Fem::FemResultVector','Displacement')
|
||||||
o.Values = disp.values()
|
o.Values = disp.values()
|
||||||
|
o.DataType = 'Displacement'
|
||||||
o.ElementNumbers = disp.keys()
|
o.ElementNumbers = disp.keys()
|
||||||
if(MeshObject):
|
if(MeshObject):
|
||||||
o.Mesh = MeshObject
|
o.Mesh = MeshObject
|
||||||
|
@ -153,12 +154,15 @@ def importFrd(filename):
|
||||||
mstress.append( sqrt( pow( i[0] - i[1] ,2) + pow( i[1] - i[2] ,2) + pow( i[2] - i[0] ,2) + 6 * (pow(i[3],2)+pow(i[4],2)+pow(i[5],2) ) ) )
|
mstress.append( sqrt( pow( i[0] - i[1] ,2) + pow( i[1] - i[2] ,2) + pow( i[2] - i[0] ,2) + 6 * (pow(i[3],2)+pow(i[4],2)+pow(i[5],2) ) ) )
|
||||||
|
|
||||||
o.Values = mstress
|
o.Values = mstress
|
||||||
|
o.DataType = 'VanMisesStress'
|
||||||
o.ElementNumbers = stress.keys()
|
o.ElementNumbers = stress.keys()
|
||||||
if(MeshObject):
|
if(MeshObject):
|
||||||
o.Mesh = MeshObject
|
o.Mesh = MeshObject
|
||||||
AnalysisObject.Member = AnalysisObject.Member + [o]
|
AnalysisObject.Member = AnalysisObject.Member + [o]
|
||||||
if(FreeCAD.GuiUp):
|
if(FreeCAD.GuiUp):
|
||||||
import FemGui
|
import FemGui, FreeCADGui
|
||||||
|
if FreeCADGui.activeWorkbench().name() != 'FemWorkbench':
|
||||||
|
FreeCADGui.activateWorkbench("FemWorkbench")
|
||||||
FemGui.setActiveAnalysis(AnalysisObject)
|
FemGui.setActiveAnalysis(AnalysisObject)
|
||||||
|
|
||||||
def insert(filename,docname):
|
def insert(filename,docname):
|
||||||
|
|
|
@ -20,8 +20,17 @@
|
||||||
#* *
|
#* *
|
||||||
#***************************************************************************
|
#***************************************************************************
|
||||||
|
|
||||||
def DebugLoad():
|
__title__="Mechanical Analysis managment"
|
||||||
import MechanicalAnalysis,MechanicalMaterial
|
__author__ = "Juergen Riegel"
|
||||||
reload(MechanicalAnalysis)
|
__url__ = "http://www.freecadweb.org"
|
||||||
reload(MechanicalMaterial)
|
|
||||||
|
|
||||||
|
def colorValue(value,min,max):
|
||||||
|
'creates a homogenouse color ramp between [min,max] green to red'
|
||||||
|
if value < min: return (0.0,1.0,0.0)
|
||||||
|
if value > max: return (1.0,0.0,0.0)
|
||||||
|
if value < (min + (max-min)/2.0):
|
||||||
|
return ((value-min) / ((max-min)/2.0),1.0,0.0)
|
||||||
|
else:
|
||||||
|
return (1.0,1-((value-min-((max-min)/2.0)) / ((max-min)/2.0)),0.0)
|
||||||
|
|
|
@ -69,8 +69,7 @@ Gui::ToolBarItem* Workbench::setupToolBars() const
|
||||||
<< "Fem_ConstraintGear"
|
<< "Fem_ConstraintGear"
|
||||||
<< "Fem_ConstraintPulley"
|
<< "Fem_ConstraintPulley"
|
||||||
<< "Separator"
|
<< "Separator"
|
||||||
<< "Fem_ShowStressResult"
|
<< "Fem_ShowResult";
|
||||||
<< "Fem_ShowDisplacementResult";
|
|
||||||
return root;
|
return root;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -95,8 +94,7 @@ Gui::MenuItem* Workbench::setupMenuBar() const
|
||||||
<< "Fem_ConstraintGear"
|
<< "Fem_ConstraintGear"
|
||||||
<< "Fem_ConstraintPulley"
|
<< "Fem_ConstraintPulley"
|
||||||
<< "Separator"
|
<< "Separator"
|
||||||
<< "Fem_ShowStressResult"
|
<< "Fem_ShowResult"
|
||||||
<< "Fem_ShowDisplacementResult"
|
|
||||||
;
|
;
|
||||||
|
|
||||||
return root;
|
return root;
|
||||||
|
|
|
@ -46,3 +46,4 @@ ParGrp = App.ParamGet("System parameter:Modules").GetGroup("Fem")
|
||||||
FreeCAD.addExportType("TetGen file (*.poly)","convert2TetGen")
|
FreeCAD.addExportType("TetGen file (*.poly)","convert2TetGen")
|
||||||
FreeCAD.addImportType("FEM formats (*.unv *.med *.dat *.bdf)","Fem")
|
FreeCAD.addImportType("FEM formats (*.unv *.med *.dat *.bdf)","Fem")
|
||||||
FreeCAD.addExportType("FEM formats (*.unv *.med *.dat *.inp)","Fem")
|
FreeCAD.addExportType("FEM formats (*.unv *.med *.dat *.inp)","Fem")
|
||||||
|
FreeCAD.addImportType("CalculiX result (*.frd)","CalculixLib")
|
||||||
|
|
|
@ -20,7 +20,8 @@
|
||||||
#* *
|
#* *
|
||||||
#***************************************************************************
|
#***************************************************************************
|
||||||
|
|
||||||
import FreeCAD, Fem, os,sys,string,math,shutil,glob,subprocess,tempfile
|
import FreeCAD, Fem, FemLib
|
||||||
|
import os,sys,string,math,shutil,glob,subprocess,tempfile
|
||||||
|
|
||||||
if FreeCAD.GuiUp:
|
if FreeCAD.GuiUp:
|
||||||
import FreeCADGui,FemGui
|
import FreeCADGui,FemGui
|
||||||
|
@ -29,7 +30,7 @@ if FreeCAD.GuiUp:
|
||||||
from pivy import coin
|
from pivy import coin
|
||||||
import PyQt4.uic as uic
|
import PyQt4.uic as uic
|
||||||
|
|
||||||
__title__="Machine-Distortion Analysis managment"
|
__title__="Mechanical Analysis managment"
|
||||||
__author__ = "Juergen Riegel"
|
__author__ = "Juergen Riegel"
|
||||||
__url__ = "http://www.freecadweb.org"
|
__url__ = "http://www.freecadweb.org"
|
||||||
|
|
||||||
|
@ -100,47 +101,33 @@ class _CommandMechanicalJobControl:
|
||||||
return FreeCADGui.ActiveDocument != None and FemGui.getActiveAnalysis() != None
|
return FreeCADGui.ActiveDocument != None and FemGui.getActiveAnalysis() != None
|
||||||
|
|
||||||
|
|
||||||
class _CommandMechanicalShowStress:
|
|
||||||
|
class _CommandMechanicalShowResult:
|
||||||
"the Fem JobControl command definition"
|
"the Fem JobControl command definition"
|
||||||
def GetResources(self):
|
def GetResources(self):
|
||||||
return {'Pixmap' : 'Fem_ResultStress',
|
return {'Pixmap' : 'Fem_Result',
|
||||||
'MenuText': QtCore.QT_TRANSLATE_NOOP("Fem_ResultStress","Show stress result"),
|
'MenuText': QtCore.QT_TRANSLATE_NOOP("Fem_ResultDisplacement","Show result"),
|
||||||
'Accel': "A",
|
'Accel': "A",
|
||||||
'ToolTip': QtCore.QT_TRANSLATE_NOOP("Fem_ResultStress","Show stress result")}
|
'ToolTip': QtCore.QT_TRANSLATE_NOOP("Fem_ResultDisplacement","Show result imformatation of an analysis")}
|
||||||
|
|
||||||
def Activated(self):
|
|
||||||
import FemGui
|
|
||||||
|
|
||||||
taskd = _JobControlTaskPanel(FemGui.getActiveAnalysis())
|
|
||||||
#taskd.obj = vobj.Object
|
|
||||||
taskd.update()
|
|
||||||
FreeCADGui.Control.showDialog(taskd)
|
|
||||||
|
|
||||||
|
|
||||||
def IsActive(self):
|
|
||||||
import FemGui
|
|
||||||
return FreeCADGui.ActiveDocument != None and FemGui.getActiveAnalysis() != None
|
|
||||||
|
|
||||||
|
|
||||||
class _CommandMechanicalShowDisplacement:
|
|
||||||
"the Fem JobControl command definition"
|
|
||||||
def GetResources(self):
|
|
||||||
return {'Pixmap' : 'Fem_ResultDisplacement',
|
|
||||||
'MenuText': QtCore.QT_TRANSLATE_NOOP("Fem_ResultDisplacement","Show displacement result"),
|
|
||||||
'Accel': "A",
|
|
||||||
'ToolTip': QtCore.QT_TRANSLATE_NOOP("Fem_ResultDisplacement","Show displacement result")}
|
|
||||||
|
|
||||||
def Activated(self):
|
def Activated(self):
|
||||||
import FemGui
|
import FemGui
|
||||||
DisplacementObject = None
|
DisplacementObject = None
|
||||||
for i in FemGui.getActiveAnalysis().Member:
|
for i in FemGui.getActiveAnalysis().Member:
|
||||||
if i.isDerivedFrom("Fem::FemResultVector"):
|
if i.isDerivedFrom("Fem::FemResultVector"):
|
||||||
|
if i.DataType == 'Displacement':
|
||||||
DisplacementObject = i
|
DisplacementObject = i
|
||||||
if not DisplacementObject:
|
StressObject = None
|
||||||
QtGui.QMessageBox.critical(None, "Missing prerequisit","No displacement result in active Analysis")
|
for i in FemGui.getActiveAnalysis().Member:
|
||||||
|
if i.isDerivedFrom("Fem::FemResultValue"):
|
||||||
|
if i.DataType == 'VanMisesStress':
|
||||||
|
StressObject = i
|
||||||
|
|
||||||
|
if not DisplacementObject and not StressObject:
|
||||||
|
QtGui.QMessageBox.critical(None, "Missing prerequisit","No result found in active Analysis")
|
||||||
return
|
return
|
||||||
|
|
||||||
taskd = _DisplacementControlTaskPanel(FemGui.getActiveAnalysis())
|
taskd = _ResultControlTaskPanel(FemGui.getActiveAnalysis())
|
||||||
#taskd.obj = vobj.Object
|
#taskd.obj = vobj.Object
|
||||||
taskd.update()
|
taskd.update()
|
||||||
FreeCADGui.Control.showDialog(taskd)
|
FreeCADGui.Control.showDialog(taskd)
|
||||||
|
@ -314,7 +301,7 @@ class _JobControlTaskPanel:
|
||||||
#poisson_ratio = float(matmap['FEM_poissonratio'])
|
#poisson_ratio = float(matmap['FEM_poissonratio'])
|
||||||
|
|
||||||
|
|
||||||
class _DisplacementControlTaskPanel:
|
class _ResultControlTaskPanel:
|
||||||
'''The control for the displacement post-processing'''
|
'''The control for the displacement post-processing'''
|
||||||
def __init__(self,object):
|
def __init__(self,object):
|
||||||
# the panel has a tree widget that contains categories
|
# the panel has a tree widget that contains categories
|
||||||
|
@ -328,8 +315,18 @@ class _DisplacementControlTaskPanel:
|
||||||
self.formUi.setupUi(self.form)
|
self.formUi.setupUi(self.form)
|
||||||
|
|
||||||
#Connect Signals and Slots
|
#Connect Signals and Slots
|
||||||
#QtCore.QObject.connect(self.formUi.toolButton_chooseOutputDir, QtCore.SIGNAL("clicked()"), self.chooseOutputDir)
|
QtCore.QObject.connect(self.formUi.radioButton_Displacement, QtCore.SIGNAL("clicked(bool)"), self.displacementClicked)
|
||||||
#QtCore.QObject.connect(self.formUi.pushButton_generate, QtCore.SIGNAL("clicked()"), self.run)
|
QtCore.QObject.connect(self.formUi.radioButton_Stress, QtCore.SIGNAL("clicked(bool)"), self.stressClicked)
|
||||||
|
QtCore.QObject.connect(self.formUi.radioButton_NoColor, QtCore.SIGNAL("clicked(bool)"), self.noColorClicked)
|
||||||
|
QtCore.QObject.connect(self.formUi.checkBox_ShowDisplacement, QtCore.SIGNAL("clicked(bool)"), self.showDisplacementClicked)
|
||||||
|
|
||||||
|
QtCore.QObject.connect(self.formUi.verticalScrollBar_Factor, QtCore.SIGNAL("valueChanged(int)"), self.sliderValue)
|
||||||
|
|
||||||
|
QtCore.QObject.connect(self.formUi.spinBox_SliderFactor, QtCore.SIGNAL("valueChanged(double)"), self.sliderMaxValue)
|
||||||
|
QtCore.QObject.connect(self.formUi.spinBox_DisplacementFactor, QtCore.SIGNAL("valueChanged(double)"), self.displacementFactorValue)
|
||||||
|
|
||||||
|
self.DisplacementObject = None
|
||||||
|
self.StressObject = None
|
||||||
|
|
||||||
self.update()
|
self.update()
|
||||||
|
|
||||||
|
@ -338,10 +335,87 @@ class _DisplacementControlTaskPanel:
|
||||||
def getStandardButtons(self):
|
def getStandardButtons(self):
|
||||||
return int(QtGui.QDialogButtonBox.Close)
|
return int(QtGui.QDialogButtonBox.Close)
|
||||||
|
|
||||||
|
def displacementClicked(self,bool):
|
||||||
|
QtGui.qApp.setOverrideCursor(QtCore.Qt.WaitCursor)
|
||||||
|
self.setColorDisplacement()
|
||||||
|
QtGui.qApp.restoreOverrideCursor()
|
||||||
|
|
||||||
|
def stressClicked(self,bool):
|
||||||
|
print 'stressClicked()'
|
||||||
|
QtGui.qApp.setOverrideCursor(QtCore.Qt.WaitCursor)
|
||||||
|
self.setColorStress()
|
||||||
|
QtGui.qApp.restoreOverrideCursor()
|
||||||
|
|
||||||
|
def noColorClicked(self,bool):
|
||||||
|
self.MeshObject.ViewObject.NodeColor = {}
|
||||||
|
self.MeshObject.ViewObject.ElementColor = {}
|
||||||
|
|
||||||
|
def showDisplacementClicked(self,bool):
|
||||||
|
QtGui.qApp.setOverrideCursor(QtCore.Qt.WaitCursor)
|
||||||
|
self.setDisplacement()
|
||||||
|
QtGui.qApp.restoreOverrideCursor()
|
||||||
|
|
||||||
|
def sliderValue(self,value):
|
||||||
|
if(self.formUi.checkBox_ShowDisplacement.isChecked()):
|
||||||
|
self.MeshObject.ViewObject.animate(value)
|
||||||
|
|
||||||
|
self.formUi.spinBox_DisplacementFactor.setValue(value)
|
||||||
|
|
||||||
|
def sliderMaxValue(self,value):
|
||||||
|
print 'sliderMaxValue()'
|
||||||
|
self.formUi.verticalScrollBar_Factor.setMaximum(value)
|
||||||
|
|
||||||
|
def displacementFactorValue(self,value):
|
||||||
|
print 'displacementFactorValue()'
|
||||||
|
self.formUi.verticalScrollBar_Factor.setValue(value)
|
||||||
|
|
||||||
|
def setColorDisplacement(self):
|
||||||
|
if self.DisplacementObject:
|
||||||
|
values = self.DisplacementObject.Values
|
||||||
|
maxL = 0.0
|
||||||
|
for i in values:
|
||||||
|
if i.Length > maxL:
|
||||||
|
maxL = i.Length
|
||||||
|
|
||||||
|
self.formUi.lineEdit_Max.setText(str(maxL))
|
||||||
|
self.formUi.doubleSpinBox_MinValueColor.setValue(maxL)
|
||||||
|
|
||||||
|
colors = []
|
||||||
|
for i in values:
|
||||||
|
colors.append( FemLib.colorValue(i.Length,0.0,maxL) )
|
||||||
|
self.MeshObject.ViewObject.NodeColor = dict(zip( self.DisplacementObject.ElementNumbers,colors))
|
||||||
|
def setDisplacement(self):
|
||||||
|
if self.DisplacementObject:
|
||||||
|
values = self.DisplacementObject.Values
|
||||||
|
self.MeshObject.ViewObject.NodeDisplacement = dict(zip( self.DisplacementObject.ElementNumbers,values))
|
||||||
|
|
||||||
|
def setColorStress(self):
|
||||||
|
if self.StressObject:
|
||||||
|
values = self.StressObject.Values
|
||||||
|
maxVal = max(values)
|
||||||
|
self.formUi.doubleSpinBox_MinValueColor.setValue(maxVal)
|
||||||
|
colors = []
|
||||||
|
for i in values:
|
||||||
|
colors.append( FemLib.colorValue(i,0.0,maxVal) )
|
||||||
|
self.MeshObject.ViewObject.ElementColor = dict(zip(self.StressObject.ElementNumbers,colors))
|
||||||
|
|
||||||
def update(self):
|
def update(self):
|
||||||
'fills the widgets'
|
'fills the widgets'
|
||||||
#self.formUi.lineEdit_outputDir.setText(self.params.GetString("JobDir",'/'))
|
|
||||||
return
|
self.MeshObject = None
|
||||||
|
if FemGui.getActiveAnalysis():
|
||||||
|
for i in FemGui.getActiveAnalysis().Member:
|
||||||
|
if i.isDerivedFrom("Fem::FemMeshObject"):
|
||||||
|
self.MeshObject = i
|
||||||
|
|
||||||
|
for i in FemGui.getActiveAnalysis().Member:
|
||||||
|
if i.isDerivedFrom("Fem::FemResultVector"):
|
||||||
|
if i.DataType == 'Displacement':
|
||||||
|
self.DisplacementObject = i
|
||||||
|
for i in FemGui.getActiveAnalysis().Member:
|
||||||
|
if i.isDerivedFrom("Fem::FemResultValue"):
|
||||||
|
if i.DataType == 'VanMisesStress':
|
||||||
|
self.StressObject = i
|
||||||
|
|
||||||
def accept(self):
|
def accept(self):
|
||||||
FreeCADGui.Control.closeDialog()
|
FreeCADGui.Control.closeDialog()
|
||||||
|
@ -357,5 +431,4 @@ class _DisplacementControlTaskPanel:
|
||||||
|
|
||||||
FreeCADGui.addCommand('Fem_NewMechanicalAnalysis',_CommandNewMechanicalAnalysis())
|
FreeCADGui.addCommand('Fem_NewMechanicalAnalysis',_CommandNewMechanicalAnalysis())
|
||||||
FreeCADGui.addCommand('Fem_MechanicalJobControl',_CommandMechanicalJobControl())
|
FreeCADGui.addCommand('Fem_MechanicalJobControl',_CommandMechanicalJobControl())
|
||||||
FreeCADGui.addCommand('Fem_ShowStressResult',_CommandMechanicalShowStress())
|
FreeCADGui.addCommand('Fem_ShowResult',_CommandMechanicalShowResult())
|
||||||
FreeCADGui.addCommand('Fem_ShowDisplacementResult',_CommandMechanicalShowDisplacement())
|
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
<string>Stress</string>
|
<string>Stress</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="checked">
|
<property name="checked">
|
||||||
<bool>true</bool>
|
<bool>false</bool>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
@ -37,6 +37,9 @@
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Displacement</string>
|
<string>Displacement</string>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="checked">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
|
@ -44,6 +47,9 @@
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>No color</string>
|
<string>No color</string>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="checked">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
|
@ -56,7 +62,11 @@
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="0" column="1">
|
<item row="0" column="1">
|
||||||
<widget class="QDoubleSpinBox" name="doubleSpinBox_MinValueColor"/>
|
<widget class="QDoubleSpinBox" name="doubleSpinBox_MinValueColor">
|
||||||
|
<property name="readOnly">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="1" column="0">
|
<item row="1" column="0">
|
||||||
<widget class="QLabel" name="label_6">
|
<widget class="QLabel" name="label_6">
|
||||||
|
@ -67,6 +77,9 @@
|
||||||
</item>
|
</item>
|
||||||
<item row="1" column="1">
|
<item row="1" column="1">
|
||||||
<widget class="QDoubleSpinBox" name="doubleSpinBox_MaxValueColor">
|
<widget class="QDoubleSpinBox" name="doubleSpinBox_MaxValueColor">
|
||||||
|
<property name="readOnly">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
<property name="maximum">
|
<property name="maximum">
|
||||||
<double>99999990.000000000000000</double>
|
<double>99999990.000000000000000</double>
|
||||||
</property>
|
</property>
|
||||||
|
@ -143,7 +156,7 @@
|
||||||
<string>Show</string>
|
<string>Show</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="checked">
|
<property name="checked">
|
||||||
<bool>true</bool>
|
<bool>false</bool>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
@ -158,6 +171,15 @@
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QSpinBox" name="spinBox_DisplacementFactor">
|
<widget class="QSpinBox" name="spinBox_DisplacementFactor">
|
||||||
|
<property name="readOnly">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="maximum">
|
||||||
|
<number>99999</number>
|
||||||
|
</property>
|
||||||
|
<property name="singleStep">
|
||||||
|
<number>2</number>
|
||||||
|
</property>
|
||||||
<property name="value">
|
<property name="value">
|
||||||
<number>1</number>
|
<number>1</number>
|
||||||
</property>
|
</property>
|
||||||
|
@ -176,11 +198,17 @@
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QSpinBox" name="spinBox_SliderFactor">
|
<widget class="QSpinBox" name="spinBox_SliderFactor">
|
||||||
|
<property name="readOnly">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
<property name="maximum">
|
<property name="maximum">
|
||||||
<number>99999</number>
|
<number>99999</number>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="singleStep">
|
||||||
|
<number>5</number>
|
||||||
|
</property>
|
||||||
<property name="value">
|
<property name="value">
|
||||||
<number>20</number>
|
<number>100</number>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
@ -207,7 +235,7 @@
|
||||||
<item>
|
<item>
|
||||||
<widget class="QScrollBar" name="verticalScrollBar_Factor">
|
<widget class="QScrollBar" name="verticalScrollBar_Factor">
|
||||||
<property name="maximum">
|
<property name="maximum">
|
||||||
<number>20</number>
|
<number>100</number>
|
||||||
</property>
|
</property>
|
||||||
<property name="pageStep">
|
<property name="pageStep">
|
||||||
<number>1</number>
|
<number>1</number>
|
||||||
|
|
Loading…
Reference in New Issue
Block a user