Move Job generation in JobDialog

This commit is contained in:
jriegel 2013-07-31 22:38:30 +02:00
parent b8cac92e83
commit deb2ed9939
6 changed files with 2347 additions and 1792 deletions

View File

@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>258</width>
<height>366</height>
<height>602</height>
</rect>
</property>
<property name="windowTitle">
@ -60,6 +60,9 @@
<property name="minimum">
<number>-99</number>
</property>
<property name="value">
<number>-1</number>
</property>
</widget>
</item>
<item row="1" column="1">
@ -76,6 +79,9 @@
<property name="minimum">
<number>-99</number>
</property>
<property name="value">
<number>1</number>
</property>
</widget>
</item>
<item row="1" column="3">
@ -102,6 +108,9 @@
<property name="minimum">
<number>-99</number>
</property>
<property name="value">
<number>-1</number>
</property>
</widget>
</item>
<item row="2" column="1">
@ -118,6 +127,9 @@
<property name="minimum">
<number>-99</number>
</property>
<property name="value">
<number>1</number>
</property>
</widget>
</item>
<item row="2" column="3">
@ -144,6 +156,9 @@
<property name="minimum">
<number>-99</number>
</property>
<property name="value">
<number>-1</number>
</property>
</widget>
</item>
<item row="3" column="1">
@ -160,6 +175,9 @@
<property name="minimum">
<number>-99</number>
</property>
<property name="value">
<number>1</number>
</property>
</widget>
</item>
<item row="3" column="3">
@ -189,6 +207,9 @@
<property name="minimum">
<number>-99</number>
</property>
<property name="value">
<number>-1</number>
</property>
</widget>
</item>
<item row="4" column="1">
@ -205,6 +226,9 @@
<property name="minimum">
<number>-99</number>
</property>
<property name="value">
<number>1</number>
</property>
</widget>
</item>
<item row="4" column="3">
@ -298,25 +322,28 @@
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QPushButton" name="pushButton">
<property name="text">
<string>Generate</string>
</property>
</widget>
<widget class="QLineEdit" name="lineEdit_outputDir"/>
</item>
<item>
<widget class="QPushButton" name="pushButton_2">
<widget class="QToolButton" name="toolButton_chooseOutputDir">
<property name="text">
<string>Delete</string>
<string>...</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QPushButton" name="pushButton_generate">
<property name="text">
<string>Generate</string>
</property>
</widget>
</item>
<item>
<widget class="QTableWidget" name="JobTable">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
@ -324,7 +351,7 @@
<property name="minimumSize">
<size>
<width>240</width>
<height>120</height>
<height>400</height>
</size>
</property>
<property name="maximumSize">
@ -342,9 +369,6 @@
<attribute name="horizontalHeaderVisible">
<bool>false</bool>
</attribute>
<attribute name="horizontalHeaderVisible">
<bool>false</bool>
</attribute>
<column/>
<column/>
</widget>

View File

