Saturday, June 6, 2020

Ruby API for Civil Engineer

โดย ผศ.สราวุฎฐ์ วรสุมันต์ , ประยุทธ พันธุลาภ

Please Click on QR code to register for the class MIDTERM Examination

QR Code for JotForm form


Week 10

 

Week 7


*******************************
Midterm Examination
Download 2 files
week51.rb
offset.rb
--------------------------------------
and save into folder C:\QTOOLS\API
Run Sketchup
in Ruby console
load "C:\\QTOOLS\\API\\week51.rb" *******************************

Midterm Question


From menu choose Create building use parameters of yours from above table

Show/Hide Layer for my_column and beam

Delete guides after create building

BOQ mmenu

Please Click on QR code to register for the class MIDTERM Examination

QR Code for JotForm form

Notepad++ v.5.5

  1. Create folder C:\QTOOLS\API\ to store all learning materials
  2. Link download API
  3. Unnzip into folder above


  4. Goto folder C:\QTOOLS\API\SketchupAPI\npp55\

    Run file C:\QTOOLS\API\SketchupAPI\npp55\npp.5.5.Installer.exe

    Copy file C:\QTOOLS\API\SketchupAPI\ruby.xml
    into folder C:\Program Files (x86)\Notepad++\plugins\APIs\


Ruby Language References

Link to web site

Week 4

# load "C:\\QTOOLS\\API\\week4.rb"
#load others rb files
load "C:\\QTOOLS\\API\\week2.rb"
load "C:\\QTOOLS\\API\\week3.rb"

def test
  p "week4"

end

def add_point
 pt = Geom::Point3d.new(10.m,0,0) #create new point
 model = Sketchup.active_model
 model.entities.add_cpoint(pt) #add into model
end

def add_line
 pt1 = Geom::Point3d.new(0,0,0)
 pt2 = Geom::Point3d.new(10.m,20.m,4.m)
 model = Sketchup.active_model
 model.entities.add_line pt1,pt2

end


def add_face
 pt1 = Geom::Point3d.new(0,0,0)
 pt2 = Geom::Point3d.new(10.m,20.m,0)
 pt3 = Geom::Point3d.new(0,20.m,0)
 
 model = Sketchup.active_model
 model.entities.add_face(pt1, pt2, pt3)

end


def add_room
 pt1 = Geom::Point3d.new(0,0,0)
 pt2 = Geom::Point3d.new(4.m,0,0)
 pt3 = Geom::Point3d.new(4.m,5.m,0)
 pt4 = Geom::Point3d.new(0,5.m,0)
 model = Sketchup.active_model
 face = model.entities.add_face(pt1, pt2, pt3, pt4)
 face.pushpull 10.cm
end

def group_add_room
 pt1 = Geom::Point3d.new(0,0,0)
 pt2 = Geom::Point3d.new(4.m,0,0)
 pt3 = Geom::Point3d.new(4.m,5.m,0)
 pt4 = Geom::Point3d.new(0,5.m,0)
 model = Sketchup.active_model
 group = model.entities.add_group
 face = group.entities.add_face(pt1, pt2, pt3, pt4)
 face.pushpull 10.cm
end



def rotate1
 model = Sketchup.active_model; selection = model.selection; entity = selection[0];
 angle = 45.degrees #radians
 vector = Geom::Vector3d.new(0,0,1) #Z axis
 point = Geom::Point3d.new(0,0,0) #origin
 tr_rotate = Geom::Transformation.rotation point, vector, angle
 entity.transform!(tr_rotate)
end

def move1
 model = Sketchup.active_model; selection = model.selection; entity = selection[0];
 #tr_vector = Geom::Vector3d.new(10.m,2.m,0)
 tr_vector = Geom::Point3d.new(4.m,0,0) - Geom::Point3d.new(0,0,0)
 tr_move = Geom::Transformation.translation tr_vector
 entity.transform!(tr_move)
end

def scale1
 model = Sketchup.active_model; selection = model.selection; entity = selection[0];
 xscale = 2
 yscale = 2 
 zscale = 1
 point = Geom::Point3d.new(1.m,0,0) #change ref. point
 tr_scale = Geom::Transformation.scaling point, xscale, yscale, zscale
 entity.transform!(tr_scale)

end


def grid1
 arr_x = [3,4,5]
 arr_y = [6,7]
 point = Geom::Point3d.new(0,0,0)
 ix = 0 
 iy = 0
 arr_x.each{|dx| 
  puts dx; 
  p "======"
 }#arr_x
end

def grid11
 arr_x = [3,4,5]
 arr_y = [6,7]
 point = Geom::Point3d.new(0,0,0)
 ix = 0 
 iy = 0
 arr_x.each{|dx| 
  puts dx; 
  p "======"
  arr_y.each{|dy|
   puts dy; 
   p "*****"
  }#arr_y
 }#arr_x
end

def grid12
 arr_x = [3,4,5]
 arr_y = [6,7]
 point = Geom::Point3d.new(0,0,0)
 ix = 0 
 iy = 0
 point_row = point #ref. point
 model = Sketchup.active_model
 arr_x.each{|dx| 
  puts dx; 
  p "======"
  pt2 = point_row.offset Geom::Vector3d.new(dx.m,0,0)
  model.entities.add_cpoint(pt2) #add cpoint
  point_row  = pt2 #change ref. point to pt2
  
 } #arr_x
end

