Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
THIS RUBY ALGORITHM IS THE ONE RESPONSIBLE FOR DECLARING THE DEGREES OF FREEDOM FOR EACH
EDGE ENTITIES OF.
class Node
attr_accessor :vertex,:rotation,:constraints,:degreesOfFreedom
def initialize(vertex)
self.constraints = [0,0,0]
self.vertex = vertex
self.degreesOfFreedom = [0,0,0]
end
def setDegreesOfFreedomToEdges
self.vertex.edges.each do |edge|
nearFarStartEnd = setNearOrFar(edge,self.vertex.position)
edge.set_attribute
"Structural","#{nearFarStartEnd[0]}DegreesOfFreedom",degreesOfFreedom
edge.set_attribute "Structural","#{nearFarStartEnd[0]}Index",nearFarStartEnd[1]
end
end
def getVertex()
return self.vertex
end
def getRotation
return self.rotation
end
def getConstraints
return self.constraints
end
def getDegreesOfFreedom
return self.degreesOfFreedom
end
def setNearOrFar(edge,node)
point1 = edge.vertices[0].position
point2 = edge.vertices[1].position
origin = Geom::Point3d.new(0,0,0)
distance1 = point1.distance(origin)
distance2 = point2.distance(origin)
nodeDesignation = []
if(point1 == node)
nodeDesignation = ["far",1]
else(point2 == node)
nodeDesignation = ["near",0]
end
if(point1 == node)
nodeDesignation = ["near",1]
else(point2 == node)
nodeDesignation = ["far",0]
end
end
return nodeDesignation
end
end
class FreedomDesignator
attr_accessor :nodeArray,:indexOFConstraints,:degreesOfFreedom,:forceMatrix
def initialize
self.nodeArray = []
self.indexOFConstraints = []
self.degreesOfFreedom = 1
end
# get methods
def getNodeArray()
return self.nodeArray
end
def getIndexOFConstraints()
return self.indexOFConstraints
end
def getDegreesOfFreedom()
return self.degreesOfFreedom
end
def getForceMatrix()
return self.forceMatrix
end
def mainProcess(entities)
puts(lineEntities)
self.setNodeArray(lineEntities)
self.setRotationOfNodeArrayAndConstraints(supportEntities)
self.setDegOfFreedomToNodeArray()
self.setDegOfFreedomToConstraints()
iterationForNodArray=0.0
nodeArray.each do |nA|
iterationForNodArray+=1
end
self.setDegreesOfFreedomToMemberElements(lineEntities)
iterationForLineEntities = 1
lineEntities.each do |lE|
nearDegreesOfFreedom = lE.get_attribute
"Structural","nearDegreesOfFreedom"
farDegreesOfFreedom = lE.get_attribute
"Structural","farDegreesOfFreedom"
iterationForLineEntities+=1
end
end
def setDegreesOfFreedomToMemberElements(lineEntities)
self.nodeArray.each do |nA|
nA.setDegreesOfFreedomToEdges
end
end
def setNodeArray(lineEntities)
lineEntities.each do |le|
vertex1 = le.vertices[0]
vertex2 = le.vertices[1]
nodeArray.each do |nA|
puts "#{nA.vertex.position}"
end
end
def setRotationOfNodeArrayAndConstraints(supportEntities)
if(supportEntities)
supportEntities.each do |sE|
self.nodeArray[index].rotation == self.getRotation(sE)
self.nodeArray[index].constraints = (sE.get_attribute
"Structural","constraints")
end
end
puts "CHECKING : setRotationOfNodeArrayAndConstraints :: method end"
end
def getRotation(supportEntities)
return 0.0
end
def setDegOfFreedomToNodeArray()
iterationForNodArray = 0
self.nodeArray.each do |nA|
iterationForConstraints = 0
nA.constraints.each do |const|
if(const == 0)
nA.degreesOfFreedom[iterationForConstraints] =
self.degreesOfFreedom
self.degreesOfFreedom += 1
elsif(const == 1)
self.indexOFConstraints <<
[iterationForNodArray,iterationForConstraints]
end
iterationForConstraints +=1
end
iterationForNodArray +=1
end
end
def setDegOfFreedomToConstraints()
self.indexOFConstraints.each do |inConst|
nodeArray[inConst[0]].degreesOfFreedom[inConst[1]] = self.degreesOfFreedom
self.degreesOfFreedom +=1
end
end
end
freedomDesignator = FreedomDesignator.new
freedomDesignator.mainProcess(ent)