@ -20,7 +20,8 @@
#* *
#***************************************************************************
import FreeCAD, Fem
import FreeCAD, Fem, os,sys,string,math,shutil,glob,subprocess,tempfile
from ApplyingBC_IC import ApplyingBC_IC
if FreeCAD.GuiUp:
import FreeCADGui,FemGui
@ -72,10 +73,10 @@ class _CommandAnalysis:
class _CommandJobControl:
"the MachDist JobControl command definition"
def GetResources(self):
return {'Pixmap' : 'MachDist_NewAnalysis',
'MenuText': QtCore.QT_TRANSLATE_NOOP("MachDist_JobControl","Machine-Distortion JobControl"),
return {'Pixmap' : 'MachDist_Upload',
'MenuText': QtCore.QT_TRANSLATE_NOOP("MachDist_JobControl","Generate Jobs"),
'Accel': "A",
'ToolTip': QtCore.QT_TRANSLATE_NOOP("MachDist_Analysis","Open the JobControl dialog")}
'ToolTip': QtCore.QT_TRANSLATE_NOOP("MachDist_Analysis","Dialog to generate the jobs")}
def Activated(self):
taskd = _JobControlTaskPanel()
@ -100,9 +101,11 @@ class _JobControlTaskPanel:
self.formUi = form_class()
self.form = QtGui.QWidget()
self.formUi.setupUi(self.form)
self.params = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/Machining_Distortion")
#Connect Signals and Slots
#QtCore.QObject.connect(self.formUi.pushButton_FlipX, QtCore.SIGNAL("clicked()"), self.flipX)
QtCore.QObject.connect(self.formUi.toolButton_chooseOutputDir, QtCore.SIGNAL("clicked()"), self.chooseOutputDir)
QtCore.QObject.connect(self.formUi.pushButton_generate, QtCore.SIGNAL("clicked()"), self.generate)
self.update()
@ -113,6 +116,7 @@ class _JobControlTaskPanel:
def update(self):
'fills the widgets'
self.formUi.lineEdit_outputDir.setText(self.params.GetString("JobDir",'/'))
return
def accept(self):
@ -122,5 +126,153 @@ class _JobControlTaskPanel:
def reject(self):
FreeCADGui.Control.closeDialog()
def chooseOutputDir(self):
print "chooseOutputDir"
dirname = QtGui.QFileDialog.getExistingDirectory(None, 'Choose material directory',self.params.GetString("JobDir",'/'))
if(dirname):
self.params.SetString("JobDir",str(dirname))
self.formUi.lineEdit_outputDir.setText(dirname)
def generate(self):
print "pushButton_generate"
print self.formUi.lineEdit_outputDir.text()
dirName = self.formUi.lineEdit_outputDir.text()
MeshObject = None
if FemGui.getActiveAnalysis():
for i in FemGui.getActiveAnalysis().Member:
if i.isDerivedFrom("Fem::FemMeshObject"):
MeshObject = i
else:
QtGui.QMessageBox.critical(None, "Missing prerequisit","No active Analysis")
return
if not MeshObject:
QtGui.QMessageBox.critical(None, "Missing prerequisit","No mesh object in the Analysis")
return
MathObject = None
for i in FemGui.getActiveAnalysis().Member:
if i.isDerivedFrom("App::MaterialObjectPython"):
MathObject = i
if not MathObject:
QtGui.QMessageBox.critical(None, "Missing prerequisit","No material object in the Analysis")
return
matmap = MathObject.Material
IsoNodeObject = None
for i in FemGui.getActiveAnalysis().Member:
if i.isDerivedFrom("Fem::FemSetNodesObject"):
IsoNodeObject = i
if not IsoNodeObject:
QtGui.QMessageBox.critical(None, "Missing prerequisit","No Isostatic nodes defined in the Analysis")
return
IsoNodes = IsoNodeObject.Nodes
filename_without_suffix = MeshObject.Name
#current_file_name
z_offset_from = self.formUi.spinBox_z_level_from.value()
z_offset_to = self.formUi.spinBox_z_level_to.value()
z_offset_intervall = self.formUi.spinBox_z_level_intervall.value()
x_rot_from = self.formUi.spinBox_misalignment_x_from.value()
x_rot_to = self.formUi.spinBox_misalignment_x_to.value()
x_rot_intervall = self.formUi.spinBox_misalignment_x_intervall.value()
y_rot_from = self.formUi.spinBox_misalignment_y_from.value()
y_rot_to = self.formUi.spinBox_misalignment_y_to.value()
y_rot_intervall = self.formUi.spinBox_misalignment_y_intervall.value()
z_rot_from = self.formUi.spinBox_misalignment_z_from.value()
z_rot_to = self.formUi.spinBox_misalignment_z_to.value()
z_rot_intervall = self.formUi.spinBox_misalignment_z_intervall.value()
#current_file_name = self.JobTable.item(job,0).text()
lc1 = float(matmap['PartDist_lc1'])
lc2 = float(matmap['PartDist_lc2'])
lc3 = float(matmap['PartDist_lc3'])
lc4 = float(matmap['PartDist_lc4'])
lc5 = float(matmap['PartDist_lc5'])
lc6 = float(matmap['PartDist_lc6'])
ltc1 =float(matmap['PartDist_ltc1'])
ltc2 =float(matmap['PartDist_ltc2'])
ltc3 =float(matmap['PartDist_ltc3'])
ltc4 =float(matmap['PartDist_ltc4'])
ltc5 =float(matmap['PartDist_ltc5'])
ltc6 =float(matmap['PartDist_ltc6'])
young_modulus = float(matmap['FEM_youngsmodulus'])
poisson_ratio = float(matmap['PartDist_poissonratio'])
plate_thickness = float(matmap['PartDist_platethickness'])
batch = open(str(dirName + "/" + "lcmt_CALCULIX_Calculation_batch.bat"),'wb')
batch.write("#!/bin/bash\n")
batch.write("export CCX_NPROC=4\n")
print z_rot_intervall,y_rot_intervall,x_rot_intervall,z_offset_intervall
print z_offset_from,z_offset_intervall,z_offset_to
i = z_offset_from
while i <= z_offset_to:
j = x_rot_from
while j <= x_rot_to:
k = y_rot_from
while k <= y_rot_to:
l = z_rot_from
while l <= z_rot_to:
print j,k,l
rotation_around_x = FreeCAD.Base.Placement(FreeCAD.Base.Vector(0,0,0),FreeCAD.Base.Vector(1,0,0),j)
rotation_around_y = FreeCAD.Base.Placement(FreeCAD.Base.Vector(0,0,0),FreeCAD.Base.Vector(0,1,0),k)
rotation_around_z = FreeCAD.Base.Placement(FreeCAD.Base.Vector(0,0,0),FreeCAD.Base.Vector(0,0,1),l)
translate = FreeCAD.Base.Placement(FreeCAD.Base.Vector(0,0,i),FreeCAD.Base.Vector(0,0,0),0.0)
translation = rotation_around_x.multiply(rotation_around_y).multiply(rotation_around_z).multiply(translate)
Case_Dir = str(dirName) + "/" + filename_without_suffix +\
"_"+"x_rot"+ str(int(j))+ \
"_"+"y_rot"+ str(int(k))+ \
"_"+"z_rot"+ str(int(l))+ \
"_"+"z_l"+ str(int(i))
if ( os.path.exists(str(Case_Dir)) ):
os.chdir(str(dirName))
shutil.rmtree(str(Case_Dir))
os.mkdir(str(Case_Dir))
#Lets generate a sigini Input Deck for the calculix user subroutine
sigini_input = open (str(Case_Dir + "/" + "sigini_input.txt"),'wb')
#Write plate thickness to the sigini_file
sigini_input.write(str(plate_thickness) + "\n")
#Now write the Interpolation coefficients, first the L and then the LC ones
sigini_input.write(\
str(lc1) + "," + \
str(lc2) + "," + \
str(lc3) + "," + \
str(lc4) + "," + \
str(lc5) + "," + \
str(lc6) + "\n")
sigini_input.write(\
str(ltc1) + "," + \
str(ltc2) + "," + \
str(ltc3) + "," + \
str(ltc4) + "," + \
str(ltc5) + "," + \
str(ltc6) + "\n")
sigini_input.close()
#Check if the
MeshObject.FemMesh.writeABAQUS(str(Case_Dir + "/" + "geometry_fe_input.inp"))
IsoNodes = list(IsoNodes)
ApplyingBC_IC(Case_Dir, young_modulus,poisson_ratio,IsoNodes[0],IsoNodes[1],IsoNodes[2])
batch.write("cd \"" + str(Case_Dir) + "\"\n")
batch.write("ccx -i geometry_fe_input\n")
l= l + z_rot_intervall
k = k + y_rot_intervall
j = j + x_rot_intervall
i = i+ z_offset_intervall
FreeCADGui.addCommand('MachDist_Analysis',_CommandAnalysis())
FreeCADGui.addCommand('MachDist_JobControl',_CommandJobControl())

