def AddAxialRotationJoint(self, static, dynamic): existingjoints = 1 for obj1 in FreeCAD.ActiveDocument.Objects: #Count the existing joints if obj1.Label.startswith('joint'): existingjoints = existingjoints + 1 obj = 'joint_' + static.label + '_' + dynamic.label a = FreeCAD.ActiveDocument.addObject("Part::FeaturePython", obj) Axialrotation(a, str(existingjoints), static, dynamic) CustomView(a.ViewObject) #Move the object to it's container FreeCAD.ActiveDocument.getObject('Axial_rotation_joints').addObject(a) a.addObject( FreeCAD.ActiveDocument.getObjectsByLabel("x: joint: " + str(existingjoints))[0]) a.addObject( FreeCAD.ActiveDocument.getObjectsByLabel("y: joint: " + str(existingjoints))[0]) a.addObject( FreeCAD.ActiveDocument.getObjectsByLabel("z: joint: " + str(existingjoints))[0]) a.addObject( FreeCAD.ActiveDocument.getObjectsByLabel("jf: " + str(existingjoints))[0]) #Add vectors to animate reaction forces: a.Label = 'joint: ' + str(existingjoints) #rename the joint
def AddDeformableDisplacementJoint(self, node1, node2): existingjoints = 1 for obj1 in FreeCAD.ActiveDocument.Objects: #Count the existing joints if obj1.Label.startswith('joint'): existingjoints = existingjoints + 1 obj = 'joint_' + node1.label + '_' + node2.label a = FreeCAD.ActiveDocument.addObject("Part::FeaturePython", obj) DeformableDisplacement(a, existingjoints, node1, node2) a.Label = 'joint: ' + str(existingjoints) CustomView(a.ViewObject) #Move the object to it's container a.addObject( FreeCAD.ActiveDocument.getObjectsByLabel("x: joint: " + str(existingjoints))[0]) a.addObject( FreeCAD.ActiveDocument.getObjectsByLabel("y: joint: " + str(existingjoints))[0]) a.addObject( FreeCAD.ActiveDocument.getObjectsByLabel("z: joint: " + str(existingjoints))[0]) a.addObject( FreeCAD.ActiveDocument.getObjectsByLabel("jf: " + str(existingjoints))[0]) a.addObject( FreeCAD.ActiveDocument.getObjectsByLabel("sp: " + str(existingjoints))[0]) FreeCAD.ActiveDocument.getObject( "Deformable_displacement_joints").addObject(a)
def AddClampJoint(self, node): #Count the existing joints: existingjoints = 1 for obj1 in FreeCAD.ActiveDocument.Objects: #Count the existing joints if obj1.Label.startswith('joint'): existingjoints = existingjoints + 1 obj = 'joint_' + node.label a = FreeCAD.ActiveDocument.addObject("Part::FeaturePython", obj) Clamp(a, str(existingjoints), node) CustomView(a.ViewObject) #Move objects to their containers: FreeCAD.ActiveDocument.getObject('Clamp_joints').addObject(a) a.addObject( FreeCAD.ActiveDocument.getObjectsByLabel("x: joint: " + str(existingjoints))[0]) a.addObject( FreeCAD.ActiveDocument.getObjectsByLabel("y: joint: " + str(existingjoints))[0]) a.addObject( FreeCAD.ActiveDocument.getObjectsByLabel("z: joint: " + str(existingjoints))[0]) a.addObject( FreeCAD.ActiveDocument.getObjectsByLabel("jf: " + str(existingjoints))[0]) a.Label = 'joint: ' + str(existingjoints) #rename the clamp
def AddPrismaticJoint(self, node1, node2): existingjoints = 1 for obj1 in FreeCAD.ActiveDocument.Objects: #Count the existing joints if obj1.Label.startswith('joint'): existingjoints = existingjoints + 1 obj = 'joint_' + node1.label + '_' + node2.label a = FreeCAD.ActiveDocument.addObject("Part::FeaturePython", obj) Prismatic(a, str(existingjoints), node1, node2) CustomView(a.ViewObject) #Move the object to it's container FreeCAD.ActiveDocument.getObject("Prismatic_joints").addObject(a) a.addObject( FreeCAD.ActiveDocument.getObjectsByLabel("x: joint: " + str(existingjoints))[0]) a.addObject( FreeCAD.ActiveDocument.getObjectsByLabel("y: joint: " + str(existingjoints))[0]) a.addObject( FreeCAD.ActiveDocument.getObjectsByLabel("z: joint: " + str(existingjoints))[0]) a.addObject( FreeCAD.ActiveDocument.getObjectsByLabel("jf: " + str(existingjoints))[0]) a.Label = 'joint: ' + str(existingjoints) #rename the joint
def AddRevoluteHingeJoint(self, node1, node2, cylinder): obj = 'joint_' + node1.label + '_' + node2.label #Count the existing joints: existingjoints = 1 for obj1 in FreeCAD.ActiveDocument.Objects: #Count the existing joints if obj1.Label.startswith('joint'): existingjoints = existingjoints + 1 a = FreeCAD.ActiveDocument.addObject("Part::FeaturePython", obj) Revolutehinge(a, str(existingjoints), node1, node2, cylinder) CustomView(a.ViewObject) #ManageAxes.AddAxes(cylinder,'joint',str(existingjoints)) a.Label = 'joint: ' + str(existingjoints) #rename the hinge #Move objects to their containers: FreeCAD.ActiveDocument.getObject('Revolute_hinge_joints').addObject(a) a.addObject( FreeCAD.ActiveDocument.getObjectsByLabel("x: joint: " + str(existingjoints))[0]) a.addObject( FreeCAD.ActiveDocument.getObjectsByLabel("y: joint: " + str(existingjoints))[0]) a.addObject( FreeCAD.ActiveDocument.getObjectsByLabel("z: joint: " + str(existingjoints))[0]) a.addObject( FreeCAD.ActiveDocument.getObjectsByLabel("jf: " + str(existingjoints))[0])
def AddRevolutePin( self, node, referenceCylinder ): #This method receives a dynamic node and a cylinder and adds a revolute pin to the node, and around the center of mass of the cylinder obj = 'joint_' + node.label referenceCylinder.ViewObject.Visibility = False #Hide the reference cylinder #Count the existing joints: existingjoints = 1 for obj1 in FreeCAD.ActiveDocument.Objects: #Count the existing joints if obj1.Label.startswith('joint'): existingjoints = existingjoints + 1 a = FreeCAD.ActiveDocument.addObject("Part::FeaturePython", obj) Revolutepin(a, str(existingjoints), node, referenceCylinder) CustomView(a.ViewObject) a.ViewObject.Transparency = 85 a.ViewObject.LineWidth = 1.00 #a.ViewObject.Selectable = False a.Shape = referenceCylinder.Shape #a.ViewObject.Selectable = False a.Label = 'joint: ' + str(existingjoints) #rename the hinge #Move objects to their containers: FreeCAD.ActiveDocument.getObject('Revolute_pin_joints').addObject(a) a.addObject( FreeCAD.ActiveDocument.getObjectsByLabel("x: joint: " + str(existingjoints))[0]) a.addObject( FreeCAD.ActiveDocument.getObjectsByLabel("y: joint: " + str(existingjoints))[0]) a.addObject( FreeCAD.ActiveDocument.getObjectsByLabel("z: joint: " + str(existingjoints))[0]) a.addObject( FreeCAD.ActiveDocument.getObjectsByLabel("jf: " + str(existingjoints))[0])
def AddStructuralForce(self, node): existingforces = 1 for obj1 in FreeCAD.ActiveDocument.Objects: #Count the existing joints if obj1.Label.startswith('force'): existingforces = existingforces + 1 obj = 'force_' + node.label a = FreeCAD.ActiveDocument.addObject("App::FeaturePython", obj) StructuralForce(a, str(existingforces), node) CustomView(a.ViewObject) #Move the object to it's container FreeCAD.ActiveDocument.getObject("Structural_forces").addObject(a) a.Label = 'force: ' + str(existingforces) #rename the joint
def AddGravity(self): #This method adds gravity to the simulation: if (len(FreeCAD.ActiveDocument.getObjectsByLabel("MBDyn_simulation")) == 1): #Only if a world exists: #Add gravity: obj = FreeCAD.ActiveDocument.addObject("App::FeaturePython", "gravity") Gravity(obj) CustomView(obj.ViewObject) #Move the gravity object to it's container: FreeCAD.ActiveDocument.getObject("Forces").addObject(obj) else: QtGui.QMessageBox.information(None, 'Error.', 'You have to create a world firts.')
def CreateWorld( self ): #This method creates all the containers in the tree view and moves all the exiting objects into the "Bodies" container. if (len(FreeCAD.ActiveDocument.getObjectsByLabel("MBDyn_simulation")) == 0): #Only if a world does not exist: if (len(FreeCAD.ActiveDocument.Objects) > 0): Createworld( ) #Adds all the goups and the global reference frame #Create a simulation and move it into the container: a = FreeCAD.ActiveDocument.addObject("App::FeaturePython", "MBDyn") MBDyn(a) CustomView(a.ViewObject) FreeCAD.ActiveDocument.getObject("MBDyn_simulation").addObject( a) #Create a simulation parameters object and move it to its container: b = FreeCAD.ActiveDocument.addObject("App::FeaturePython", "Animation") Animation_parameters(b) CustomView(b.ViewObject) FreeCAD.ActiveDocument.getObject("MBDyn_simulation").addObject( b) #Create control data parameters object and move it to its container: c = FreeCAD.ActiveDocument.addObject("App::FeaturePython", "ControlData") ControlData(c) CustomView(c.ViewObject) FreeCAD.ActiveDocument.getObject("MBDyn_simulation").addObject( c) else: QtGui.QMessageBox.information( None, 'Error.', 'You need at least one solid object to create a simulation.' ) else: QtGui.QMessageBox.information(None, 'Error.', 'A world has already been created.')
def AddStructuralDumyNode(self, node, baseBody): obj = 'structural_' + baseBody.Label a = FreeCAD.ActiveDocument.addObject("Part::FeaturePython", obj) Dummynode(a, node, baseBody) CustomView(a.ViewObject) a.Label = 'structural: ' + baseBody.Label #Move objects to their container FreeCAD.ActiveDocument.getObject("Dummy_nodes").addObject(a) a.addObject( FreeCAD.ActiveDocument.getObjectsByLabel("x: structural: " + baseBody.Label)[0]) a.addObject( FreeCAD.ActiveDocument.getObjectsByLabel("y: structural: " + baseBody.Label)[0]) a.addObject( FreeCAD.ActiveDocument.getObjectsByLabel("z: structural: " + baseBody.Label)[0])
def AddStructuralStaticNode(self, baseBody): obj = 'structural_' + baseBody.Label a = FreeCAD.ActiveDocument.addObject("Part::FeaturePython", obj) Structuralstaticnode(a, baseBody) CustomView(a.ViewObject) a.Label = "structural: " + baseBody.Label #Move objects to their container: FreeCAD.ActiveDocument.getObject("Static_nodes").addObject(a) a.addObject( FreeCAD.ActiveDocument.getObjectsByLabel("x: structural: " + baseBody.Label)[0]) a.addObject( FreeCAD.ActiveDocument.getObjectsByLabel("y: structural: " + baseBody.Label)[0]) a.addObject( FreeCAD.ActiveDocument.getObjectsByLabel("z: structural: " + baseBody.Label)[0])
def AddStructuralDynamicNode(self, baseBody): obj = 'structural_' + baseBody.Label node = FreeCAD.ActiveDocument.addObject("Part::FeaturePython", obj) Structuraldynamicnode(node, baseBody) CustomView(node.ViewObject) node.Label = 'structural: ' + baseBody.Label #Move objects to their container FreeCAD.ActiveDocument.getObject("Dynamic_nodes").addObject(node) node.addObject( FreeCAD.ActiveDocument.getObjectsByLabel('x: structural: ' + baseBody.Label)[0]) node.addObject( FreeCAD.ActiveDocument.getObjectsByLabel('y: structural: ' + baseBody.Label)[0]) node.addObject( FreeCAD.ActiveDocument.getObjectsByLabel('z: structural: ' + baseBody.Label)[0])