SketchUp扩展程序(插件),用于程序员设计家具

在计算新厨房的成本时,价格太高了,我决定自己动手制作,因为它的价格只有一半。 为了进行培训,我决定为自己创建一个台式机。 足够快地理解:要做好一件事情,您需要制作3D模型。 这将使我们在设计阶段就能看到家具的外观,并思考组装的未来方式。 由于我没有进行3D建模,因此我开始寻找一个更简单的程序。 而SketchUp发现的最简单的东西。 创建模型时,由于尺寸不断变化,我不得不不断地编辑模型。 在第三次更改之后,出现了这个想法-创建一个参数化模型,以便以合适的大小生成它本身。 SketchUp支持Ruby脚本,而本文则与我的工作有关。


解决方案非常简单-我正在创建一些API,使您可以使用必要的参数创建刨花板的3D对象。 从这些对象编译完成的模型,并将图纸尺寸上载到单独的文件中,以传输到切割中心。 作为操作的结果,我添加了为图纸指定边的功能。 该插件用于设计刨花板的十几种不同产品。 对于每个新项目,对插件进行了完善和修改,提高了可用性,并改善了API。 例如,最后一个项目是一个基座表。 在图片中,模型+成品(吸引注意力的鸟和狗:))


main.jpg


红色是2毫米边缘,紫色是0.4毫米边缘。 由于墙壁附近有一个加热电池,所以下层搁架没有尽头。 工作台面位于墙壁后面4厘米处,因此加热电池产生的热量会升高并加热墙壁( 通常,自己动手制作家具非常方便-您可以按自己的喜好定制 )。


这是生成它的代码
#   $weght = 16.0 #       $zazor = 5.0 #      $dWidth = 26.0 # $width = 770 $offsetStena = 40 $dStoledhnica = 20 $height = 2500 - 150 - 900 $depthLeft = 600 $depthRight = $depthLeft - 175 $jshikHeight = 200 $heightPlanka = 300 $heightJshik = 190 $heightJshikOffset = 10 #    def object3D_main() #   Shasoft::Object3D::loadLibrary() #    Shasoft::Object3D::LDSP::setWeght($weght) #   stenaLeft = Shasoft::Object3D::LDSP::create($height-$weght,$depthLeft,"2 0 0 1").name(" ").rotateY(-90) stenaRight = Shasoft::Object3D::LDSP::create($height-$weght,$depthLeft,"2 0 0 1").name(" ").rotateY(-90).moveX($width-$weght) stoleshnica = Shasoft::Object3D::LDSP::create($width,$depthLeft+$dStoledhnica-$offsetStena,"2 2 1 2").name("").move(-$weght,-$dStoledhnica,$height-$weght) polka1 = Shasoft::Object3D::LDSP::create($width-$weght*2,$depthRight,"2 0 0 0").name(" 1").moveZ(400) polka2 = Shasoft::Object3D::LDSP::create($width-$weght*2,$depthRight-$weght,"2 0 0 0").name(" 2").moveZ(600) polka3 = Shasoft::Object3D::LDSP::create($width-$weght*2,$depthLeft-$offsetStena,"2 0 0 0").name(" 3").moveZ(800+$heightJshik+$heightJshikOffset+10-$weght-5) pereborka1 = Shasoft::Object3D::LDSP::create($width-$weght*2,$heightPlanka).name("").rotateX(90).moveY($depthRight).moveZ(400+$weght) #   jshik1box = Shasoft::Object3D::LDSP::create_box($width-$weght*2-$dWidth,$depthLeft-$zazor-$offsetStena,$heightJshik," ",1).moveX($dWidth/2).moveZ($height-$heightJshik-$heightJshikOffset-$weght) jshik1Fasad = Shasoft::Object3D::LDSP::create($width,200,"2 2 2 2").rotateX(90).moveX(-$weght).moveZ($height-$heightJshik-$heightJshikOffset-$weght-5).name("  1") jshik1 = Shasoft::Object3D::create(jshik1box,jshik1Fasad) #   jshik2box = Shasoft::Object3D::LDSP::create_box($width-$weght*2-$dWidth,$depthLeft-$zazor-$offsetStena,$heightJshik-$weght-5," ",1).moveX($dWidth/2).moveZ($height-$heightJshik-$heightJshikOffset-$weght) jshik2Fasad = Shasoft::Object3D::LDSP::create($width,200,"2 2 2 2").rotateX(90).moveX(-$weght).moveZ($height-$heightJshik-$heightJshikOffset-$weght-5).name("  2") jshik2 = Shasoft::Object3D::create(jshik2box,jshik2Fasad).moveZ(-$height+800+$heightJshik+$heightJshikOffset+$weght+10) #  widthDver = $width/2-5 dver1 = Shasoft::Object3D::LDSP::create(widthDver,800-5-10,"2 2 2 2").rotateX(90).moveZ(5).moveX(-$weght).name(" 1") dver2 = dver1.copy.moveX($width-widthDver).name(" 2") # for i in 0..5 Shasoft::Object3D::LDSP::create(467,247,"0 2 0 0").name("  ").moveX(-600).moveZ(i*50) end for i in 0..2 Shasoft::Object3D::LDSP::create(467,640,"0 2 0 0").name("   2").moveX(-600-600).moveZ(i*50) end # Shasoft::Object3D::LDSP::write_csv( File.dirname(__FILE__)+"/main.csv" ) #Shasoft::Object3D::LDSP::write_csv_cut( File.dirname(__FILE__)+"/cut.csv" ) #Shasoft::Object3D::show() end 

