工具事件规范

参数说明

参数 说明 数据类型 参考值
event 事件名称 Symbol :exit、:finish、:cancel、:change
data 数据 Hash

测量长度

DFC::Common::Features::MeasureLine.measure do |event, data|
  if event == :finish
    puts data[:res]
  end
end

测量面积

type = 'mm²'
DFC::Common::Features::MeasureArea.measure do |event, data|
  if event == :finish
       if type == 'mm²'
         quantity = data[:res]* 0.0254 * 0.0254 * 1000 * 1000
       elsif type == 'm²'
         quantity = data[:res]* 0.0254 * 0.0254.round(3)
       end
  end
end

测量体积

type = 'm³'
DFC::Common::Features::MeasureVolume.measure do |event, data|
  if event == :finish
       if type == 'm³'
         data[:res]* 0.0254 * 0.0254 * 0.0254
       end
  end
end

设置基点

ent = Sketchup.active_model.selection[0]
label = '安装基点' # 安装基点、固定基点
DFC::Common::Features::BasePointSetting.base_point_setting(ent, label) do |event, info, size|
  if event == :finish
    p size
  end
end

生成图例模型

ent = Sketchup.active_model.selection[0]
names = ['底面'] # 底面、顶面、正面、背面、右侧面、左侧面
DFC::Common::Features::LegendSetting.legend_setting(ent, names) do |event, ids, entities|
  if event == :finish
    puts ids
    puts entities
  end
end

变量设置

ent = Sketchup.active_model.selection[0]
DFC::Common::Features::VariableSetting.variable_setting(ent) do |result|
  dfc_dd result
end

模型拾取带测量

DFC::Common::Features::ModelPickUp.model_pickup do |event, result|
  if event == :finish
    dfc_dd result
  end
end

多个长度测量

# info_hash = {
#        '长' => false,
#        '宽' => false,
#        '高' => false,
#      }
# 默认测量长宽高, 如果只需要测量长度info_hash={'长' => false}
DFC::Common::Features::MeasureLength.measure (info_hash) do |event, result|
  if event == :finish
    dfc_dd result
  end
end

模型拾取

DFC::Common::Features::PickUp.pickup do |event, result|
  if event == :finish
    dfc_dd result
  end
end

模型拾取

# 拾取单个模型  
pick_model = DFC::Common::Features::PickModel.new
# 拾取多个模型  
pick_model = DFC::Common::Features::PickModel.new true
# 工具激活 callback
pick_model.activate_block {
  arr = Sketchup.active_model.active_path
  unless arr.blank?
    UI.messagebox '请不要在实体组内拾取模型作为实体'
    Sketchup.active_model.select_tool nil
  end
}
# 判断模型是否有效 是否是可以拾取模型 案例不拾取项目组 当前之后pickhelp  后续增加框选
pick_model.valid_entity_block { |state, data|
  next unless state == :pick_help

  ph = data
  best_entity = ph.best_picked
  if best_entity.is_a?(Sketchup::Group) || best_entity.is_a?(Sketchup::ComponentInstance)
    common_attr = best_entity.dfc_get_common_attribute
    next common_attr && common_attr['DX_LX'] == '项目组' ? nil : best_entity
  end
}
# 工具事件call_back 当前只有 :finish 单选返回单个模型  多选返回数组
pick_model.event_callback { |event, group_or_groups|
  next unless event == :finish && group_or_groups

  puts group_or_groups
  Sketchup.active_model.select_tool nil
}
Sketchup.active_model.select_tool pick_model

拾取面添加材质

model = Sketchup.active_model
materials = model.materials
m2 = materials.add('Fred')
m2.color = 'red'

obj = DFC::Common::Features::FaceAddMaterial.setting(m2) do |event, data|
  if event == :finish
    puts "data == {}; #{data}"
  end
end

选择面

DFC::Common::Features::SelectModel.event do |event, data|
  if event == :finish
    data[:select_infos].each {|ins|
      p ins.to_a
    }
  elsif event == :exit
    puts '退出工具'
  end
end

赋材质

DFC::Common::Features::AdhesionTexture.adhesion_texture(id) do |event|
  if event == :finish
    Sketchup.active_model.select_tool nil
  end
end

表面处理

names = ["石材", "木材", "型钢", "不锈钢"] # names可不传或4个元素任意组合
DFC::Common::Features::SurfaceTreat.show(names) do |data|
  dfc_dd data
end

DFC_UI替换UI.inputbox弹窗

prompts = ["偏移距离", "..."]
defaults = ["0", "..."]
title = "统一偏移"
DFC::Common::Features::DfcUI.inputbox(prompts, defaults, title) do |status, data|
  if event == :finish
    dfc_dd data
  else #  event == :exit
    dfc_dd '窗口关闭'
  end
  
end