创建一个将文本放入 .txt 文件的插件

Create a plugin that puts text in a .txt file

我正在 Ruby 中创建一个插件。 此时我无法将添加到 Sketchup 模型的坐标插入到 .txt 文件中。

这是我的代码:

require 'sketchup.rb'
SKETCHUP_CONSOLE.show rescue Sketchup.send_action("showRubyPanel:")
$stdout = File.new('file.txt', 'w')

module HWmakemyownplug
  def self.fileplug
    model = Sketchup.active_model 
    #Make some coordinates.
    coordinates = [[2,0,39],[0,0,1],[1,1,0]]
    #Add the points in Sketchup. This works!
    coordinates.each { |point| model.active_entities.add_cpoint(point) }
    #Puts the coordinates to the textfile 'file.txt'. This doesn't work!
    $stdout.puts(coordinates)   

  end #def self.fileplug
end #module makemyownplug

if (!file_loaded?(__FILE__))

  #Add to the SketchUp tools menu
  extensions_menu = UI.menu("Plugins")
  extensions_menu.add_item("testtesttest") { HWmakemyownplug::fileplug }
  # Let Ruby know we have loaded this file
  file_loaded(__FILE__)

end

当我点击菜单 > 插件 > testtesttest 时必须打印坐标。

您忘记在 $stdout.puts(坐标)

后关闭文件

$stdout.close

这是将数据写入 JSON 文件而非简单文本文档的示例代码。

代码可以 运行 在 SketchUp 之外的终端中进行测试。只需确保遵循这些步骤...

  1. 复制下面的代码并将其粘贴到 ruby 文件中(示例:file.rb)
  2. 运行 终端 ruby file.rb 或 运行 中的脚本与 SketchUp。
  3. 脚本会将数据写入 JSON 文件并读取 JSON 文件的内容。

JSON 文件的路径是相对于第一步中创建的 ruby 文件的路径。如果脚本找不到路径,它将为您创建 JSON 文件。

module DeveloperName
  module PluginName
    require 'json'
    require 'fileutils'

    class Main
      def initialize
        path = File.dirname(__FILE__)
        @json = File.join(path, 'file.json')
        @content = { 'hello' => 'hello world' }.to_json
        json_create(@content)
        json_read(@json)
      end

      def json_create(content)
        File.open(@json, 'w') { |f| f.write(content) }
      end

      def json_read(json)
        if File.exist?(json)
          file = File.read(json)
          data_hash = JSON.parse(file)
          puts "Json content: #{data_hash}"
        else
          msg = 'JSON file not found'
          UI.messagebox(msg, MB_OK)
        end
      end
      # # #
    end
    DeveloperName::PluginName::Main.new
  end
end