Class InfoCubeOld
In: infocube.rb
Parent: Object

Methods

create   createsides   defaultcount   deselect   extrude   hide   new   nondefaultcount   reset   select   show   update   write2table   writer  

Included Modules

CommonTasks

Attributes

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] 

Public Class methods

Possible references vertex, line, face InfoCube.new(xlength,ylength,zlength,appendto)

[Source]

# 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

Public Instance methods

[Source]

# 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

[Source]

# 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

[Source]

# 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

[Source]

# 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

[Source]

# 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

[Source]

# File infocube.rb, line 1337
      def hide(scene)
         @fs.each do |fs1|
            fs1.each do |face1|
               face1.hide(scene)
            end
         end
      end

[Source]

# File infocube.rb, line 1298
      def nondefaultcount
         return 4 - defaultcount
      end

[Source]

# File infocube.rb, line 1344
      def reset
         $cubecount001 = -1
         @@count = 0
      end

[Source]

# 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

[Source]

# 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

[Source]

# 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

[Source]

# 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

[Source]

# 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

[Validate]