精华内容
下载资源
问答
  • sketchup(草图大师)的ruby接口,提供su的对象、方法、属性。相当齐全
  • Sketchup ruby editor

    2014-07-21 21:45:03
    非常好用的Sketchup ruby editor
  • 2.下载安装ruby 3.启动vscode安装ruby扩展 4.在cmd下使用下面两个命令安装ruby依赖   gem install ruby-debug-ide gem install debase   5.测试本地ruby代码 启动vscode--->File(文件)---&gt...

    1.下载安装vscode

    2.下载安装ruby

    3.启动vscode安装ruby扩展

    4.在cmd下使用下面两个命令安装ruby依赖

     

    gem install ruby-debug-ide

    gem install debase

     

    5.测试本地ruby代码

    启动vscode--->File(文件)--->Add Folder to Workspace(添加文件夹到工作空间)--->新建文件夹(如:Test)

    选中Test工作空间新建一个main.rb文件,写代码

    按住ctrl+shift+D快捷键添加Test工作空间的配置

    选中Ruby调试环境

    ctrl+shift+D 选中Debug Local File(Test)------>F5快捷键开始调试---->成功

      6.测试ruby for sketchup ,官方调试文档

     选中Tasks(任务)->Configuration Tasks(配置任务)->

    在tasks.json文件配置如下():

    {
        // See https://go.microsoft.com/fwlink/?LinkId=733558
        // for the documentation about the tasks.json format
        "version": "2.0.0",
        "tasks": [
            {
                "label": "Debug SketchUp 2017",
                "type": "shell",
                "command": "open -a '/Applications/SketchUp 2017/SketchUp.app' --args -rdebug 'ide port=9527'",
                "windows": {
                    "command": "&'C:/Program Files/SketchUp/SketchUp 2017/SketchUp.exe' -rdebug 'ide port=9527'"
                }
            }
        ]
    }

    修改Test工作空间下launch.json配置文件的端口号也为9527(其实两个文件的端口号要一致且没被其他占用都可以)

    {
                "name": "Listen for rdebug-ide",
                "type": "Ruby",
                "request": "attach",
                "cwd": "${workspaceRoot}",
                "remoteHost": "127.0.0.1",
                "remotePort": "9527",
                "remoteWorkspaceRoot": "${workspaceRoot}"
            },

    然后Tasks--->Run Tasks --->选中Debug Sketchup 2017 启动了Sketchup

    ctrl+shift+D 打开调试选中 listen for rdebug-ide(Test)-----> F5开始调试运行

    在SU 控制台加载main.rb文件或把main.rb放入Plugins中,添加断点开始调试即可

    展开全文
  • SketchUp中的每个几何对象都代表着一个Entitiy类或者它的子类,包括点,线,面,图片,文字,组件和群组。在设计中管理和修改Entity对象,我们需要接入主要设计的Entities容器,主要是对Entity对象进行增加、移动、...

    微信公众号:老顽童与小东邪
    关注可了解更多的教程及编程技巧。问题或建议,请加好友留言;
    如果你觉得对你有帮助,欢迎赞赏

    Entities对象及Entity类

    Entities对象

    SketchUp中的每个几何对象都代表着一个Entitiy类或者它的子类,包括点,线,面,图片,文字,组件和群组。在设计中管理和修改Entity对象,我们需要接入主要设计的Entities容器,主要是对Entity对象进行增加、移动、选择、缩放及删除操作。
    其操作实例如下:

    model = Sketchup.active_model
    entities = model.acive_entities
    # 添加点
    pt1 = Geom::Point3d.new(100,200,300)
    point= entities.add_cpoint pt1
    # 添加线
    line = entities.add_line [100,0,0],[200,0,0]
    # 删除线
    entities.erase_entities line
    

    还有很多的方法,在后期编程中我们都能用到。

    Entity类

    Entity类是在SketchUp中所有可绘制图形的超类。下面显示了Entity的所有子类:

    Entity是一个顶级类,它下面的每一个子类都继承了它的方法。其中很多方法提供了Entity的基本信息,如下:

    entityID - 返回Entity的唯一标识符

    typename - Entity的几何类型 (线, 面等)

    valid?/deleted? - Entity是否还可以访问

    model - 返回设计的Model对象

    这里我们来看一下如何调用这些方法:

    1、首先在entities容器中添加一条线
    添加边线
    2、获取Entity的唯一标识符
    线ID
    3、获取Entity的几何类型(点、线、面等)
    几何类型
    在entity类中还有很多方法,需要我们去熟悉,去运用到我们的开发中。

    实现方盒子功能

    思路:要想实现一个方盒子,首先需要一个面,然后将个面推拉起来。由于面是由点跟线构成的,所以我们需要一组点。具体实现如下:
    1、获取当前活动模型的句柄

    model = Sketchup.active_model
    

    2、获取当前模型实体句柄

    entities = model.active_entities
    

    3、在模型中添加face

    # 添加face的点组
    points = [
        Geom::Point3d.new(0,   0,   0),
        Geom::Point3d.new(1.m, 0,   0),
        Geom::Point3d.new(1.m, 1.m, 0),
        Geom::Point3d.new(0,   1.m, 0)
    ]
    # 利用add_face方法把点组构成face
    face = entities.add_face(points)
    

    4、把创建好的face推拉为box

    # 利用pushpull方法完成推拉操作
    face.pushpull(-1.m)
    

    到这里我们就完成了一个box的创建。完整代码:

    model = Sketchup.active_model
    entities = model.active_entities
    # 添加face的点组
    points = [
        Geom::Point3d.new(0,   0,   0),
        Geom::Point3d.new(1.m, 0,   0),
        Geom::Point3d.new(1.m, 1.m, 0),
        Geom::Point3d.new(0,   1.m, 0)
    ]
    # 利用add_face方法把点组构成face
    face = entities.add_face(points)
    # 利用pushpull方法完成推拉操作
    face.pushpull(-1.m)
    

    公众号

    下面的是我的公众号二维码图片,欢迎关注。
    ruby sketchup
    如果你觉得对你有帮助,欢迎赞赏,有你的支持,小东邪动力十足!

    下期预告

    讲解API中部分类方法

    引用
    参考|一米网校
    微信公众号:老顽童与小东邪
    欢迎关注我,一起学习,一起进步!

    展开全文
  • SketchUp Ruby二次开发

    2020-06-15 16:57:10
    微信公众号:老顽童与小东邪关注可了解更多的教程及编程技巧。问题或建议,请添加好友留言; Sketchup Ruby 基础-安装 ...在下载ruby时,为了更好的兼容sketchup版本建议下载ruby2.4及以上的版本。ruby下...

    微信公众号:老顽童与小东邪
    关注可了解更多的教程及编程技巧。问题或建议,请添加好友留言;

    Sketchup Ruby 基础-安装

    安装环境Ruby下载Ruby安装调试写在最后图片显示

    安装环境

    本次教程仅针对windows10系统。

    Ruby下载

    对于ruby下载时一定需要注意,必须下载rubyinstaller with devkit版本。因为后期在对sketchup使用代码编辑器进行环境配置时有要求。
    在下载ruby时,为了更好的兼容sketchup版本建议下载ruby2.4及以上的版本。
    ruby下载地址:https://rubyinstaller.org/downloads/

    图注:ruby下载
    图注:ruby下载

    Ruby安装调试

    1.双击下载好的rubyinstall-devkit.exe进行安装,根据安装提示完成以下操作。

    图注:ruby安装
    图注:ruby安装

    2.找到Terminal程序。它的名字是Command Prompt,或者你可以直接运行cmd。
    3.在Terminal程序中运行ruby -v 查看ruby是否安装成功。如果安装成功会显示ruby的版本号。如下图:
    图注:ruby调试
    图注:ruby调试

    写在最后

    本次操作非常简单,但是这很重要。因为它代表着我们已经开始,希望我们都能坚持下去!
    注:下次分享官方的demo,需要资料的可以在公众号回复获取。

    图片显示

    下面的是我的公众号二维码图片,欢迎关注。

    图注:小东邪公众号
    图注:小东邪公众号
    展开全文
  • sketchup 二次开发的api类查询资料,可以快速检索sketchup 各个对象的类方法和属性,并且提供了示例代码,是进行sketchup二次开发的非常实用的...来源https://alexschreyer.net/sketchup/sketchup-ruby-api-cheatsheet/
  • SketchUp作为设计学院三剑客之一,在国内外广受欢迎,其拥有成熟的插件生态环境(插件商店,类似苹果AppStore)。 本课程涵盖完整的SketchUp插件开发实战内容,以及必要的三维建模理论知识。 Ruby语言的应用不仅仅是...
  • 59295112 ruby2 0 sketchup

    2020-12-26 06:29:07
    <div><p>该提问来源于开源项目:NREL/OpenStudio</p></div>
  • sketchup是非常简单易用的三维建模软件,可以利用ruby 做二次开发, api文档 http://www.rbc321.cn/api 今天在su中做了一款小游戏 贪吃蛇,说一下步骤 展示 主要思路: 我制作的的玩法是这样...

    sketchup是非常简单易用的三维建模软件,可以利用ruby 做二次开发,

    api文档 http://www.rbc321.cn/api

    今天在su中做了一款小游戏 贪吃蛇,说一下步骤

    展示

     

     

    主要思路:

     

    我制作的的玩法是这样的


     

    关于入口文件


     

    # ----------------------------- #
    #  email:bc8web@126.com        #
    #  uri: http://www.rbc321.cn    #
    # ------------------------------#
    # 入口文件
    require 'json' 
    require_relative 'help.rb'  # 帮助文件
    module NaiveSnake
        $game = nil  # 用于保存蛇类实例变量
        class Index
            @@dig = nil
            @@setDig = nil
            @@lydig = nil
            def initialize
                cmd = UI::Command.new("NaiveSnake") {
                    # 主窗口
                    @@dig = UI::WebDialog.new "NaiveSnake", false, "", 229, 172, 5, 90, false 
                    @@dig.set_file __dir__+'/index.html'
                    # 设置窗口
                    @@setDig = UI::WebDialog.new "NaiveSnake_set", false, "", 262, 315, 235, 90, false 
                    @@setDig.set_file __dir__+'/set.html'
                    # 排行窗口
                    @@lydig = UI::WebDialog.new "NaiveSnake_琅琊榜", false, "", 290, 320, 5, 260, false
                    @@lydig.set_url 'http://00a00.com/snake/'
                    
                    @@dig.show if not @@dig.visible?
                    @@dig.add_action_callback 'start' do
                        # 检测是否有模型
                        if Sketchup.active_model.active_entities.length > 0
                            is = UI.messagebox("检测到有模型存在,是否清空?\r\n(注:清空才可进入游戏)",MB_YESNO)
                            if is == 6
                                Sketchup.active_model.active_entities.clear!
                                load __dir__+'/Base.rb'
                                
                                require_relative 'Camera.rb'         
                                require_relative 'Map.rb'            
                                load __dir__+'/Food.rb'             
                                load __dir__+'/Snake.rb'             
                                load __dir__+'/SnakeTool.rb'      
    
                                Camera.new        # 初始化相机  
                                Map.new.show      # 显示场景
                                Food.new.show     # 显示食物
                                $game = Snake.new # 蛇实例
                                $game.start       # 开始游戏
    
                                Sketchup.active_model.select_tool SnakeTool.new # 选择工具
                                @@dig.close if @@dig.visible? # 关闭窗口
                                @@setDig.close if @@dig.visible? # 关闭窗口
                                @@lydig.close if @@dig.visible? # 关闭窗口
                            else
                                next
                            end
                        end
                    end
                    # ready
                    @@dig.add_action_callback 'ready' do
                        # 生成随机名字
                        len = 8
                        chars = ("a".."z").to_a + ("A".."Z").to_a + ("0".."9").to_a
                        newpass = ""
                        1.upto(len) { |i| newpass << chars[rand(chars.size-1)] }
                        config 'nickname', newpass
                    end
    
                    # 设置按钮
                    @@dig.add_action_callback 'set' do
                        @@setDig.show
                    end
    
                    # 琅琊榜
                    @@dig.add_action_callback 'langYa' do
                        @@lydig.show
                    end
                    
                    # 确认按钮
                    @@setDig.add_action_callback('ok'){|dig, json|
                        hash = JSON.parse json
                        hash.each{|k, v| config k, v }
                        dig.close
                    }
                    # 默认按钮
                    @@setDig.add_action_callback('rec'){|dig, json|
                        json = configRec()
                        @@setDig.execute_script "fill(#{json})"
                    }
                    # 页面刷新
                    @@setDig.add_action_callback('init'){|dig, json|
                        json = configAll()
                        @@setDig.execute_script "data = #{json}"
                    }
    
                    
                }
                # 工具栏
                cmd.small_icon = cmd.large_icon = __dir__+"/assets/icon.png"
                cmd.menu_text = "NaiveSnake"
    
                toolbar = UI::Toolbar.new "NaiveSnake"
                toolbar = toolbar.add_item cmd
                toolbar.show
    
                # 菜单
                menu = UI.menu('Plugins').add_submenu('NaiveSnake(贪吃蛇)')
                menu.add_item
            end
        end
    end
    NaiveSnake::Index.new

    初始化基类

    # ----------------------------- #
    #  email:bc8web@126.com        #
    #  uri: http://www.rbc321.cn    #
    # ------------------------------#
    # 基类
    module NaiveSnake
        class Base
            @@model = Sketchup.active_model   # 模型
            @@view  = @@model.active_view     #
            @@ent   = @@model.active_entities # 实体
            @@mat   = @@model.materials       # 材质
            
            @@mapWidth     = config('mapWidth').to_i    # 地图宽
            @@mapHeight    = config('mapHeight').to_i   # 地图高
            @@snakeHeight  = config('snakeHeight').to_i # 蛇高度
            @@snakeWidth   = config('snakeWidth').to_i     # 蛇宽度
            @@snakeNums    = config('snakeNums').to_i      # 蛇身数
            @@level        = config('级别')             # 级别
            @@direction    = UP     # 初始方向
            @@currentSnake = []     # 当前蛇body
            @@snakeArr     = []     # 出生蛇body
            @@foot         = []     # 储存食物
            @@blackList    = []     # 食物黑名单
            @@time_id      = nil    # 定时器
            @@score        = 0      # 分数
        end
    end

     

    初始化相机

    # ----------------------------- #
    #  email:bc8web@126.com        #
    #  uri: http://www.rbc321.cn    #
    # ------------------------------#
    # 相机类
    module NaiveSnake
    	class Camera < Base
    		def initialize
    			start
    		end
    		def start
    			eye = [0, 0,1300]; target = [0,0,0]; up = [0,1,0]
    			start_camera = Sketchup::Camera.new eye, target, up
    			@@view.camera = start_camera
    		end
    	end
    end
    

     初始化场景

    # ----------------------------- #
    #  email:bc8web@126.com        #
    #  uri: http://www.rbc321.cn    #
    # ------------------------------#
    # 场景类
    module NaiveSnake
        class Map < Base
            def show
                grassland # 草地
            end
            def grassland
                filename = __dir__+'/assets/grassland.skm'
                material = @@mat.load(filename)
    
                pt1 = Geom::Point3d.new -@@mapWidth/2, -@@mapHeight/2, 0
                pt2 = Geom::Point3d.new @@mapWidth/2, -@@mapHeight/2, 0
                pt3 = Geom::Point3d.new @@mapWidth/2, @@mapHeight/2, 0
                pt4 = Geom::Point3d.new -@@mapWidth/2, @@mapHeight/2, 0
                grp = @@ent.add_group
                grp.entities.add_face pt1, pt2, pt3, pt4
                grp.material = material
            end
        end
    end

     

    初始化蛇类

    # ----------------------------- #
    #  email:bc8web@126.com        #
    #  uri: http://www.rbc321.cn    #
    # ------------------------------#
    # 蛇类
    module NaiveSnake
    	class Snake < Base
    		def initialize
    			@@snakeArr = initSnake @@snakeNums
    			@up = 38; @down = 40; @left = 37; @right = 39
    			@direction = @@direction
    			@x = rand(-@@mapWidth..@@mapWidth)/2/10*10
    			@y = rand(-@@mapHeight..@@mapHeight)/2/10*10
    		end
    		def start
    			createSnake # 绘制蛇
    			speed = 0.5
    			case @@level
    				when '普通'; speed = 0.4
    				when '勇士'; speed = 0.1
    				when '地狱'; speed = 0.03
    				when '噩梦'; speed = 0.006
    			end
    			time = 1
    			@@time_id = UI.start_timer(speed, true) do
    				move(@direction)
    				time += 1
    			end
    		end
    		def set(direction)
    			@direction = direction
    		end
    		# 绘制蛇
    		def createSnake
    			@@currentSnake.clear # 清空蛇当前状态
    			@@snakeArr.each do |box|
    				xBaseValue = @@snakeWidth/2
    				yBaseValue = @@snakeWidth/2
    				point1 = Geom::Point3d.new(box[0]-xBaseValue, box[1]-yBaseValue, 0)
    				point2 = Geom::Point3d.new(box[0]+xBaseValue, box[1]-yBaseValue, 0)
    				point3 = Geom::Point3d.new(box[0]+xBaseValue, box[1]+yBaseValue, 0)
    				point4 = Geom::Point3d.new(box[0]-xBaseValue, box[1]+yBaseValue, 0)
    				boxGroup = @@ent.add_group
    				face = boxGroup.entities.add_face point1, point2, point3, point4
    				face.reverse!.pushpull @@snakeHeight
    				@@currentSnake.push boxGroup # 重新设置蛇身体
    			end
    		end
    		# 移动
    		def move(direction)
    			tmpArray = [] # 临时容器
    			head = @@snakeArr.last # 蛇头
    			# 判断蛇头是否碰到黑名单
    			@@blackList.each{|list|
    				if head == list # Game Over
    					gameOver
    					return 
    				end
    			}
    			#判断蛇头是否碰到边缘
    			if head[0].abs >= @@mapWidth/2 || head[1].abs >= @@mapHeight/2
    				gameOver
    				return 
    			end
    			# 判断蛇头是否碰到食物
    			if head == @@foot
    				# 加分
    				@@score += 10
    				# 将食物列入黑名单
    				@@blackList.push @@foot
    				# 蛇头随机移动
    				@x = rand(-(@@mapWidth-50)..@@mapWidth-50)/2/10*10
    				@y = rand(-@@mapHeight..@@mapHeight)/2/10*10
    				@@snakeArr.push [@x+@@snakeWidth/2, @y+@@snakeHeight/2]
    				# 再次显示食物
    				Food.new.show
    			end
    			# 移动数组前一位
    			lastValue = @@snakeArr.last.clone; 
    			for i in 0...@@snakeArr.size-1
    				tmpArray[i] = @@snakeArr[i+1]
    			end
    			tmpArray.push(lastValue) 
    			case direction
    				when @up;    tmpArray.last[1] += @@snakeWidth
    				when @down;  tmpArray.last[1] -= @@snakeWidth
    				when @right; tmpArray.last[0] += @@snakeWidth
    				when @left;  tmpArray.last[0] -= @@snakeWidth
    			end
    			@@snakeArr = tmpArray # 重新设置蛇body
    
    			deleteSnake # 删除
    			createSnake # 再次绘制
    		end
    
    		def deleteSnake
    			@@currentSnake.each do |ent|
    				ent.entities.each{|ent| @@ent.erase_entities ent}
    			end # 删除原来
    		end
    		def gameOver
    			UI.stop_timer @@time_id
    			UI.messagebox "游戏结束!\r\n得分:"+@@score.to_s
    			updateScore # 更新分数
    		end
    		def updateScore
    			hash = {
    				:nickname => config('nickname'),
    				:score    => @@score,
    				:level    => config('级别'),
    				:tk       => 'qwertyuioplkjhgfdsazxcvbnm',		
    			}
    			request = Sketchup::Http::Request.new("http://00a00.com/snake/save.php", Sketchup::Http::POST)
    			request.body= httpBuild(hash)
    			request.start do |request, response|
    				p '琅琊榜更新成功' if response
    			end
    		end
    		def httpBuild(hash)
    			str = ''
    			hash.each{|k, v|
    				str+= k.to_s+'='+v.to_s+'&'
    			}
    			str.chop!
    		end
    		def initSnake(n)
    			array = []
    			n.times{|i|
    				array.push [@@snakeWidth/2+@@snakeWidth*i, @@snakeWidth/2]
    				next if i == 0
    			}
    			array
    		end
    	end
    end
    

     

    初始化食物类

    # ----------------------------- #
    #  email:bc8web@126.com        #
    #  uri: http://www.rbc321.cn    #
    # ------------------------------#
    # 食物类
    module NaiveSnake
        class Food < Base
            def initialize
                @x = rand(-@@mapWidth..@@mapWidth)/2/10*10
                @y = rand(-@@mapHeight..@@mapHeight)/2/10*10
            end
            def show
                filename = __dir__+'/assets/food.skm'
                material = @@mat.load(filename)
    
                point = []
                unless isFull?
                    point[0] = [@x, @y, 0]
                    point[1] = [@x+@@snakeWidth, @y, 0]
                    point[2] = [@x+@@snakeWidth, @y+@@snakeWidth, 0]
                    point[3] = [@x, @y+@@snakeWidth, 0]
    
                    group = @@ent.add_group
    
                    @@foot = [@x+@@snakeWidth/2, @y+@@snakeHeight/2]
                    face = group.entities.add_face point
                    face.material = material
                    face.reverse!.pushpull @@snakeHeight
                    @foot = face
                else
                    @x = rand(-@@mapWidth..@@mapWidth)
                    @y = rand(-@@mapHeight..@@mapHeight)
                end
            end
            def isFull?
                return @@snakeArr.include? [@x, @y] 
            end
        end
    end

     下载地址:

     http://www.rbc321.cn/home/plugin/plugindetail/id/247

    转载于:https://www.cnblogs.com/bc8web/p/7783287.html

    展开全文
  • SketchUp + Ruby 二次开发初识

    千次阅读 2018-02-24 13:57:28
    一、SketchUp + Ruby 是什么?能够干什么? 1、SketchUp 是当前主流 3D 建模软件,中文名草图大师,简而言之,就是帮助我们快速3D建模的软件。 2、SketchUp 提供了 Ruby语言的API接口,您可以在SketchUp控制台中,...
  • Ruby 控制台,输入一下代码: "#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}" 2.5.5-p157
  • 3D建模理论与实战 - 使用Ruby进行SketchUp(草图大师)插件开发 ...
  • 我们学习了群组、组件及组件定义,今天来看看图层【Layer】,在Sketchup2020版本中已经更名为“标记”,如图那么图层在我们建模过程中能带来哪些便利呢?可以快速的隐藏同一图层内所有东西,而不需要逐一选择并右键...
  • 我们学习了群组、组件,今天来看看与...ComponentDefinition类用于定义SketchUp组件的内容。组件是实体的集合,可以在整个模型中对其进行实例化和重用。当我们在改变原始的组件定义时,其它重用的实例也会跟着改变。...
  • 我的第一个Ruby程序 做一个method,用于产生xyz三轴插件 ” def sep(length=0,p='xy') # length为距离,在这里学会了变量的命名 # p为平面 entities = Sketchup.active_model.entities # 获取当前模型实体句柄 ...
  • sketchup(草图大师)的ruby接口,提供su的对象、方法、属性。 是本人从su帮助的网上链接下载整理成chm的。
  • SketchUp Ruby扩展,添加了STL(STereoLithography)文件格式的导入和导出。 3D打印很棒,并且STL格式已经成为共享可打印3D模型的标准方法。 为了支持该社区,SketchUp收集了几个Ruby插件,并将它们打包到一个...
  • RubyCcode Editor是一个所见即所得的代码编写工具,在JIM基础上编写的可视化Ruby执行和编写对话框插件,增加了很多在线的资源以及常用的插件语言的编辑和即时插入执行的功能,美国特纳公司也采用本编程检测工具。...
  • STLslicer 初衷 首先。。。 絮叨 课题的原因,需要一个演示... entities = Sketchup.active_model.entities if p == 'xy' sp = entities.add_section_plane([0, 0, length], [1.0, 0, 0]) elsif p == 'yz' sp = e
  • 2013年4月SketchUp被Trimble收购,Trimble完善Ruby API,同年完成测试并发售。 发售后Google 保留Sketchup 8及以前版本的版权。兼容性为新的版本可以打开旧的文件,但旧的版本不能打开新的文件。 插件 什么是插件?...
  • 这是本学习SketchUp Ruby的好书,应该也是目前市面上唯一专门讲解SketchUp Ruby的专业书籍。原作者为了更多的Ruby爱好者加入进来,慷慨的分享了全书的PDF电子版。(www.autosketchup.com 官方主页提供下载。没有FQ的...

空空如也

空空如也

1 2 3 4 5 6
收藏数 118
精华内容 47
关键字:

rubysketchup