View File

@ -98,6 +98,7 @@ class _CommandIsostatic:
#node_numbers = Fem.getBoundary_Conditions(FemMeshObj.FemMesh)
node_numbers = getBoundaryCoditions(FemMeshObj.FemMesh)
obj.Nodes = node_numbers
nodes = FemMeshObj.FemMesh.Nodes
meshObj = None

View File

@ -15,7 +15,7 @@
id="svg2816"
version="1.1"
inkscape:version="0.48.4 r9939"
sodipodi:docname="MachDist_NewAnalysis.svg">
sodipodi:docname="MachDist_Upload.svg">
<defs
id="defs2818">
<linearGradient
@ -382,6 +382,62 @@
id="radialGradient4227"
xlink:href="#linearGradient12512"
inkscape:collect="always" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient8650"
id="radialGradient3013"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.01137521,-2.0466974,1.557586,0.00865681,21.42195,65.887482)"
cx="19.701141"
cy="2.8969381"
fx="19.701141"
fy="2.8969381"
r="17.171415" />
<linearGradient
id="linearGradient8650"
inkscape:collect="always">
<stop
id="stop8652"
offset="0"
style="stop-color:#ffffff;stop-opacity:1;" />
<stop
id="stop8654"
offset="1"
style="stop-color:#ffffff;stop-opacity:0;" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient2591"
id="radialGradient3016"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.00468531,-0.84300898,1.0201522,0.00566984,0.48255086,43.074241)"
cx="22.291636"
cy="32.797512"
fx="22.291636"
fy="32.797512"
r="16.9562" />
<linearGradient
id="linearGradient2591">
<stop
style="stop-color:#73d216"
offset="0"
id="stop2593" />
<stop
style="stop-color:#4e9a06"
offset="1.0000000"
id="stop2595" />
</linearGradient>
<radialGradient
r="16.9562"
fy="32.797512"
fx="22.291636"
cy="32.797512"
cx="22.291636"
gradientTransform="matrix(0.00468531,-0.84300898,1.0201522,0.00566984,19.48537,41.85906)"
gradientUnits="userSpaceOnUse"
id="radialGradient3040"
xlink:href="#linearGradient2591"
inkscape:collect="always" />
</defs>
<sodipodi:namedview
id="base"
@ -391,7 +447,7 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="8.453125"
inkscape:cx="32"
inkscape:cx="13.190388"
inkscape:cy="32"
inkscape:current-layer="layer1"
showgrid="true"
@ -404,11 +460,11 @@
inkscape:snap-bbox-midpoints="true"
inkscape:object-paths="true"
inkscape:object-nodes="true"
inkscape:window-width="1280"
inkscape:window-height="758"
inkscape:window-x="0"
inkscape:window-y="19"
inkscape:window-maximized="0" />
inkscape:window-width="1920"
inkscape:window-height="1137"
inkscape:window-x="1042"
inkscape:window-y="-8"
inkscape:window-maximized="1" />
<metadata
id="metadata2821">
<rdf:RDF>
@ -417,7 +473,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
@ -438,10 +494,22 @@
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccscc" />
<path
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 49.933457,10.066543 -7.571165,10.76525 5.441774,-0.118299 0,16.561922 5.560074,0 -0.118299,-16.443623 4.968577,-0.118299 z"
id="path4248"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccc"
id="path8643"
d="m 33.643044,37.882794 16.994157,0.09445 0.07216,-12.983612 8.544906,0.04749 L 42.45902,4.987636 25.322442,24.971348 l 8.397406,0.04667 -0.0768,12.864774 z"
style="color:#000000;fill:url(#radialGradient3040);fill-opacity:1;fill-rule:evenodd;stroke:#3a7304;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccc"
id="path8645"
d="m 26.448831,24.434405 7.806354,0.04339 -0.07123,12.816972 9.040574,0.05025 C 45.323143,19.606399 35.861796,20.670295 42.443672,5.956648 L 26.448831,24.434405 z"
style="opacity:0.5080214;color:#000000;fill:url(#radialGradient3013);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible" />
<path
inkscape:connector-curvature="0"
style="opacity:0.48128339;color:#000000;fill:none;stroke:#ffffff;stroke-width:1.00000036;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible"
d="m 34.693038,36.9051 14.984208,0.08328 0.07217,-12.985167 7.395052,0.0411 -14.698325,-17.559974 -14.877399,17.411559 7.201271,0.04002 -0.07698,12.969178 z"
id="path8658"
sodipodi:nodetypes="cccccccc" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 18 KiB