安装方式


下载Object3D.rbz文件
启动SketchUp
打开扩展管理器(窗口/扩展管理器)
单击“安装扩展”按钮,然后选择下载的Object3D.rbz文件
之后,该插件将请求一个目录,该目录将存储项目。 即 将显示“使用项目指定目录”窗口,您需要指定用于存储项目的文件夹。


结果,我们有了扩展


2019-01-25-10_02_19.png


使用方法


转到我们指定用于存储项目的文件夹。 可以在插件菜单中更改此文件夹


2019-01-25-10_06_10.png


在文件夹中用我们的项目名称创建一个目录。 就我而言,这就是“大厅里的储物柜”。 然后我们进入创建的目录并创建main.rb文件,在其中创建入口点函数


 #    def object3D_main() ... #     end 

我们重新启动SketchUp,在插件菜单中,您将看到一个带有您创建的文件夹名称的项目。 现在选择此项目,将发生以下情况:


  • 清洁Ruby控制台
  • 删除当前项目中的所有项目
  • 从指定目录加载main.rb文件
  • 函数调用object3D_main

在object3D_main函数中,您需要生成模型的生成。 您可以将我上面提供的代码复制到main.rb文件中,然后将生成我的储物柜。


API


文件“ core.rb”


每个函数返回一个Shasoft :: Object3D :: Object3D对象,该对象包含用于移动和旋转对象的方法


  • 函数名称 ()-设置对象的名称。 不要忽视他们。 组装时可以有很多帮助:)


  • 对象moveXmoveYmoveZ的功能允许您沿相应的轴移动对象。


  • 移动 (x,y,z)功能允许您一次沿三个轴移动对象


  • 对象函数rotateXrotateYrotateZ允许您围绕相应的轴旋转对象。


  • 别名函数moveRedmoveGreenmoveBluerotateRedrotationGreenrotationBlue ,其中X轴(红色),Y轴(绿色),Z轴(蓝色)在SketchUp中由它们的颜色命名。 也许有人会更舒服。
    每个函数都返回一个指向对象本身的指针。 这使您可以建立呼叫链。


     #    90    X     Y  100  obj.rotateX(90).moveY(100) 

  • 设置 (字典,键,值)对象功能允许您设置属性值。 dict-字典名称,键-属性名称,值-值


  • get对象的功能(dict,key,value = nil)允许您获取属性值。 dict-字典名称,键-属性名称,值-值


  • copy方法允许您获取对象的副本(尽管它不能非常稳定地运行:))


  • 使用group方法可以获取标准的SketchUp :: Group对象。



定义了一种创建对象的方法。 您可以将Shasoft :: Object3D :: Object3D或SketchUp :: Group对象的列表作为参数传递。 如果参数列表为空,将创建一个新组。


 #       Shasoft::Object3D::create(*args) 

还有一个功能允许您获取对象列表(Skechup :: Group)。 您可以指定词典的名称,只有具有该词典的对象将被返回。 特别是,这就是我将对象与刨花板分开的方式。 创建时,我将安装LDSP词典,然后通过该词典过滤场景中的所有对象。


 #    # dict -   Shasoft::Object3D::get(dict=nil) 

2D_weght文件


 #  3D   # pts -      x,y # weght - () Shasoft::Object3D::create_pushpull(pts,weght) #       # lX -   X # lY -   Y # weght -  Shasoft::Object3D::create_plane(lX,lY,weght) 

文件“ ldsp.rb”


 #    Shasoft::Object3D::LDSP::weght #   Shasoft::Object3D::LDSP::setWeght(weght) 

 #     Shasoft::Object3D::LDSP::material #    Shasoft::Object3D::LDSP::setMaterial(material) #    # width -  ( X) # depth -  ( Y) # kromka -  [X , Y , X , Y ], 0 -  , 1 -  0.4 , 2 -  2  Shasoft::Object3D::LDSP::create(width,depth,kromka="0 0 0 0") 

创建抽屉的辅助功能


 #   # width -  # depth -  # height -  # name -  # is_kromka - 1/0   2   Shasoft::Object3D::LDSP::create_box(width,depth,height,name,is_kromka) 

工作成果
box.png


 #     CSV Shasoft::Object3D::LDSP::write_csv(filepath) 

结果,将使用以下列生成下一个csv文件


  • A-宽度
  • B-深度
  • C零件数
  • D-边缘的格式为D长边,K短边。 正是在这里,他们被记录在我订购零件的办公室中。 也许这是标准。
  • E-生成时设置边缘的格式
  • F-所有零件的名称。 这在构建时很有用。

2019-01-25-10_39_50.png


总结


自己设计和组装家具可以节省大约2倍的钱。 还有机会将您的个人家具压入公寓的任何非标准孔中。 我通常会在确认时从16毫米粗纸板上收集家具(7x50)


1490379431197352996.jpg


如果有演习进行确认


1490379603123527575.jpg


(和少量技能)组装不会花费很多时间。


唯一的缺点是您可以参与其中 。 在桌面之后,我已经组装好:一个厨房,几个笼子(照片中是同一只鸟),架子(墙壁和地板),橱柜和桌子。 通常,他“弄乱”了公寓中所有未使用的地方。


下载扩展链接


链接到插件页面

Source: https://habr.com/ru/post/zh-CN442190/


All Articles