Author: sega
Date: 2009-02-09 21:50:44 +0100 (Mon, 09 Feb 2009)
New Revision: 1662

Added:
   
trunk/pkg/dem/Engine/EngineUnit/Spheres_Viscoelastic_SimpleViscoelasticContactLaw.cpp
   
trunk/pkg/dem/Engine/EngineUnit/Spheres_Viscoelastic_SimpleViscoelasticContactLaw.hpp
Modified:
   trunk/examples/dynamic_simulation_tests/ringSimpleViscoelastic.py
   trunk/gui/qt3/QtGeneratedSimulationPlayer.ui
   trunk/gui/qt3/QtSimulationPlayer.cpp
   trunk/gui/qt3/QtSimulationPlayer.hpp
   trunk/pkg/dem/SConscript
Log:
1. Convert SimpleViscoelasticContactLaw to ConstitutiveLaw engine unit 
(Spheres_Viscoelastic_SimpleViscoelasticContactLaw).
2. SimulatonPlayer have now Display tab as one in SimulationController.



Modified: trunk/examples/dynamic_simulation_tests/ringSimpleViscoelastic.py
===================================================================
--- trunk/examples/dynamic_simulation_tests/ringSimpleViscoelastic.py   
2009-02-09 17:03:36 UTC (rev 1661)
+++ trunk/examples/dynamic_simulation_tests/ringSimpleViscoelastic.py   
2009-02-09 20:50:44 UTC (rev 1662)
@@ -28,10 +28,7 @@
                                        z = cylinderOrigin[2]+h*2*sphereRadius
                                        
s=utils.sphere_v2([x,y*cos(cylinderSlope)+z*sin(cylinderSlope),z*cos(cylinderSlope)-y*sin(cylinderSlope)],sphereRadius,density=Density,physicalParameters=["SimpleViscoelasticBodyParameters",{'frictionAngle':frictionAngle}])
                                        
p=utils.getViscoelasticFromSpheresInteraction(s.phys['mass'],tc,en,es)
-                                       s.phys['kn']=p['kn']
-                                       s.phys['cn']=p['cn']
-                                       s.phys['ks']=p['ks']
-                                       s.phys['cs']=p['cs']
+                                       
s.phys['kn'],s.phys['cn'],s.phys['ks'],s.phys['cs']=p['kn'],p['cn'],p['ks'],p['cs']
                                        o.bodies.append(s)
                                        spheresCount+=1
        return spheresCount
