| Class | InfoCubeOld |
| In: |
infocube.rb
|
| Parent: | Object |
| f0 | [RW] | |
| f1 | [RW] | |
| f2 | [RW] | |
| f3 | [RW] | |
| f4 | [RW] | |
| f5 | [RW] | |
| fs | [RW] | temporary accessors |
| info | [RW] | |
| l0 | [RW] | |
| l1 | [RW] | |
| l2 | [RW] | |
| l3 | [RW] | |
| l4 | [RW] | |
| l5 | [RW] | |
| l6 | [RW] | |
| l7 | [RW] | |
| meshnum | [RW] | |
| ref | [RW] | |
| refattr | [RW] | |
| refs | [RW] | |
| reftype | [RW] | |
| row | [RW] | |
| selected | [RW] | |
| v0 | [RW] | todo change length on box with vertex ref and update |
| v1 | [RW] | todo change length on box with vertex ref and update |
| v2 | [RW] | todo change length on box with vertex ref and update |
| v3 | [RW] | todo change length on box with vertex ref and update |
| v4 | [RW] | todo change length on box with vertex ref and update |
| v5 | [RW] | todo change length on box with vertex ref and update |
| v6 | [RW] | todo change length on box with vertex ref and update |
| v7 | [RW] | todo change length on box with vertex ref and update |
| volreverse | [RW] | |
| xlength | [RW] | |
| ylength | [RW] | |
| zlength | [RW] |
Possible references vertex, line, face InfoCube.new(xlength,ylength,zlength,appendto)
# File infocube.rb, line 960 def initialize(*args) @selected = false @info = [self, self, "c#{@@count}"] # maybe it should already now what kind of references? # case args[] -> "vertexref" -> "lineref" -> "faceref" # input one vertex vX, create a box with dimensions [xyz]length # InfoCube.new(ref=InfoPoint,Lx,Ly,Lz,glgroup,referenced_vertex) if args[0].class == InfoPoint if args.length == 6 @ref = args[0] @xlength, @ylength, @zlength = args[1], args[2], args[3] @appendto = args[4] @refattr=args[5] elsif args.length == 3 @ref = args[0] @xlength, @ylength, @zlength = 10.0,10.0,10.0 @appendto = args[1] @refattr=args[2] elsif args.length == 2 @ref = args[0] @xlength, @ylength, @zlength = 10.0,10.0,10.0 @appendto = args[1] @refattr=0 end # matrix for v0 position with different vX ref @v0matrix = Matrix[[0,0,0],[-1,0,0],[-1,-1,0],[0,-1,0],[0,0,-1],[-1,0,-1],[-1,-1,-1],[0,-1,-1]] @v1matrix = Matrix[[1,0,0],[ 0,0,0],[ 0,-1,0],[1,-1,0],[1,0,-1],[ 0,0,-1],[ 0,-1,-1],[1,-1,-1]] @v2matrix = Matrix[[1,1,0],[ 0,1,0],[ 0, 0,0],[1, 0,0],[1,1,-1],[ 0,1,-1],[ 0, 0,-1],[1, 0,-1]] @v3matrix = Matrix[[0,1,0],[-1,1,0],[-1, 0,0],[0, 0,0],[0,1,-1],[-1,1,-1],[-1, 0,-1],[0, 0,-1]] @v4matrix = Matrix[[0,0,1],[-1,0,1],[-1,-1,1],[0,-1,1],[0,0, 0],[-1,0, 0],[-1,-1, 0],[0,-1, 0]] @v5matrix = Matrix[[1,0,1],[ 0,0,1],[ 0,-1,1],[1,-1,1],[1,0, 0],[ 0,0, 0],[ 0,-1, 0],[1,-1, 0]] @v6matrix = Matrix[[1,1,1],[ 0,1,1],[ 0, 0,1],[1, 0,1],[1,1, 0],[ 0,1, 0],[ 0, 0, 0],[1, 0, 0]] @v7matrix = Matrix[[0,1,1],[-1,1,1],[-1, 0,1],[0, 0,1],[0,1, 0],[-1,1, 0],[-1, 0, 0],[0, 0, 0]] else if args[0] == "1f" # extrude a cube puts "extrusion of cube" @reftype = args[0] @refs = args[1] @csys = args[2] @xvec = args[3] @yvec = args[4] @zvec = args[5] args[6] < 2 ? @meshnum = 2:@meshnum = args[6] # @p2 = InfoPoint.new(@csys, 1.0,1.0 ,0.0 , self,"p2") # @p3 = InfoPoint.new(@csys, 0.0,1.0 ,0.0 , self,"p3") elsif args[0] = "6f" puts "create 6f cube" end end if @reftype != "1f" update # normal seems to point inwards @f0 = InfoFace.new(@v0,@v1,@v2,@v3) @f0.normal = [0.0,0.0,1.0] @f0.info = ["f0",self] @f1 = InfoFace.new(@v4,@v5,@v6,@v7) @f1.normal = [0.0,0.0,1.0] @f1.info = ["f1",self] @f2 = InfoFace.new(@v0,@v1,@v5,@v4) @f2.normal = [0.0,-1.0,0.0] @f2.info = ["f2",self] @f3 = InfoFace.new(@v1,@v5,@v6,@v2) @f3.normal = [-1.0,0.0,0.0] @f3.info = ["f3",self] @f4 = InfoFace.new(@v2,@v6,@v7,@v3) @f4.normal = [0.0,-1.0,0.0] @f4.info = ["f4",self] @f5 = InfoFace.new(@v0,@v3,@v7,@v4) @f5.normal = [1.0,0.0,0.0] @f5.info = ["f5",self] @appendto.append(@f0) @appendto.append(@f1) @appendto.append(@f2) @appendto.append(@f3) @appendto.append(@f4) @appendto.append(@f5) elsif @reftype == "1f" create end @@count +=1 end
# File infocube.rb, line 1106 def create case @reftype when "1f" puts "1f reftype" #@f1, @f2, @f3, @f4, @f5 ,@l4, @l5, @l6, @l7 = extrude(@refs,@csys,[@xvec, @yvec, @zvec], @meshnum) # puts "this is whats going to be extruded #{@refs.f}" #@refs.cell.each do |cell1| # puts "celldef #{cell1[0]}, #{cell1[1]}, #{cell1[2]}, #{cell1[3]}" #end # puts "this is the l1 #{@refs.l1}" dir = [@xvec,@yvec,@zvec] #@refs.vertex.each do |vert1| # vertex1 = InfoPoint.new(@csys,[vert1.pos[0]+dir[0],vert1.pos[1]+dir[1],vert1.pos[2]+dir[2]]) # vertex1.inpos = [vert1.pos[0]+dir[0],vert1.pos[1]+dir[1],vert1.pos[2]+dir[2] ] # vertex1.update # vertex1.show($globalscene) #end # method with @refs.lX as argument that create vertex, cell fX lXn @vertexs = Array.new @cells = Array.new @fs = Array.new @l1s = Array.new @l2s = Array.new @l3s = Array.new def createsides(lineX,idx3) line1 = Array.new begin lineX.each_with_index do |line,idx1| line1[idx1] = line.p0 idx2 = idx1 end rescue #raise RuntimeError, "Error while creating infocube" return 0 end line1.push(lineX.last.p1) @vertexs[idx3],@cells[idx3],@fs[idx3],@l1s[idx3], @l2s[idx3], @l3s[idx3] = extrude(line1,@csys,[@xvec, @yvec, @zvec], @meshnum) end createsides(@refs.l0extra,0) createsides(@refs.l1,1) createsides(@refs.l2,2) createsides(@refs.l3,3) end end
# File infocube.rb, line 1130 def createsides(lineX,idx3) line1 = Array.new begin lineX.each_with_index do |line,idx1| line1[idx1] = line.p0 idx2 = idx1 end rescue #raise RuntimeError, "Error while creating infocube" return 0 end line1.push(lineX.last.p1) @vertexs[idx3],@cells[idx3],@fs[idx3],@l1s[idx3], @l2s[idx3], @l3s[idx3] = extrude(line1,@csys,[@xvec, @yvec, @zvec], @meshnum) end
# File infocube.rb, line 1282 def defaultcount count = 0 if @xlength == $defaults['cubexlength'] count += 1 end if @ylength == $defaults['cubeylength'] count += 1 end if @zlength == $defaults['cubezlength'] count += 1 end if @refattr == $defaults['cuberefattr'] count += 1 end return count end
# File infocube.rb, line 1314 def deselect begin @f0.deselect @f1.deselect @f2.deselect @f3.deselect @f4.deselect @f5.deselect rescue return 0 end @selected=false end
# File infocube.rb, line 1151 def extrude(line,csys,dir,meshnum) # create nodes vertex = Array.new vertcount = 0 line.each do |vert1| (0..meshnum-1).each do |no1| vert2pos = invPositionInCsys(csys,vert1.pos) movfac1 = no1/(meshnum-1) vertex[vertcount] = InfoPoint.new(csys,[vert2pos[0]+dir[0]*movfac1, vert2pos[1]+dir[1]*movfac1, vert2pos[2]+dir[2]*movfac1]) vertex[vertcount].inpos = [vert2pos[0]+dir[0]*movfac1, vert2pos[1]+dir[1]*movfac1, vert2pos[2]+dir[2]*movfac1] vertex[vertcount].update #vertex[vertcount].show($globalviewer) #puts "v #{vertex[vertcount].pos[0]}, #{vertex[vertcount].pos[1]}, #{vertex[vertcount].pos[2]}" vertcount += 1 end end # line vertex positions in line.v[num].pos # create celldef cell = Array.new f = Array.new cellno = 0 ilen = meshnum jlen = line.size (0..jlen-2).each do |jind| (0..ilen-2).each do |iind| # cell(i , i+1, i+j*ilen+1, i+j*ilen) cell[cellno] = [iind+jind*ilen, iind+jind*ilen+1, iind+(1+jind)*ilen+1, iind+(1+jind)*ilen] f[cellno] = LiteFace.new(vertex[cell[cellno][0]].pos[0], vertex[cell[cellno][0]].pos[1], vertex[cell[cellno][0]].pos[2], vertex[cell[cellno][1]].pos[0], vertex[cell[cellno][1]].pos[1], vertex[cell[cellno][1]].pos[2], vertex[cell[cellno][2]].pos[0], vertex[cell[cellno][2]].pos[1], vertex[cell[cellno][2]].pos[2], vertex[cell[cellno][3]].pos[0], vertex[cell[cellno][3]].pos[1], vertex[cell[cellno][3]].pos[2],self,truefalse(jind,iind)) cellno += 1 end end # create the edge lines ?? l2 = Array.new lineseg = 0 (ilen-1..vertcount-2).step(ilen) do |iind| l2[lineseg] = LiteLine.new(vertex[iind], vertex[iind+ilen],self,l2, "l2") l2[lineseg].info[1] = l2[lineseg] lineseg += 1 end l3 = Array.new lineseg = 0 (0..ilen-2).each do |iind| l3[lineseg] = LiteLine.new(vertex[iind], vertex[iind+1],self,l3, "l3") l3[lineseg].info[1] = l3[lineseg] lineseg += 1 end l1 = Array.new lineseg = 0 (vertcount-ilen..vertcount-2).each do |iind| l1[lineseg] = LiteLine.new(vertex[iind], vertex[iind+1],self,l1, "l1") l1[lineseg].info[1] = l1[lineseg] lineseg += 1 end return vertex,cell,f,l1,l2,l3 end
# File infocube.rb, line 1337 def hide(scene) @fs.each do |fs1| fs1.each do |face1| face1.hide(scene) end end end
# File infocube.rb, line 1301 def select begin @f0.select @f1.select @f2.select @f3.select @f4.select @f5.select rescue return 0 end @selected=true end
# File infocube.rb, line 1327 def show(scene) # puts @fs[0] # puts @fs[1] # puts @fs[2] @fs.each do |fs1| fs1.each do |face1| face1.class == LiteFace ? face1.show(scene):nil end end end
# File infocube.rb, line 1044 def update # generic vref 0-7 # principle v0 position in refercence to v7 is: # @v0[0]=position[0] + @v0matrix[7,0]*@xlength if @reftype != "1f" @v0 = [ @ref.pos[0]+@v0matrix[@refattr,0]*@xlength, @ref.pos[1]+ @v0matrix[@refattr,1]*@ylength, @ref.pos[2]+ @v0matrix[@refattr,2]*@zlength ] @v1 = [ @ref.pos[0]+@v1matrix[@refattr,0]*@xlength, @ref.pos[1]+ @v1matrix[@refattr,1]*@ylength, @ref.pos[2]+ @v1matrix[@refattr,2]*@zlength ] @v2 = [ @ref.pos[0]+@v2matrix[@refattr,0]*@xlength, @ref.pos[1]+ @v2matrix[@refattr,1]*@ylength, @ref.pos[2]+ @v2matrix[@refattr,2]*@zlength ] @v3 = [ @ref.pos[0]+@v3matrix[@refattr,0]*@xlength, @ref.pos[1]+ @v3matrix[@refattr,1]*@ylength, @ref.pos[2]+ @v3matrix[@refattr,2]*@zlength ] @v4 = [ @ref.pos[0]+@v4matrix[@refattr,0]*@xlength, @ref.pos[1]+ @v4matrix[@refattr,1]*@ylength, @ref.pos[2]+ @v4matrix[@refattr,2]*@zlength ] @v5 = [ @ref.pos[0]+@v5matrix[@refattr,0]*@xlength, @ref.pos[1]+ @v5matrix[@refattr,1]*@ylength, @ref.pos[2]+ @v5matrix[@refattr,2]*@zlength ] @v6 = [ @ref.pos[0]+@v6matrix[@refattr,0]*@xlength, @ref.pos[1]+ @v6matrix[@refattr,1]*@ylength, @ref.pos[2]+ @v6matrix[@refattr,2]*@zlength ] @v7 = [ @ref.pos[0]+@v7matrix[@refattr,0]*@xlength, @ref.pos[1]+ @v7matrix[@refattr,1]*@ylength, @ref.pos[2]+ @v7matrix[@refattr,2]*@zlength ] if @f0.class == InfoFace @f0.v0 = @v0 @f0.v1 = @v1 @f0.v2 = @v2 @f0.v3 = @v3 @f1.v0 = @v4 @f1.v1 = @v5 @f1.v2 = @v6 @f1.v3 = @v7 @f2.v0 = @v0 @f2.v1 = @v1 @f2.v2 = @v5 @f2.v3 = @v4 @f3.v0 = @v1 @f3.v1 = @v5 @f3.v2 = @v6 @f3.v3 = @v2 @f4.v0 = @v2 @f4.v1 = @v6 @f4.v2 = @v7 @f4.v3 = @v3 @f5.v0 = @v0 @f5.v1 = @v3 @f5.v2 = @v7 @f5.v3 = @v4 end elsif @reftype == "1f" # create reftype 1f hide($globalscene) create show($globalscene) end end
# File infocube.rb, line 1230 def write2table(table,row1) attr_index = 1 @row = row1 if @reftype != "1f" table.setItemText(row1 ,0,self.info[2]) if @xlength != $defaults['cubexlength'] table.setItemText(row1 ,attr_index,"xlength") attr_index += 1 table.setItemText(row1 ,attr_index,@xlength.to_s) attr_index += 1 end if @ylength != $defaults['cubeylength'] table.setItemText(row1 ,attr_index,"ylength") attr_index += 1 table.setItemText(row1 ,attr_index,@ylength.to_s) attr_index += 1 end if @zlength != $defaults['cubezlength'] table.setItemText(row1 ,attr_index,"zlength") attr_index += 1 table.setItemText(row1 ,attr_index,@zlength.to_s) attr_index += 1 end if @refattr != $defaults['cuberefattr'] table.setItemText(row1 ,attr_index,"refattr") attr_index += 1 table.setItemText(row1 ,attr_index,@refattr.to_s) attr_index += 1 end # puts "the row #{@row.to_s}" elsif @reftype == "1f" table.setItemText(row1 ,0,self.info[2]) # this method looks awkward, maybe it could be done in another way def writer(table, row1, attr, defaultname, name, attr_index ) if attr != $defaults[defaultname] && attr != nil table.setItemText(row1 ,attr_index,name) attr_index += 1 table.setItemText(row1 ,attr_index,attr.to_s) attr_index += 1 end return attr_index end attr_index = writer(table, row1, @xvec, 'facexvec', "xvec", attr_index) attr_index = writer(table, row1, @yvec, 'faceyvec', "yvec", attr_index) attr_index = writer(table, row1, @zvec, 'facezvec', "zvec", attr_index) attr_index = writer(table, row1, @meshnum, 'facemeshnum', "meshnum", attr_index) # just make the rest of the row empty (attr_index..($MAX_ATTRIB_SIZE*2)).each do |col| table.setItemText(row1,col,"") end end end
this method looks awkward, maybe it could be done in another way
# File infocube.rb, line 1263 def writer(table, row1, attr, defaultname, name, attr_index ) if attr != $defaults[defaultname] && attr != nil table.setItemText(row1 ,attr_index,name) attr_index += 1 table.setItemText(row1 ,attr_index,attr.to_s) attr_index += 1 end return attr_index end