Ruby Sketchup中的onSaveModel观察者会导致无限循环



我试图在Sketchup中使用内置的ModelObserver类在用户保存当前模型时触发文件导出。由于某种原因,我的代码触发了一个无限循环-文本'onSaveModel'只输出一次,但exportModel()被困在循环中。

我的Ruby技能很低,但我也听说SketchUp Ruby API有时很不稳定。有人见过这个问题吗?

代码:

def protohypeEntry
    Sketchup.active_model.add_observer(ProtohypeModelObserver.new)
end
class ProtohypeModelObserver < Sketchup::ModelObserver
    def onSaveModel(model)
        puts "onSaveModel" + model.to_s
        exportModel()
    end
end
def exportModel()
    puts "exportModel()"
    model = Sketchup.active_model
    options_hash = { :triangulated_faces   => true,
     :doublesided_faces    => true,
     :edges                => false,
     :author_attribution   => true,
     :texture_maps         => true,
     :selectionset_only    => false,
     :preserve_instancing  => true }
     status = model.export 'C:UsersPelleTesttest.dae', options_hash
 end
 protohypeEntry() 

导出也会触发onSaveModel (API文档对此不清楚,我将在内部添加一个问题),因此您在观察者事件中的导出将触发无限循环。

设置一个内部标志来指示脚本的状态,并在导出过程中尽早中断。

module Example
  def self.protohypeEntry
    Sketchup.active_model.add_observer(ProtohypeModelObserver.new)
  end
  class ProtohypeModelObserver < Sketchup::ModelObserver
    def onSaveModel(model)
      puts "onSaveModel" + model.to_s
      Example.exportModel()
    end
  end
  def self.exportModel()
    return if @exporting
    puts "exportModel()"
    model = Sketchup.active_model
    options_hash = { :triangulated_faces   => true,
      :doublesided_faces    => true,
      :edges                => false,
      :author_attribution   => true,
      :texture_maps         => true,
      :selectionset_only    => false,
      :preserve_instancing  => true
    }
    @exporting = true
    status = model.export 'C:/test.dae', options_hash
  ensure
    # Just in case model.export should raise an exception we guarranty the flag
    # is reset.
    @exporting = false
  end
end
Example.protohypeEntry() 

最新更新