View File

@ -6,20 +6,14 @@
<rect>
<x>0</x>
<y>0</y>
<width>434</width>
<height>274</height>
<width>452</width>
<height>305</height>
</rect>
</property>
<property name="windowTitle">
<string>General settings</string>
</property>
<layout class="QVBoxLayout">
<property name="spacing">
<number>6</number>
</property>
<property name="margin">
<number>9</number>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QGroupBox" name="groupBox">
<property name="title">
@ -332,6 +326,58 @@ such as &quot;Arial:Bold&quot;</string>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_7">
<item>
<widget class="QLabel" name="label_7">
<property name="text">
<string>Job Dir</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_8">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="Gui::PrefLineEdit" name="gui::preflineedit_7">
<property name="minimumSize">
<size>
<width>300</width>
<height>0</height>
</size>
</property>
<property name="toolTip">
<string>This is the default font name for all Draft texts and dimensions.
It can be a font name such as &quot;Arial&quot;, a default style such as &quot;sans&quot;, &quot;serif&quot;
or &quot;mono&quot;, or a family such as &quot;Arial,Helvetica,sans&quot; or a name with a style
such as &quot;Arial:Bold&quot;</string>
</property>
<property name="text">
<string>/</string>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property>
<property name="prefEntry" stdset="0">
<cstring>JobDir</cstring>
</property>
<property name="prefPath" stdset="0">
<cstring>Mod/Machining_Distortion</cstring>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="Line" name="line">
<property name="lineWidth">

File diff suppressed because it is too large Load Diff