{"id":7741,"date":"2023-03-25T10:45:49","date_gmt":"2023-03-25T01:45:49","guid":{"rendered":"https:\/\/www.skyer9.pe.kr\/wordpress\/?p=7741"},"modified":"2023-03-29T11:42:21","modified_gmt":"2023-03-29T02:42:21","slug":"sketchup-plugin-%ea%b0%9c%eb%b0%9c%ed%95%98%ea%b8%b0-01","status":"publish","type":"post","link":"https:\/\/www.skyer9.pe.kr\/wordpress\/?p=7741","title":{"rendered":"SketchUp Plugin \uac1c\ubc1c\ud558\uae30 01"},"content":{"rendered":"<h1>SketchUp Plugin \uac1c\ubc1c\ud558\uae30 01<\/h1>\n<h2>Dev Tool \uc0dd\uc131<\/h2>\n<p>\uac1c\ubc1c\uc744 \uc704\ud55c \uba54\ub274\ub97c \uc0dd\uc131\ud569\ub2c8\ub2e4.<\/p>\n<p><code>C:\\Users\\\uacc4\uc815\uc774\ub984\\AppData\\Roaming\\SketchUp\\SketchUp \ubc84\uc804\\SketchUp\\Plugins\\<\/code> \ud3f4\ub354\uc5d0 \uc544\ub798 \ud30c\uc77c\uc744 \uc0dd\uc131\ud558\uace0, SketchUp \uc744 \uc7ac\uc2e4\ud589\ud569\ub2c8\ub2e4.<\/p>\n<p>my_devtool.rb<\/p>\n<pre><code class=\"language-rb\">require &quot;sketchup.rb&quot;\nrequire &quot;extensions.rb&quot;\n\nmy_devtool_loader = SketchupExtension.new &quot;My Devtool Loader&quot;, &quot;my_devtool\/main.rb&quot;\nmy_devtool_loader.copyright= &quot;Copyright 2023 skyer9&quot;\nmy_devtool_loader.creator= &quot;skyer9&quot;\nmy_devtool_loader.version = &quot;1.0&quot;\nmy_devtool_loader.description = &quot;My Devtool&quot;\nSketchup.register_extension my_devtool_loader, true<\/code><\/pre>\n<p>my_devtool\/main.rb<\/p>\n<pre><code class=\"language-rb\">require &quot;sketchup.rb&quot;\n\nmodule My_devtool\n\n    PLUGIN_ROOT ||= &quot;C:\/Users\/oem\/AppData\/Roaming\/SketchUp\/SketchUp 2020\/SketchUp\/Plugins\/&quot;\n\n    def self.reload\n        load (File.join(PLUGIN_ROOT, &quot;my_devtool.rb&quot;))\n        load (File.join(PLUGIN_ROOT, &quot;my_devtool\/main.rb&quot;))\n    end\n\n    def self.hello\n        puts &quot;Hello, world!&quot;\n    end\nend\n\nunless file_loaded?(__FILE__)\n    mymenu = UI.menu(&quot;Plugins&quot;).add_submenu(&quot;My Devtool&quot;)\n    mymenu.add_item(&quot;Reload plugins&quot;) {My_devtool::reload}\n    mymenu.add_item(&quot;Hello, World!&quot;) {My_devtool::hello}\n    file_loaded(__FILE__)\nend<\/code><\/pre>\n<p>\uba54\ub274\uac00 \ucd94\uac00\ub41c \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uace0, Ruby Console \uc744 \uc2e4\ud589\ud6c4 \uba54\ub274\ub97c \uc2e4\ud589\ud558\uba74 \uacb0\uacfc\ub97c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p><code>Hello, world!<\/code> \ubb38\uc790\uc5f4\uc744 \ubcc0\uacbd\ud574 \uac00\uba74\uc11c Reload plugins \ub97c \ud574\ubcf4\uba74 \ubb38\uc790\uc5f4\uc774 \ubcc0\uacbd\ub418\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p><a href=\"https:\/\/www.skyer9.pe.kr\/wordpress\/wp-content\/uploads\/2023\/03\/2023-03-25-02.png\"><img decoding=\"async\" src=\"https:\/\/www.skyer9.pe.kr\/wordpress\/wp-content\/uploads\/2023\/03\/2023-03-25-02.png\" alt=\"\" \/><\/a><\/p>\n<p>\uac1c\ubc1c\uc744 \ud558\ub2e4\ubcf4\uba74 \uc544\ub798\ucc98\ub7fc \ub429\ub2c8\ub2e4.<\/p>\n<pre><code class=\"language-rb\">require &quot;sketchup.rb&quot;\n\nmodule My_devtool\n\n    PLUGIN_ROOT ||= &quot;C:\/Users\/oem\/AppData\/Roaming\/SketchUp\/SketchUp 2020\/SketchUp\/Plugins\/&quot;\n\n    def self.reload\n        load (File.join(PLUGIN_ROOT, &quot;my_devtool.rb&quot;))\n        load (File.join(PLUGIN_ROOT, &quot;my_devtool\/main.rb&quot;))\n\n        load (File.join(PLUGIN_ROOT, &quot;skyer9_doorwindow.rb&quot;))\n        load (File.join(PLUGIN_ROOT, &quot;skyer9_doorwindow\/dwc_parametric.rb&quot;))\n        load (File.join(PLUGIN_ROOT, &quot;skyer9_doorwindow\/main.rb&quot;))\n    end\n\n    def self.clear_console\n        SKETCHUP_CONSOLE.clear\n    end\nend\n\nunless file_loaded?(__FILE__)\n    mymenu = UI.menu(&quot;Plugins&quot;).add_submenu(&quot;My Devtool&quot;)\n    mymenu.add_item(&quot;Reload plugins&quot;) {My_devtool::reload}\n    mymenu.add_item(&quot;Clear Console&quot;) {My_devtool::clear_console}\n    file_loaded(__FILE__)\nend<\/code><\/pre>\n<h2>\ubcbd \ub6ab\uae30<\/h2>\n<p><a href=\"https:\/\/forums.sketchup.com\/t\/how-do-i-script-pushing-a-face-to-the-opposite-side-of-a-box\/135801\/8\">\ucc38\uc870<\/a><\/p>\n<pre><code class=\"language-rb\"># \ud604\uc7ac face \uac00 \uc18d\ud55c \ubaa8\ub4e4\uc5d0 \ubc18\ub300\uba74\uc744 \ucc3e\ub294\ub2e4.\npt1 = face1.outer_loop.vertices[0].position\n# \ub450 \uba74 \uc0ac\uc774\uc5d0 \ub808\uc774\uc800\ub97c \uc3d8\uc544 \uc874\uc7ac\ud558\ub294 \uc624\ube0c\uc81d\ud2b8\ub97c \ucc3e\ub294\ub2e4.\nresult = model.raytest( [ pt1, face1.normal.reverse ] )\n\n# \uacb0\uacfc\uac00 \uc788\uc73c\uba74\nif result\n    # \uccab\ubc88\uc9f8 \uc624\ube0c\uc81d\ud2b8\ub97c \uac00\uc838\uc628\ub2e4.\n    pt2 = result.first\n    # face \uc778\uc9c0 \uccb4\ud06c\ud55c\ub2e4\n    if result.last[0].is_a?(Sketchup::Face)\n        face2 = result.last[0]\n        # \ub450 \uba74\uc758 \uac70\ub9ac\ub97c \uacc4\uc0b0\ud55c\ub2e4.\n        dist  = pt1.distance(pt2)\n        # pushpull \ud55c\ub2e4.\n        face1.pushpull(-dist)\n    end\nend<\/code><\/pre>\n<h2>JointPushPull<\/h2>\n<p>JointPushPull Classic \uc774 \uc18c\uc2a4\uac00 \uc554\ud638\ud654\ub418\uc5b4 \uc788\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\ub9ce\uc740 \ucc38\uace0\uc790\ub8cc\uac00 \ub420 \ub4ef \ud569\ub2c8\ub2e4.<\/p>\n<h2>\uacbd\uace0\ucc3d<\/h2>\n<h3>\ud654\uba74 \uc624\ub978\ucabd \ud558\ub2e8\uc5d0 \ud45c\uc2dc<\/h3>\n<pre><code class=\"language-rb\">notification = UI::Notification.new(\n    Sketchup.extensions[0],\n    &quot;Select faces before Executing.&quot;,\n)\nnotification.on_accept(&quot;OK&quot;) do |notification, title|\n    puts &quot;Info : Select faces before Executing.&quot;\nend\nnotification.show<\/code><\/pre>\n<h3>\ud654\uba74 \uc911\uc559\uc5d0 \ud45c\uc2dc<\/h3>\n<pre><code class=\"language-rb\">UI.beep\nUI.messagebox &quot;Select faces before Executing.&quot;<\/code><\/pre>\n<h2>Ruby Variable<\/h2>\n<h3>\uc804\uc5ed \ubcc0\uc218<\/h3>\n<p>$ \ub85c \uc2dc\uc791\ud569\ub2c8\ub2e4.<\/p>\n<pre><code class=\"language-rb\">$global_variable = 10<\/code><\/pre>\n<h3>\ud074\ub798\uc2a4 \uc778\uc2a4\ud134\uc2a4 \ubcc0\uc218<\/h3>\n<p>@ \ub85c \uc2dc\uc791\ud569\ub2c8\ub2e4.<\/p>\n<pre><code class=\"language-rb\">class Customer\n   def initialize(id, name, addr)\n      @cust_id = id\n      @cust_name = name\n      @cust_addr = addr\n   end\n   def display_details()\n      puts &quot;Customer id #@cust_id&quot;\n      puts &quot;Customer name #@cust_name&quot;\n      puts &quot;Customer address #@cust_addr&quot;\n   end\nend<\/code><\/pre>\n<h3>\ud074\ub798\uc2a4 \ubcc0\uc218<\/h3>\n<p>@@ \ub85c \uc2dc\uc791\ud569\ub2c8\ub2e4.<br \/>\n\ud074\ub798\uc2a4\uac04 \uacf5\uc720\uac00 \ub429\ub2c8\ub2e4.<\/p>\n<pre><code class=\"language-rb\">class Customer\n   @@no_of_customers = 0\n   def initialize(id, name, addr)\n      @cust_id = id\n      @cust_name = name\n      @cust_addr = addr\n   end\n   def display_details()\n      puts &quot;Customer id #@cust_id&quot;\n      puts &quot;Customer name #@cust_name&quot;\n      puts &quot;Customer address #@cust_addr&quot;\n   end\n   def total_no_of_customers()\n      @@no_of_customers += 1\n      puts &quot;Total number of customers: #@@no_of_customers&quot;\n   end\nend<\/code><\/pre>\n<h3>\uc9c0\uc5ed \ubcc0\uc218<\/h3>\n<p>\uc18c\ubb38\uc790 \ub610\ub294 \ubc11\uc904\ubb38\uc790\ub85c \uc2dc\uc791\ud569\ub2c8\ub2e4.<\/p>\n<h3>\uc0c1\uc218<\/h3>\n<p>\uc54c\ud30c\ubcb3 \ub300\ubb38\uc790\ub85c \uc2dc\uc791\ud569\ub2c8\ub2e4.<\/p>\n<pre><code class=\"language-rb\">```\n\n```rb<\/code><\/pre>\n<pre><code class=\"language-rb\"><\/code><\/pre>\n<pre><code class=\"language-rb\"><\/code><\/pre>\n<pre><code class=\"language-rb\"><\/code><\/pre>\n<pre><code class=\"language-rb\"><\/code><\/pre>\n<pre><code class=\"language-rb\"><\/code><\/pre>\n<pre><code class=\"language-rb\"><\/code><\/pre>\n<pre><code class=\"language-rb\"><\/code><\/pre>\n<pre><code class=\"language-rb\"><\/code><\/pre>\n<pre><code class=\"language-rb\"><\/code><\/pre>\n<pre><code class=\"language-rb\"><\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>SketchUp Plugin \uac1c\ubc1c\ud558\uae30 01 Dev Tool \uc0dd\uc131 \uac1c\ubc1c\uc744 \uc704\ud55c \uba54\ub274\ub97c \uc0dd\uc131\ud569\ub2c8\ub2e4. C:\\Users\\\uacc4\uc815\uc774\ub984\\AppData\\Roaming\\SketchUp\\SketchUp \ubc84\uc804\\SketchUp\\Plugins\\ \ud3f4\ub354\uc5d0 \uc544\ub798 \ud30c\uc77c\uc744 \uc0dd\uc131\ud558\uace0, SketchUp \uc744 \uc7ac\uc2e4\ud589\ud569\ub2c8\ub2e4. my_devtool.rb require &quot;sketchup.rb&quot; require &quot;extensions.rb&quot; my_devtool_loader = SketchupExtension.new &quot;My Devtool Loader&quot;, &quot;my_devtool\/main.rb&quot; my_devtool_loader.copyright= &quot;Copyright 2023 skyer9&quot; my_devtool_loader.creator= &quot;skyer9&quot; my_devtool_loader.version = &quot;1.0&quot; my_devtool_loader.description = &quot;My Devtool&quot; Sketchup.register_extension my_devtool_loader, true my_devtool\/main.rb require &quot;sketchup.rb&quot; module My_devtool PLUGIN_ROOT ||=\u2026 <span class=\"read-more\"><a href=\"https:\/\/www.skyer9.pe.kr\/wordpress\/?p=7741\">Read More &raquo;<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[44],"tags":[],"class_list":["post-7741","post","type-post","status-publish","format-standard","hentry","category-sketchup"],"_links":{"self":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/7741","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=7741"}],"version-history":[{"count":13,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/7741\/revisions"}],"predecessor-version":[{"id":7755,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/7741\/revisions\/7755"}],"wp:attachment":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=7741"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=7741"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=7741"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}