Newer
Older
3D_Braille / 3D_Braille / fcmake.rb
@natto natto on 16 Dec 2018 7 KB all push
#!/usr/bin/env ruby
# -*- coding: utf-8 -*-

def make_py(script)
  script= <<__EOS
#!/usr/lib/freecad
# coding: utf-8

FREECADPATH="/usr/lib/freecad/lib/"
import sys
sys.path.append(FREECADPATH)
import FreeCAD
import Sketcher
import PartDesign
import Mesh
__EOS

  script
end

def Calc_size(size,cv,ch)
  if /(\S+)\s+(\S+)/ =~size
    l_size=$1.to_i
    w_size=$2.to_i
  end
  w_max_characters=0
  width=w_size
  while cv < width
    if width-cv<=cv
      #p w_max_characters
      break
    else
      width-=cv
      w_max_characters+=1
    end
  end
  l_max_characters=0
  length=l_size
  while ch/2<length
    length-=ch
    l_max_characters+=1
    if length<=ch/2
      break
    end
  end
  return l_size,w_size,w_max_characters,l_max_characters
end
  
def make_ita(ita,bh,l_size,w_size)
  
  ita= <<__EOS
Gui.activateWorkbench("PartDesignWorkbench")
App.newDocument()
App.setActiveDocument("Unnamed")
App.ActiveDocument=App.getDocument("Unnamed")
Gui.ActiveDocument=Gui.getDocument("Unnamed")
App.activeDocument().addObject('Sketcher::SketchObject','Sketch')
App.activeDocument().Sketch.Placement = App.Placement(App.Vector(0.000000,0.000000,0.000000),App.Rotation(0.000000,0.000000,0.000000,1.000000))
Gui.activeDocument().activeView().setCamera('#Inventor V2.1 ascii \\n OrthographicCamera {\\n viewportMapping ADJUST_CAMERA \\n position 0 0 87 \\n orientation 0 0 1  0 \\n nearDistance -112.88701 \\n farDistance 287.28702 \\n aspectRatio 1 \\n focalDistance 87 \\n height 143.52005 }')
Gui.activeDocument().setEdit('Sketch')
App.ActiveDocument.Sketch.addGeometry(Part.Line(App.Vector(0,#{l_size},0),App.Vector(#{w_size},#{l_size},0)))
App.ActiveDocument.Sketch.addGeometry(Part.Line(App.Vector(#{w_size},#{l_size},0),App.Vector(#{w_size},0,0)))
App.ActiveDocument.Sketch.addGeometry(Part.Line(App.Vector(#{w_size},0,0),App.Vector(0,0,0)))
App.ActiveDocument.Sketch.addGeometry(Part.Line(App.Vector(0,0,0),App.Vector(0,#{l_size},0)))
App.ActiveDocument.Sketch.addConstraint(Sketcher.Constraint('Coincident',0,2,1,1))
App.ActiveDocument.Sketch.addConstraint(Sketcher.Constraint('Coincident',1,2,2,1))
App.ActiveDocument.Sketch.addConstraint(Sketcher.Constraint('Coincident',2,2,3,1))
App.ActiveDocument.Sketch.addConstraint(Sketcher.Constraint('Coincident',3,2,0,1))
App.ActiveDocument.Sketch.addConstraint(Sketcher.Constraint('Horizontal',0))
App.ActiveDocument.Sketch.addConstraint(Sketcher.Constraint('Horizontal',2))
App.ActiveDocument.Sketch.addConstraint(Sketcher.Constraint('Vertical',1))
App.ActiveDocument.Sketch.addConstraint(Sketcher.Constraint('Vertical',3))
App.ActiveDocument.recompute()
App.ActiveDocument.Sketch.addConstraint(Sketcher.Constraint('Distance',3,#{l_size}))
App.ActiveDocument.Sketch.setDatum(8,#{l_size}.000000) #ita length
App.ActiveDocument.recompute()
App.ActiveDocument.Sketch.addConstraint(Sketcher.Constraint('Distance',0,#{w_size}))
App.ActiveDocument.Sketch.setDatum(9,#{w_size}.000000) #ita width
App.ActiveDocument.recompute()
App.ActiveDocument.Sketch.addConstraint(Sketcher.Constraint('Coincident',2,2,-1,1))
App.ActiveDocument.recompute()
Gui.getDocument('Unnamed').resetEdit()
App.getDocument('Unnamed').recompute()
App.ActiveDocument.recompute()
App.ActiveDocument.Sketch.addConstraint(Sketcher.Constraint('Coincident',2,2,-1,1)) 
App.ActiveDocument.recompute()
Gui.getDocument('Unnamed').resetEdit()
App.getDocument('Unnamed').recompute()
App.activeDocument().addObject("PartDesign::Pad","Pad")
App.activeDocument().Pad.Sketch = App.activeDocument().Sketch
App.ActiveDocument.Pad.Length = #{bh} #ita thickness
App.ActiveDocument.Pad.Reversed = 0
App.ActiveDocument.Pad.Midplane = 0
App.ActiveDocument.Pad.Length2 = 100.000000
App.ActiveDocument.Pad.Type = 0
App.ActiveDocument.Pad.UpToFace = None
App.ActiveDocument.recompute()
Gui.activeDocument().resetEdit()
App.activeDocument().addObject('Sketcher::SketchObject','Sketch001')
App.activeDocument().Sketch001.Support = (App.ActiveDocument.Pad,["Face6"])
App.activeDocument().recompute()
Gui.activeDocument().setEdit('Sketch001')
__EOS

ita
end

def make_entyu(ji,ch,tenji,x_line,y_line,count_num1,count_num2,dh,cv,dv)
 
  b=0
  c=0
  hozon_x=x_line
  hozon_y=y_line
  for moji in ji.split("")
    
    while b<=ch[moji].length
      if count_num2==0
        if ch[moji][b]=="1"
          tenji +=<<__EOS
App.ActiveDocument.Sketch001.addGeometry(Part.Circle(App.Vector(#{x_line}, #{y_line},0),App.Vector(0,0,1),  0.75))
App.ActiveDocument.recompute()
App.ActiveDocument.Sketch001.addConstraint(Sketcher.Constraint('DistanceX',-2,1,#{count_num2},3,#{x_line}))
App.ActiveDocument.Sketch001.setDatum(#{count_num1},#{x_line})
App.ActiveDocument.recompute()
App.ActiveDocument.Sketch001.addConstraint(Sketcher.Constraint('DistanceY',-2,1,#{count_num2},3, #{y_line}))
App.ActiveDocument.Sketch001.setDatum(#{count_num1+=1},#{y_line})
App.ActiveDocument.recompute()
App.ActiveDocument.Sketch001.addConstraint(Sketcher.Constraint('Radius',#{count_num2},  0.75))
App.ActiveDocument.Sketch001.setDatum(#{count_num1+=1},0.750000)
App.ActiveDocument.recompute()
__EOS
    
          b+=1
          count_num2+=1
        else
          b+=1
          y_line-=dv
        end
      elsif ch[moji][b]=="1" 
        
        if b==0 || b==3
          y_line+=dv 
        end
        y_line-=dv
        tenji+=<<__EOS
App.ActiveDocument.Sketch001.addGeometry(Part.Circle(App.Vector(#{x_line}, #{y_line},0),App.Vector(0,0,1),  0.75))
App.ActiveDocument.recompute()
App.ActiveDocument.Sketch001.addConstraint(Sketcher.Constraint('DistanceX',-2,1,#{count_num2},3,#{x_line}))
App.ActiveDocument.Sketch001.setDatum(#{count_num1+=1},#{x_line})
App.ActiveDocument.recompute()
App.ActiveDocument.Sketch001.addConstraint(Sketcher.Constraint('DistanceY',-2,1,#{count_num2},3, #{y_line}))
App.ActiveDocument.Sketch001.setDatum(#{count_num1+=1},#{y_line})
App.ActiveDocument.recompute()
App.ActiveDocument.Sketch001.addConstraint(Sketcher.Constraint('Radius',#{count_num2},  0.75))
App.ActiveDocument.Sketch001.setDatum(#{count_num1+=1},0.750000)
App.ActiveDocument.recompute()
__EOS
        b+=1
        count_num2+=1
    
      else
    
        if b==0 || b==3
          y_line+=dv
        end
        y_line-=dv
        b+=1
      end
      if b==3
        x_line+=dh
        c+=1
        y_line=hozon_y
      end
    
    end
    if c==1
      x_line+=cv
      y_line=hozon_y
    else
      x_line+=cv
    end
    b=0
    c=0
  end
  return tenji, count_num1, count_num2 , y_line
end

def end_meisi(meisi,ph)
meisi =<<__EOS
App.ActiveDocument.recompute()
Gui.getDocument('Unnamed').resetEdit()
App.getDocument('Unnamed').recompute()
App.activeDocument().addObject("PartDesign::Pad","Pad001")
App.activeDocument().Pad001.Sketch = App.activeDocument().Sketch001
App.ActiveDocument.Pad001.Length =#{ph} #tem_length
App.ActiveDocument.Pad001.Reversed = 0
App.ActiveDocument.Pad001.Midplane = 0
App.ActiveDocument.Pad001.Length2 = 100.000000
App.ActiveDocument.Pad001.Type = 0
App.ActiveDocument.Pad001.UpToFace = None
App.ActiveDocument.recompute()
Gui.activeDocument().resetEdit()
__EOS
meisi
end

def make_fcmacro(ita,fi,la,den,meisi)
  open("watasu.fcmacro", "w:utf-8") do |write|
    write.print("#{ita}")
    write.print("#{fi}")
    write.print("#{la}")
    write.print("#{den}")
    write.print("#{meisi}")
  end
end

def make_fcmacro2(ita,fi,la,den,add,meisi)
  open("watasu.fcmacro", "w:utf-8") do |write|
    write.print("#{ita}")
    write.print("#{fi}")
    write.print("#{la}")
    write.print("#{den}")
    write.print("#{add}")
    write.print("#{meisi}")
  end
end