@@ -52,19 +49,29 @@
 
 ## Engines 
 o.engines=[
+
        StandAloneEngine('PhysicalActionContainerReseter'),
+
        MetaEngine('BoundingVolumeMetaEngine',[
                EngineUnit('InteractingSphere2AABB'),
                EngineUnit('InteractingFacet2AABB'),
                EngineUnit('MetaInteractingGeometry2AABB')
        ]),
+
        StandAloneEngine('PersistentSAPCollider'),
+
        MetaEngine('InteractionGeometryMetaEngine',[
                
EngineUnit('InteractingSphere2InteractingSphere4SpheresContactGeometry'),
                
EngineUnit('InteractingFacet2InteractingSphere4SpheresContactGeometry')
        ]),
+
        
MetaEngine('InteractionPhysicsMetaEngine',[EngineUnit('SimpleViscoelasticRelationships')]),
-       StandAloneEngine('SimpleViscoelasticContactLaw'),
+
+    ## Constitutive law
+       
MetaEngine('ConstitutiveLawDispatcher',[EngineUnit('Spheres_Viscoelastic_SimpleViscoelasticContactLaw')]),
+    ## or InteractionSolver 
+       #StandAloneEngine('SimpleViscoelasticContactLaw'),
+
        DeusExMachina('GravityEngine',{'gravity':[0,-9.81,0]}),
 
        ## Cundall damping must been disabled!
@@ -80,7 +87,7 @@
     if b.shape.name=='Sphere':
         b.phys['blockedDOFs']=4 # blocked movement along Z
 
-o.dt=2e-5
+o.dt=0.2*tc
 
 o.saveTmp('init');
 

Modified: trunk/gui/qt3/QtGeneratedSimulationPlayer.ui
===================================================================
--- trunk/gui/qt3/QtGeneratedSimulationPlayer.ui        2009-02-09 17:03:36 UTC 
(rev 1661)
+++ trunk/gui/qt3/QtGeneratedSimulationPlayer.ui        2009-02-09 20:50:44 UTC 
(rev 1662)
@@ -8,8 +8,8 @@
         <rect>
             <x>0</x>
             <y>0</y>
-            <width>306</width>
-            <height>271</height>
+            <width>362</width>
+            <height>430</height>
         </rect>
     </property>
     <property name="sizePolicy">
@@ -43,69 +43,15 @@
             <property name="frameShadow">
                 <enum>Raised</enum>
             </property>
-            <grid>
+            <vbox>
                 <property name="name">
                     <cstring>unnamed</cstring>
                 </property>
                 <property name="spacing">
                     <number>0</number>
                 </property>
-                <widget class="QLayoutWidget" row="1" column="0">
+                <widget class="QTabWidget">
                     <property name="name">
-                        <cstring>layout5</cstring>
-                    </property>
-                    <grid>
-                        <property name="name">
-                            <cstring>unnamed</cstring>
-                        </property>
-                        <widget class="QPushButton" row="0" column="3">
-                            <property name="name">
-                                <cstring>pbReset</cstring>
-                            </property>
-                            <property name="text">
-                                <string></string>
-                            </property>
-                            <property name="pixmap">
-                                <pixmap>image0</pixmap>
-                            </property>
-                        </widget>
-                        <widget class="QPushButton" row="0" column="2">
-                            <property name="name">
-                                <cstring>pbPause</cstring>
-                            </property>
-                            <property name="text">
-                                <string></string>
-                            </property>
-                            <property name="pixmap">
-                                <pixmap>image1</pixmap>
-                            </property>
-                        </widget>
-                        <widget class="QPushButton" row="0" column="1">
-                            <property name="name">
-                                <cstring>pbStep</cstring>
-                            </property>
-                            <property name="text">
-                                <string></string>
-                            </property>
-                            <property name="pixmap">
-                                <pixmap>image2</pixmap>
-                            </property>
-                        </widget>
-                        <widget class="QPushButton" row="0" column="0">
-                            <property name="name">
-                                <cstring>pbPlay</cstring>
-                            </property>
-                            <property name="text">
-                                <string></string>
-                            </property>
-                            <property name="pixmap">
-                                <pixmap>image3</pixmap>
-                            </property>
-                        </widget>
-                    </grid>
-                </widget>
-                <widget class="QTabWidget" row="0" column="0">
-                    <property name="name">
                         <cstring>tabWidget5</cstring>
                     </property>
                     <property name="margin">
@@ -194,7 +140,7 @@
                                                             <string></string>
                                                         </property>
                                                         <property 
name="pixmap">
-                                                            
<pixmap>image4</pixmap>
+                                                            
<pixmap>image0</pixmap>
                                                         </property>
                                                     </widget>
                                                     <widget class="QLineEdit" 
row="0" column="0" rowspan="1" colspan="2">
@@ -314,7 +260,7 @@
                                                             <string></string>
                                                         </property>
                                                         <property 
name="pixmap">
-                                                            
<pixmap>image4</pixmap>
+                                                            
<pixmap>image0</pixmap>
                                                         </property>
                                                     </widget>
                                                 </grid>
@@ -509,7 +455,7 @@
                                                     <string></string>
                                                 </property>
                                                 <property name="pixmap">
-                                                    <pixmap>image4</pixmap>
+                                                    <pixmap>image0</pixmap>
                                                 </property>
                                             </widget>
                                             <widget class="QLineEdit" row="1" 
column="1" rowspan="1" colspan="2">
@@ -650,7 +596,7 @@
                                                     <string></string>
                                                 </property>
                                                 <property name="pixmap">
-                                                    <pixmap>image0</pixmap>
+                                                    <pixmap>image1</pixmap>
                                                 </property>
                                             </widget>
                                         </hbox>
@@ -681,24 +627,40 @@
                             <cstring>TabPage</cstring>
                         </property>
                         <attribute name="title">
-                            <string>View</string>
+                            <string>Display</string>
                         </attribute>
-                        <widget class="QCheckBox">
+                        <vbox>
                             <property name="name">
-                                <cstring>cbBodyWire</cstring>
+                                <cstring>unnamed</cstring>
                             </property>
-                            <property name="geometry">
-                                <rect>
-                                    <x>10</x>
-                                    <y>10</y>
-                                    <width>229</width>
-                                    <height>20</height>
-                                </rect>
-                            </property>
-                            <property name="text">
-                                <string>Body wire</string>
-                            </property>
-                        </widget>
+                            <widget class="QFrame">
+                                <property name="name">
+                                    <cstring>scrollViewOutsideFrame</cstring>
+                                </property>
+                                <property name="sizePolicy">
+                                    <sizepolicy>
+                                        <hsizetype>1</hsizetype>
+                                        <vsizetype>3</vsizetype>
+                                        <horstretch>0</horstretch>
+                                        <verstretch>5</verstretch>
+                                    </sizepolicy>
+                                </property>
+                                <property name="frameShape">
+                                    <enum>NoFrame</enum>
+                                </property>
+                                <property name="frameShadow">
+                                    <enum>Raised</enum>
+                                </property>
+                            </widget>
+                            <widget class="QPushButton">
+                                <property name="name">
+                                    <cstring>pbApply</cstring>
+                                </property>
+                                <property name="text">
+                                    <string>Apply</string>
+                                </property>
+                            </widget>
+                        </vbox>
                     </widget>
                     <widget class="QWidget">
                         <property name="name">
@@ -754,25 +716,79 @@
                         </grid>
                     </widget>
                 </widget>
-            </grid>
+                <widget class="QLayoutWidget">
+                    <property name="name">
+                        <cstring>layout5</cstring>
+                    </property>
+                    <grid>
+                        <property name="name">
+                            <cstring>unnamed</cstring>
+                        </property>
+                        <widget class="QPushButton" row="0" column="3">
+                            <property name="name">
+                                <cstring>pbReset</cstring>
+                            </property>
+                            <property name="text">
+                                <string></string>
+                            </property>
+                            <property name="pixmap">
+                                <pixmap>image1</pixmap>
+                            </property>
+                        </widget>
+                        <widget class="QPushButton" row="0" column="2">
+                            <property name="name">
+                                <cstring>pbPause</cstring>
+                            </property>
+                            <property name="text">
+                                <string></string>
+                            </property>
+                            <property name="pixmap">
+                                <pixmap>image2</pixmap>
+                            </property>
+                        </widget>
+                        <widget class="QPushButton" row="0" column="1">
+                            <property name="name">
+                                <cstring>pbStep</cstring>
+                            </property>
+                            <property name="text">
+                                <string></string>
+                            </property>
+                            <property name="pixmap">
+                                <pixmap>image3</pixmap>
+                            </property>
+                        </widget>
+                        <widget class="QPushButton" row="0" column="0">
+                            <property name="name">
+                                <cstring>pbPlay</cstring>
+                            </property>
+                            <property name="text">
+                                <string></string>
+                            </property>
+                            <property name="pixmap">
+                                <pixmap>image4</pixmap>
+                            </property>
+                        </widget>
+                    </grid>
+                </widget>
+            </vbox>
         </widget>
     </grid>
 </widget>
 <images>
     <image name="image0">
-        <data format="PNG" 
length="305">89504e470d0a1a0a0000000d4948445200000015000000150806000000a917a596000000f849444154388db5943b12823010863f1f95158de839b0f5021ec00bd8702b8f2117e0326ab38d54385a844748086c66f49f49917d7c2cc966412501e4a38b85a536b081abc01350c9405e0dc882cd831701600daca6539340ae57a9a44d2533c069b9bf7f77f605706e96ad83922fb5a9b25bb9e5a3b7ab2559183880c6744b7bcbf201b945248eaafdf2c6b25d7f05b555fe03fafc07741b8790fdf092c7a1c7c8c2bcf8165a59b64b24d48eb739737d1a92e44e5ee6064cbc2815b06e3dcea4f19e6181e9db12d3155bcc195e80d330b49f5a2e34c51f2a1aed207904a01d5c314f017843b2768d810191ac31e3ad1af75319bf0f04f8024c83732f0a67978c0000000049454e44ae426082</data>
+        <data format="PNG" 
length="892">89504e470d0a1a0a0000000d4948445200000018000000180806000000e0773df800000343494441544889ed95cf6f146518c73f5d5a8b96a5ab6de84230b6b02858b134023d28743de8414d6a8c7f01ff801aaf24c24d2f0ac6709693f1a0f5e4c5c42e8907f560a736c4d616322dd275b7753bdb617766f6fdf17898e9b26db798102f263ec924cfccfbe4f3fd3ecffb2403ffc743c408f00e3099493fbafefc338704986a53370e7c909c6dd6f46e2fea68c92780cfcf9d3e92397f26c7f8991ce363c748a552bcffe1249f5e2f5c023ce0cdde7d7bf3e74e1fe5a5178ef0daf967393cd0cbb52f7ee0e2d56f2f0197771398aafc319b4ffbdfd3914a01202288152a5e8deb5fff8888f0e2e810c3b92cc65a8cb1186dd0da50a9d6197dfb6307186d15e86c7df1aa1efb3ac03434d65aac8d018fa4e0c25b679b40dfafa38dc1688bd686a8a1d0da72b03f7daab8e64f259dbe0b2cb50a384b6595ef4f871863304630d6a055ecb01d501bc37a790d43378ff53dc5b5cfae706ae444fe9bafbee4bd8b571de072ab80e7380ec363d0084394d2281d0b6c07d6ea0d0e0c8d923994e3f8cbc364d25d1094e347cde3955c0077fb880a9ee761f61cc6f7570942454369362a1eb55a83fd0347c9648f317af669b2d9be045882!
 
fa34d40191982250f8690ea0b0e30e5cd7258a0ee0fb012b772b3c79f2154e8e3d4736fb440c0bca102d4269710b50442059082b961b3fcf7bc0d27601d7755d3a7bdee0aefb1df90b1f9131b720b809c5c4e12633015a2b8858ac3548b214337377009c765bb404201d5d74f6f493e98e60b5747f5d45106b6390c430b1a6b96db1806171b9d81ccf8e1101186bd9d3bd1fa915b15a379dd90420d292b7f9eefcb6bc85b745c07166101106064fa0c27be830481c9b16973be156ee9f19ad77efa05aad22081beb1542df60a260db185af264f69bc2c618b4d6fcba50dcbd03e2dd1ddcdb9326dc28b5779d8063a0a1d1d0440d451429eefc59e5e6ad32c08ddd054406b343c78956969b176713874a1b948a6161a49873d798febd84b350667671955aa80ac0950775c0bd0d9f747f1f4150472b4d4369c22886ce2dad313d5f6266a1cceced55af1628279977a1d5f503051e3f98a3abd3e216ffe297f9620c5c2c737ba5ead502b5092b0033ed80ff149f4c4cbc2eafe6c704580726897f3e230f03db2dc6ff6de07f3bfe067d9f88db21915f870000000049454e44ae426082</data>
     </image>
     <image name="image1">
-        <data format="PNG" 
length="113">89504e470d0a1a0a0000000d4948445200000015000000150806000000a917a5960000003849444154388d633c76ec1803b50113d54da495a12cd804adacb4fe23f38f1dbbc6488c1c0c0c1def8f1a3a6ae8a8a123d350c6915df203007bf20ccfb0566fcb0000000049454e44ae426082</data>
+        <data format="PNG" 
length="305">89504e470d0a1a0a0000000d4948445200000015000000150806000000a917a596000000f849444154388db5943b12823010863f1f95158de839b0f5021ec00bd8702b8f2117e0326ab38d54385a844748086c66f49f49917d7c2cc966412501e4a38b85a536b081abc01350c9405e0dc882cd831701600daca6539340ae57a9a44d2533c069b9bf7f77f605706e96ad83922fb5a9b25bb9e5a3b7ab2559183880c6744b7bcbf201b945248eaafdf2c6b25d7f05b555fe03fafc07741b8790fdf092c7a1c7c8c2bcf8165a59b64b24d48eb739737d1a92e44e5ee6064cbc2815b06e3dcea4f19e6181e9db12d3155bcc195e80d330b49f5a2e34c51f2a1aed207904a01d5c314f017843b2768d810191ac31e3ad1af75319bf0f04f8024c83732f0a67978c0000000049454e44ae426082</data>
     </image>
     <image name="image2">
-        <data format="PNG" 
length="255">89504e470d0a1a0a0000000d4948445200000015000000150806000000a917a596000000c649444154388db594d90a83400c458f0bd28542feff9ffa2f81822fadda87d176d4319d14bd20e38470b22a1c2fbd8ce7109e8fbdf050caf9555ad07bc2cf051d9db50679cdb30310176cd298690a98d2e4a37506340b5847bebdd5e7320f0840b778b7a0b99265f02ee9b68e660d4acb34683d4cb3e10b3569b30e7c073e80abfced72819ea86a0fd49014c0754f68153e6f79ec053d8743dad8e818943c41e3fb1e7b3a0b60fe13fe819e4037d62bc8b3a7004d6883adcc4cf516cedf4007942ad3ef38bd01af6e31af98932e9f0000000049454e44ae426082</data>
+        <data format="PNG" 
length="113">89504e470d0a1a0a0000000d4948445200000015000000150806000000a917a5960000003849444154388d633c76ec1803b50113d54da495a12cd804adacb4fe23f38f1dbbc6488c1c0c0c1def8f1a3a6ae8a8a123d350c6915df203007bf20ccfb0566fcb0000000049454e44ae426082</data>
     </image>
     <image name="image3">
-        <data format="PNG" 
length="160">89504e470d0a1a0a0000000d4948445200000015000000150806000000a917a5960000006749444154388dadccd10d80300c03d1947118a1fbcb23b00e2c4013dbc9fd9ef4168098eecae6def73b8eba70893a3085aa308d2ab084b2b08c32b08556b08d66700b3dc16d1478d628fa07b6d01368a31968a11528a30c28a12c48a30a48a12a58a20e1811f101d3512a7c38fee1ac0000000049454e44ae426082</data>
+        <data format="PNG" 
length="255">89504e470d0a1a0a0000000d4948445200000015000000150806000000a917a596000000c649444154388db594d90a83400c458f0bd28542feff9ffa2f81822fadda87d176d4319d14bd20e38470b22a1c2fbd8ce7109e8fbdf050caf9555ad07bc2cf051d9db50679cdb30310176cd298690a98d2e4a37506340b5847bebdd5e7320f0840b778b7a0b99265f02ee9b68e660d4acb34683d4cb3e10b3569b30e7c073e80abfced72819ea86a0fd49014c0754f68153e6f79ec053d8743dad8e818943c41e3fb1e7b3a0b60fe13fe819e4037d62bc8b3a7004d6883adcc4cf516cedf4007942ad3ef38bd01af6e31af98932e9f0000000049454e44ae426082</data>
     </image>
     <image name="image4">
-        <data format="PNG" 
length="892">89504e470d0a1a0a0000000d4948445200000018000000180806000000e0773df800000343494441544889ed95cf6f146518c73f5d5a8b96a5ab6de84230b6b02858b134023d28743de8414d6a8c7f01ff801aaf24c24d2f0ac6709693f1a0f5e4c5c42e8907f560a736c4d616322dd275b7753bdb617766f6fdf17898e9b26db798102f263ec924cfccfbe4f3fd3ecffb2403ffc743c408f00e3099493fbafefc338704986a53370e7c909c6dd6f46e2fea68c92780cfcf9d3e92397f26c7f8991ce363c748a552bcffe1249f5e2f5c023ce0cdde7d7bf3e74e1fe5a5178ef0daf967393cd0cbb52f7ee0e2d56f2f0197771398aafc319b4ffbdfd3914a01202288152a5e8deb5fff8888f0e2e810c3b92cc65a8cb1186dd0da50a9d6197dfb6307186d15e86c7df1aa1efb3ac03434d65aac8d018fa4e0c25b679b40dfafa38dc1688bd686a8a1d0da72b03f7daab8e64f259dbe0b2cb50a384b6595ef4f871863304630d6a055ecb01d501bc37a790d43378ff53dc5b5cfae706ae444fe9bafbee4bd8b571de072ab80e7380ec363d0084394d2281d0b6c07d6ea0d0e0c8d923994e3f8cbc364d25d1094e347cde3955c0077fb880a9ee761f61cc6f7570942454369362a1eb55a83fd0347c9648f317af669b2d9be045882!
 
fa34d40191982250f8690ea0b0e30e5cd7258a0ee0fb012b772b3c79f2154e8e3d4736fb440c0bca102d4269710b50442059082b961b3fcf7bc0d27601d7755d3a7bdee0aefb1df90b1f9131b720b809c5c4e12633015a2b8858ac3548b214337377009c765bb404201d5d74f6f493e98e60b5747f5d45106b6390c430b1a6b96db1806171b9d81ccf8e1101186bd9d3bd1fa915b15a379dd90420d292b7f9eefcb6bc85b745c07166101106064fa0c27be830481c9b16973be156ee9f19ad77efa05aad22081beb1542df60a260db185af264f69bc2c618b4d6fcba50dcbd03e2dd1ddcdb9326dc28b5779d8063a0a1d1d0440d451429eefc59e5e6ad32c08ddd054406b343c78956969b176713874a1b948a6161a49873d798febd84b350667671955aa80ac0950775c0bd0d9f747f1f4150472b4d4369c22886ce2dad313d5f6266a1cceced55af1628279977a1d5f503051e3f98a3abd3e216ffe297f9620c5c2c737ba5ead502b5092b0033ed80ff149f4c4cbc2eafe6c704580726897f3e230f03db2dc6ff6de07f3bfe067d9f88db21915f870000000049454e44ae426082</data>
+        <data format="PNG" 
length="160">89504e470d0a1a0a0000000d4948445200000015000000150806000000a917a5960000006749444154388dadccd10d80300c03d1947118a1fbcb23b00e2c4013dbc9fd9ef4168098eecae6def73b8eba70893a3085aa308d2ab084b2b08c32b08556b08d66700b3dc16d1478d628fa07b6d01368a31968a11528a30c28a12c48a30a48a12a58a20e1811f101d3512a7c38fee1ac0000000049454e44ae426082</data>
     </image>
 </images>
 <connections>
@@ -837,16 +853,16 @@
         <slot>pbInputDirectoryClicked()</slot>
     </connection>
     <connection>
-        <sender>cbBodyWire</sender>
-        <signal>toggled(bool)</signal>
+        <sender>pbRefreshFilters</sender>
+        <signal>clicked()</signal>
         <receiver>QtGeneratedSimulationPlayer</receiver>
-        <slot>cbBodyWireToggled(bool)</slot>
+        <slot>pbRefreshFiltersClicked()</slot>
     </connection>
     <connection>
-        <sender>pbRefreshFilters</sender>
+        <sender>pbApply</sender>
         <signal>clicked()</signal>
         <receiver>QtGeneratedSimulationPlayer</receiver>
-        <slot>pbRefreshFiltersClicked()</slot>
+        <slot>pbApplyClicked()</slot>
     </connection>
 </connections>
 <signals>
@@ -865,6 +881,7 @@
     <slot>cbAllowFiltrationToggled(bool)</slot>
     <slot>cbBodyWireToggled(bool)</slot>
     <slot>pbRefreshFiltersClicked()</slot>
+    <slot>pbApplyClicked()</slot>
 </slots>
 <layoutdefaults spacing="6" margin="11"/>
 </UI>

Modified: trunk/gui/qt3/QtSimulationPlayer.cpp
===================================================================
--- trunk/gui/qt3/QtSimulationPlayer.cpp        2009-02-09 17:03:36 UTC (rev 
1661)
+++ trunk/gui/qt3/QtSimulationPlayer.cpp        2009-02-09 20:50:44 UTC (rev 
1662)
@@ -33,6 +33,22 @@
        glSimulationPlayerViewer->simPlayer=this;
        leInputConfigFile->setText(Omega::instance().getSimulationFileName());
        enableControls(false);
+
+       scrollViewFrame = new QFrame(); 
+       scrollViewLayout = new QVBoxLayout( scrollViewOutsideFrame, 0, 0, 
"scrollViewLayout"); 
+       scrollView = new QScrollView( scrollViewOutsideFrame, "scrollView" );
+       scrollView->setVScrollBarMode(QScrollView::Auto);
+       scrollView->setHScrollBarMode(QScrollView::Auto);
+       scrollViewLayout->addWidget(scrollView);
+       scrollView->show();
+       guiGen.setResizeHeight(true);
+       guiGen.setResizeWidth(true);
+       guiGen.setShift(10,30);
+       guiGen.setShowButtons(false);
+       QSize s = scrollView->size();
+       scrollViewFrame->resize(s.width(),s.height());
+       guiGen.buildGUI(YadeQtMainWindow::self->renderer,scrollViewFrame);
+       scrollView->addChild(scrollViewFrame);
 }
 QtSimulationPlayer::~QtSimulationPlayer(){
        if(glSimulationPlayerViewer) delete glSimulationPlayerViewer;
@@ -44,9 +60,13 @@
 void QtSimulationPlayer::cbSaveSnapShotsToggled(bool b){       
glSimulationPlayerViewer->saveSnapShots=b;}
 void QtSimulationPlayer::cbAllowFiltrationToggled(bool b){     
FilterEngine::isFiltrationActivated=b; }
 void QtSimulationPlayer::pbRefreshFiltersClicked(){    
glSimulationPlayerViewer->refreshFilters(); }
-void QtSimulationPlayer::cbBodyWireToggled(bool b){    
glSimulationPlayerViewer->bodyWire(b); }
 void QtSimulationPlayer::closeEvent(QCloseEvent *e){ 
QtGeneratedSimulationPlayer::closeEvent(e); emit closeSignal(); }
 
+void QtSimulationPlayer::pbApplyClicked()
+{
+       guiGen.deserialize(YadeQtMainWindow::self->renderer);
+       YadeQtMainWindow::self->redrawAll(true);
+}
 
 void QtSimulationPlayer::pbInputConfigFileClicked(){
        string selectedFilter;

Modified: trunk/gui/qt3/QtSimulationPlayer.hpp
===================================================================
--- trunk/gui/qt3/QtSimulationPlayer.hpp        2009-02-09 17:03:36 UTC (rev 
1661)
+++ trunk/gui/qt3/QtSimulationPlayer.hpp        2009-02-09 20:50:44 UTC (rev 
1662)
@@ -10,7 +10,11 @@
 
 #include<yade/core/Omega.hpp>
 #include<yade/lib-factory/Factorable.hpp>
+#include<yade/lib-serialization-qt/QtGUIGenerator.hpp>
 #include <QtGeneratedSimulationPlayer.h>
+#include<qlayout.h>
+#include<qframe.h>
+#include<qscrollview.h>
 
 class GLSimulationPlayerViewer;
 
@@ -27,6 +31,11 @@
        private:
                void setParameters();
 
+               QScrollView * scrollView;
+               QFrame * scrollViewFrame;
+               QVBoxLayout* scrollViewLayout;
+               QtGUIGenerator guiGen;  
+
        public slots:
                virtual void pbInputDirectoryClicked();
                virtual void pbLoadClicked();
@@ -39,12 +48,12 @@
                virtual void pbPauseClicked();
                virtual void pbStepClicked();
                virtual void pbResetClicked();
+
+               virtual void pbApplyClicked();
                
                virtual void cbAllowFiltrationToggled(bool b);
         virtual void pbRefreshFiltersClicked();
                
-               virtual void cbBodyWireToggled(bool b);
-       
        protected:
                void closeEvent(QCloseEvent *);
                virtual void keyPressEvent(QKeyEvent *);

Added: 
trunk/pkg/dem/Engine/EngineUnit/Spheres_Viscoelastic_SimpleViscoelasticContactLaw.cpp
===================================================================
--- 
trunk/pkg/dem/Engine/EngineUnit/Spheres_Viscoelastic_SimpleViscoelasticContactLaw.cpp
       2009-02-09 17:03:36 UTC (rev 1661)
+++ 
trunk/pkg/dem/Engine/EngineUnit/Spheres_Viscoelastic_SimpleViscoelasticContactLaw.cpp
       2009-02-09 20:50:44 UTC (rev 1662)
@@ -0,0 +1,74 @@
+/*************************************************************************
+*  Copyright (C) 2009 by Sergei Dorofeenko                               *
+*  [email protected]                                                 *
+*                                                                        *
+*  This program is free software; it is licensed under the terms of the  *
+*  GNU General Public License v2 or later. See file LICENSE for details. *
+*************************************************************************/
+
+#include"Spheres_Viscoelastic_SimpleViscoelasticContactLaw.hpp"
+#include<yade/pkg-dem/SpheresContactGeometry.hpp>
+#include<yade/pkg-dem/ViscoelasticInteraction.hpp>
+#include<yade/pkg-common/RigidBodyParameters.hpp>
+YADE_PLUGIN("Spheres_Viscoelastic_SimpleViscoelasticContactLaw");
+
+void 
Spheres_Viscoelastic_SimpleViscoelasticContactLaw::go(shared_ptr<InteractionGeometry>&
 _geom, shared_ptr<InteractionPhysics>& _phys, Interaction* I, MetaBody* 
rootBody){
+
+       SpheresContactGeometry* 
geom=static_cast<SpheresContactGeometry*>(_geom.get());
+       ViscoelasticInteraction* 
phys=static_cast<ViscoelasticInteraction*>(_phys.get());
+
+       int id1 = I->getId1();
+       int id2 = I->getId2();
+       
+       shared_ptr<BodyContainer>& bodies = rootBody->bodies;
+
+       RigidBodyParameters* de1 = 
YADE_CAST<RigidBodyParameters*>((*bodies)[id1]->physicalParameters.get());
+       RigidBodyParameters* de2 = 
YADE_CAST<RigidBodyParameters*>((*bodies)[id2]->physicalParameters.get());
+
+       bool isDynamic1 = (*bodies)[id1]->isDynamic;
+       bool isDynamic2 = (*bodies)[id2]->isDynamic;
+
+       Vector3r& shearForce                    = phys->shearForce;
+       if (I->isNew) shearForce=Vector3r(0,0,0);
+
+       Real dt = Omega::instance().getTimeStep();
+
+       Vector3r axis = phys->prevNormal.Cross(geom->normal);
+       shearForce -= shearForce.Cross(axis);
+       Vector3r summaryAngularVelocity(0,0,0);
+       if (isDynamic1) summaryAngularVelocity += de1->angularVelocity;
+       if (isDynamic2) summaryAngularVelocity += de2->angularVelocity;
+       Real angle = dt*0.5*geom->normal.Dot(summaryAngularVelocity);
+       axis = angle*geom->normal;
+       shearForce -= shearForce.Cross(axis);
+
+       Vector3r x                              = geom->contactPoint;
+       Vector3r c1x                            = (x - de1->se3.position);
+       Vector3r c2x                            = (x - de2->se3.position);
+        /// The following definition of c1x and c2x is to avoid "granular 
ratcheting" 
+       ///  (see F. ALONSO-MARROQUIN, R. GARCIA-ROJO, H.J. HERRMANN, 
+       ///   "Micro-mechanical investigation of granular ratcheting, in Cyclic 
Behaviour of Soils and Liquefaction Phenomena",
+       ///   ed. T. Triantafyllidis (Balklema, London, 2004), p. 3-10 - and a 
lot more papers from the same authors)
+                       Vector3r _c1x_  = (isDynamic1) ? 
geom->radius1*geom->normal : x - de1->zeroPoint;
+                       Vector3r _c2x_  = (isDynamic2) ? 
-geom->radius2*geom->normal : x - de2->zeroPoint;
+       Vector3r relativeVelocity               = 
(de2->velocity+de2->angularVelocity.Cross(_c2x_)) - 
(de1->velocity+de1->angularVelocity.Cross(_c1x_));
+       Real     normalVelocity                 = 
geom->normal.Dot(relativeVelocity);
+       Vector3r shearVelocity                  = 
relativeVelocity-normalVelocity*geom->normal;
+       shearForce                             -= 
(phys->ks*dt+phys->cs)*shearVelocity;
+
+       phys->normalForce = ( phys->kn * std::max(geom->penetrationDepth,(Real) 
0) - phys->cn * normalVelocity ) * geom->normal;
+       phys->prevNormal = geom->normal;
+
+       Real maxFs = phys->normalForce.SquaredLength() * 
std::pow(phys->tangensOfFrictionAngle,2);
+       if( shearForce.SquaredLength() > maxFs )
+       {
+               maxFs = Mathr::Sqrt(maxFs) / shearForce.Length();
+               shearForce *= maxFs;
+       }
+
+       Vector3r f                              = phys->normalForce + 
shearForce;
+       bodyForce (id1,rootBody) -= f;
+       bodyForce (id2,rootBody) += f;
+       bodyTorque(id1,rootBody) -= c1x.Cross(f);
+       bodyTorque(id2,rootBody) += c2x.Cross(f);
+}

Added: 
trunk/pkg/dem/Engine/EngineUnit/Spheres_Viscoelastic_SimpleViscoelasticContactLaw.hpp
===================================================================
--- 
trunk/pkg/dem/Engine/EngineUnit/Spheres_Viscoelastic_SimpleViscoelasticContactLaw.hpp
       2009-02-09 17:03:36 UTC (rev 1661)
+++ 
trunk/pkg/dem/Engine/EngineUnit/Spheres_Viscoelastic_SimpleViscoelasticContactLaw.hpp
       2009-02-09 20:50:44 UTC (rev 1662)
@@ -0,0 +1,24 @@
+/*************************************************************************
+*  Copyright (C) 2009 by Sergei Dorofeenko                               *
+*  [email protected]                                                 *
+*                                                                        *
+*  This program is free software; it is licensed under the terms of the  *
+*  GNU General Public License v2 or later. See file LICENSE for details. *
+*************************************************************************/
+
+#pragma once
+
+#include<yade/pkg-common/ConstitutiveLaw.hpp>
+
+/// This class provides linear viscoelastic contact model
+class Spheres_Viscoelastic_SimpleViscoelasticContactLaw : public 
ConstitutiveLaw
+{
+       public :
+               virtual void go(shared_ptr<InteractionGeometry>&, 
shared_ptr<InteractionPhysics>&, Interaction*, MetaBody*);
+               NEEDS_BEX("Force","Momentum");
+               FUNCTOR2D(SpheresContactGeometry,ViscoelasticInteraction);
+               
REGISTER_CLASS_AND_BASE(Spheres_Viscoelastic_SimpleViscoelasticContactLaw,ConstitutiveLaw);
+};
+REGISTER_SERIALIZABLE(Spheres_Viscoelastic_SimpleViscoelasticContactLaw);
+
+

Modified: trunk/pkg/dem/SConscript
===================================================================
--- trunk/pkg/dem/SConscript    2009-02-09 17:03:36 UTC (rev 1661)
+++ trunk/pkg/dem/SConscript    2009-02-09 20:50:44 UTC (rev 1662)
@@ -1196,6 +1196,10 @@
        env.SharedLibrary('ef2_Spheres_NormalShear_ElasticFrictionalLaw',
                
['Engine/EngineUnit/ef2_Spheres_NormalShear_ElasticFrictionalLaw.cpp'],
                
LIBS=env['LIBS']+['ConstitutiveLawDispatcher','NormalShearInteractions','SpheresContactGeometry']),
+
+       env.SharedLibrary('Spheres_Viscoelastic_SimpleViscoelasticContactLaw',
+               
['Engine/EngineUnit/Spheres_Viscoelastic_SimpleViscoelasticContactLaw.cpp'],
+               
LIBS=env['LIBS']+['ConstitutiveLawDispatcher','ViscoelasticInteraction','SpheresContactGeometry','RigidBodyParameters']),
                                
        #env.SharedLibrary('MicroMacroAnalyser',
                #['Engine/StandAloneEngine/MicroMacroAnalyser.cpp'],


_______________________________________________
Mailing list: https://launchpad.net/~yade-dev
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~yade-dev
More help   : https://help.launchpad.net/ListHelp

Reply via email to