我试图在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()