def grid13
 arr_x = [0,3,4,5]
 arr_y = [0,6,7]
 point_ver = Geom::Point3d.new(10.m,20.m,0)
 ix = 0 
 iy = 0
 point_row = point_ver #ref. point
 model = Sketchup.active_model
 arr_y.each{|dy|
  point_ver = point_ver.offset Geom::Vector3d.new(0,-dy.m,0)
  point_row = point_ver #ref. point
  arr_x.each{|dx| 
   puts dx; 
   p "======"
   pt2 = point_row.offset Geom::Vector3d.new(dx.m,0,0)
   model.entities.add_cpoint(pt2) #add cpoint
   point_row  = pt2 #change ref. point to pt2
   
  }#arr_x

 } #arr_y 
end

def grid14
 arr_x = [0,3,4,5]
 arr_y = [0,6,7]
 point_ver = Geom::Point3d.new(10.m,20.m,0)
 ix = 0 
 iy = 0
 point_row = point_ver #ref. point
 model = Sketchup.active_model
 #model.start_operation( "Make Grid" , true)
 arr_y.each{|dy|
  point_ver = point_ver.offset Geom::Vector3d.new(0,-dy.m,0)
  point_row = point_ver #ref. point
  arr_x.each{|dx| 
   puts dx; 
   p "======"
   pt2 = point_row.offset Geom::Vector3d.new(dx.m,0,0)
   
   make_column1(pt2) #add column
   
   model.entities.add_cpoint(pt2) #add cpoint
   point_row  = pt2 #change ref. point to pt2
   
  }#arr_x

 } #arr_y 
 #model.commit_operation
end


def make_column1(pt) #parameters
 #dimension of Column
 dx = 0.4.m
 dy = 0.3.m
 dz = 3.m
 #create points
 #pt1 = pt
 pt1 = pt.offset Geom::Vector3d.new((dx * -0.5) ,(dy * -0.5),0)  #adjust center point of column
 pt2 = pt1.offset Geom::Vector3d.new(dx,0,0)
 pt3 = pt2.offset Geom::Vector3d.new(0,dy,0)
 pt4 = pt1.offset Geom::Vector3d.new(0,dy,0)
 #create object column
 model = Sketchup.active_model
 group = model.entities.add_group
 face = group.entities.add_face(pt1, pt2, pt3, pt4)
 face.pushpull -dz
 #add layer  
 layer = model.layers.add "my_column"
 #change layer of group 
 group.layer = layer 

end


def count_group
 model = Sketchup.active_model;   
 selection = model.selection;   
 arr = [];   
 selection.each{|entity| arr.push entity } 
 count = 0
 arr.each{|entity| 
  if (entity.class == Sketchup::Group);  
   group = entity; 
   count = count + 1
  end
 }
 p "group count =" + count.to_s
 p ""

end










Week 3

%Steel in building parts
Steel in Column
# load "C:\\QTOOLS\\API\\week3.rb"

def test
  p "week3"

end


def make_column
 #dimension of Column
 dx = 0.4.m
 dy = 0.3.m
 dz = 3.m
 #create points
 pt1 = Geom::Point3d.new(0,0,0)
 pt2 = pt1.offset Geom::Vector3d.new(dx,0,0)
 pt3 = pt2.offset Geom::Vector3d.new(0,dy,0)
 pt4 = pt1.offset Geom::Vector3d.new(0,dy,0)
 #create object column
 model = Sketchup.active_model
 group = model.entities.add_group
 face = group.entities.add_face(pt1, pt2, pt3, pt4)
 face.pushpull -dz
 #add layer  
 layer = model.layers.add "my_column"
 #change layer of group 
 group.layer = layer 

end


def make_beam 
 #dimension of Column
 dx = 4.m
 dy = 0.2.m
 dz = 0.4.m
 angle = 0.degrees #rotation angle
 #create points
 pt1 = Geom::Point3d.new(0,0,0)
 pt2 = pt1.offset Geom::Vector3d.new(dx,0,0)
 pt3 = pt2.offset Geom::Vector3d.new(0,dy,0)
 pt4 = pt1.offset Geom::Vector3d.new(0,dy,0)
 #create object column
 model = Sketchup.active_model
 group = model.entities.add_group
 face = group.entities.add_face(pt1, pt2, pt3, pt4)
 face.pushpull dz
 tr_rotate = Geom::Transformation.rotation pt1, Geom::Vector3d.new(0,0,1), angle
 group.transform!(tr_rotate)
 #add layer 
 layer = model.layers.add "my_beam"
 #change layer of group
 group.layer = layer

end

def move_object
 #parameters from user
 prompts = ["dx [m.]" , "dy [m.]" , "dz [m.]"];  
 defaults = ["1" , "1" , "1"]; 
 input = UI.inputbox prompts, defaults,  "Enter dx,dy,dz." #return as array
  #distance of be move
  dx = input[0].to_f.m
  dy = input[1].to_f.m
  dz = input[2].to_f.m
 model = Sketchup.active_model; selection = model.selection; entity = selection[0];
 tr_vector = Geom::Vector3d.new(dx,dy,dz)
 tr_move = Geom::Transformation.translation tr_vector
 entity.transform!(tr_move)
end






Week 2

Download file boq1.skp and save in folder C:\QTOOLS\API\


Week 1:Basic Sketchup And Ruby API

Objectives:
1.Understand Sketchup's basic model concept edge , face, group, component
2.Understand relation between Sketchup model and Ruby API
3.How to count objects ,edges , faces, groups, components, in model with its properties such as length , area
# load "C:\\QTOOLS\\API\\week1.rb"

def count_object
 model = Sketchup.active_model; selection = model.selection; entity = selection[0];
 if (entity.class == Sketchup::Edge);  
  edge = entity; 
  p edge
 end
 if (entity.class == Sketchup::Face);  
  face = entity;  
  p face
 end
 if (entity.class == Sketchup::Group);  
  group = entity; 
  p group
 end
 if (entity.class == Sketchup::ComponentInstance); 
  component = entity;  
  p component
 end
end


End of Week 1