<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>柏松的记事本</title>
    <description>柏松的记事本
</description>
    <link>http://baisong.me/</link>
    <atom:link href="http://baisong.me/feed.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Thu, 22 Apr 2021 12:19:39 +0800</pubDate>
    <lastBuildDate>Thu, 22 Apr 2021 12:19:39 +0800</lastBuildDate>
    <generator>Jekyll v3.9.0</generator>
    
      <item>
        <title>用VS Code搭建Sketchup的Ruby二次开发环境</title>
        <description>&lt;h2 id=&quot;简介&quot;&gt;简介&lt;/h2&gt;

&lt;p&gt;本文主要参考sketchup team在github上的入门教学项目&lt;a href=&quot;https://github.com/SketchUp/sketchup-ruby-api-tutorials/wiki&quot;&gt;“sketchup-ruby-api-tutorials”中的wiki&lt;/a&gt;，再加上网络上的其他文章，以及个人的实践操作，汇总而来。&lt;/p&gt;

&lt;p&gt;相信本文读者对sketchup都有一定了解，所以SU相关的安装，插件等，不再详述。并假设您已将Sketchup 2020 专业版安装完毕。&lt;/p&gt;

&lt;p&gt;对于ruby这种脚本语言来说，最简单直接的开发方式，就是在记事本里写代码，然后粘到SU的ruby控制台里运行看结果，就好像骑自行车去家门口买个菜，不用怎么准备，带上手机就好。但如果是骑行去拉萨，这样恐怕就不行了。本文介绍的这些开发环境配置，尤其是第二、三部分，如代码自动补全、静态检查等等，都是从软件工程的角度，为提高开发效率和质量而准备的，能让你走的更远、更稳。&lt;/p&gt;

&lt;p&gt;除Windows和sketchup外，本开发环境使用的都是免费产品，直接给出官网下载链接，无须任何破解。版本信息如下：&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Win10 x64&lt;/li&gt;
  &lt;li&gt;Sketchup 2020 专业版&lt;/li&gt;
  &lt;li&gt;Ruby 2.5.5&lt;/li&gt;
  &lt;li&gt;微软 Visual Studio Code (VS Code) 1.55&lt;/li&gt;
&lt;/ul&gt;

&lt;!--more--&gt;

&lt;h2 id=&quot;一安装ruby&quot;&gt;一、安装Ruby&lt;/h2&gt;

&lt;h4 id=&quot;11-确定ruby版本&quot;&gt;1.1 确定ruby版本&lt;/h4&gt;
&lt;p&gt;每个sketchup的发行版，都可能有不同的Ruby版本，比如SU 2020的ruby版本是2.5.5，SU 2021的ruby版本是2.7.1。为了保证代码的兼容性，最好安装和sketchup相同版本的ruby。查看ruby版本的方法，是在SU的ruby控制台中，输入&lt;/p&gt;
&lt;div class=&quot;language-ruby highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;puts&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;RUBY_VERSION&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src=&quot;/img/2021/2021-4-20-vscode-sketchup-dev-setup/2021-4-20-vscode-sketchup-dev-setup-10.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;

&lt;h4 id=&quot;12-下载安装&quot;&gt;1.2 下载安装&lt;/h4&gt;

&lt;p&gt;到&lt;a href=&quot;https://www.ruby-lang.org/zh_cn/downloads/&quot;&gt;Ruby官网的下载页面&lt;/a&gt;，因为是win平台，所以选RubyInstaller
&lt;img src=&quot;/img/2021/2021-4-20-vscode-sketchup-dev-setup/2021-4-20-vscode-sketchup-dev-setup-20.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;

&lt;p&gt;在RubyInstaller的页面中点download，因为2.5.5版本比较老了，所以点“Archives”，进入存档页面&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/2021/2021-4-20-vscode-sketchup-dev-setup/2021-4-20-vscode-sketchup-dev-setup-30.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;

&lt;p&gt;在左边第一列“Ruby+Devkit Installers”下，找到2.5.5（x64）版，下载&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/2021/2021-4-20-vscode-sketchup-dev-setup/2021-4-20-vscode-sketchup-dev-setup-40.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;

&lt;p&gt;双击下载到的rubyinstaller-devkit-2.5.5-1-x64.exe，注意在选择安装路径那一步时，把“Use UTF-8 as default external encoding”勾上，这样可以统一字符集，减少中文乱码的可能性。其他按照默认即可。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/2021/2021-4-20-vscode-sketchup-dev-setup/2021-4-20-vscode-sketchup-dev-setup-50.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;

&lt;p&gt;在随后的MSYS2安装中，可以直接回车，不安装这项，我目前还没有发现问题。如果不放心的话，也可以选择1，安装完毕后再次回车退出即可。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/2021/2021-4-20-vscode-sketchup-dev-setup/2021-4-20-vscode-sketchup-dev-setup-60.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;

&lt;p&gt;以上都安装完毕后，点开始菜单，输入“cmd”，进入windows的命令提示符环境，输入&lt;/p&gt;
&lt;div class=&quot;language-bat highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;ruby&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;-v
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;能看到ruby的版本号，就说明ruby安装完毕。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/2021/2021-4-20-vscode-sketchup-dev-setup/2021-4-20-vscode-sketchup-dev-setup-70.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;

&lt;h4 id=&quot;13-修改ruby-gem为国内源&quot;&gt;1.3 修改Ruby Gem为国内源&lt;/h4&gt;
&lt;p&gt;RubyGems 是 Ruby 的一个包管理器，它提供一个分发 Ruby 程序和库的标准格式。你可以理解为ruby程序自己的app store。在Sketchup Ruby插件的开发过程中，有很多工具要靠gem来安装。但由于一些原因，国内访问gem总站rubygems.org很不稳定。&lt;/p&gt;

&lt;p&gt;好在Ruby China社区做了gem库的国内镜像，所以我需要把默认的rubygems.org源修改到国内的gems.ruby-china.com源。&lt;/p&gt;

&lt;p&gt;同样在上步的命令提示符环境下，查看当前的gem源，输入&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;gem sources -l
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src=&quot;/img/2021/2021-4-20-vscode-sketchup-dev-setup/2021-4-20-vscode-sketchup-dev-setup-130.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;

&lt;p&gt;运行以下命令，删除默认源：&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;gem sources --remove https://rubygems.org/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;运行以下命令，增加国内源：&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;gem sources -a https://gems.ruby-china.com/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;再次查看&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;gem sources -l
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src=&quot;/img/2021/2021-4-20-vscode-sketchup-dev-setup/2021-4-20-vscode-sketchup-dev-setup-140.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;

&lt;p&gt;可以看到已经修改为国内源了。&lt;/p&gt;

&lt;p&gt;然后我们用国内源安装&lt;a href=&quot;https://www.bundler.cn/&quot;&gt;bundler工具&lt;/a&gt;，用它来管理ruby包，后面会用到。运行&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;gem install bundler
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;安装完成后，查看bundle版本号，来验证安装是否成功：&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;bundle -v
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src=&quot;/img/2021/2021-4-20-vscode-sketchup-dev-setup/2021-4-20-vscode-sketchup-dev-setup-141.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;二安装vs-code并配置&quot;&gt;二、安装VS Code并配置&lt;/h2&gt;

&lt;p&gt;去微软VS Code官网 &lt;a href=&quot;https://code.visualstudio.com/&quot;&gt;https://code.visualstudio.com/&lt;/a&gt; 下载，我当前下到的版本是1.55.2。然后默认安装即可。与RubyMine这种专门为Ruby开发而生的IDE不同，VS Code是一个通用的IDE，需要安装一些插件后，才能实现对ruby开发的支持：&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;中文语言包。&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;点左边的Extensions选项卡，输入“Chinese”，找到中文语言包，点击“Install”&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/2021/2021-4-20-vscode-sketchup-dev-setup/2021-4-20-vscode-sketchup-dev-setup-80.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;

&lt;p&gt;重启后，界面就变成中文了。&lt;/p&gt;

&lt;p&gt;2.在“扩展”选项卡下搜“ruby”，安装ruby插件。这个插件提供核心的ruby开发和调试功能。
&lt;img src=&quot;/img/2021/2021-4-20-vscode-sketchup-dev-setup/2021-4-20-vscode-sketchup-dev-setup-90.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;

&lt;p&gt;3.在上一项的搜索结果中，找到“Ruby Solargraph”插件并安装。这个插件提供了ruby代码的自动补全功能。
&lt;img src=&quot;/img/2021/2021-4-20-vscode-sketchup-dev-setup/2021-4-20-vscode-sketchup-dev-setup-100.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;

&lt;p&gt;4.再在上面的搜索结果中，找到“ruby-rubocop”插件并安装。这个插件提供了代码的静态检查功能。
&lt;img src=&quot;/img/2021/2021-4-20-vscode-sketchup-dev-setup/2021-4-20-vscode-sketchup-dev-setup-110.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;

&lt;p&gt;重启VScode，目前我们安装的插件如下图：&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/2021/2021-4-20-vscode-sketchup-dev-setup/2021-4-20-vscode-sketchup-dev-setup-120.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;三初始化项目环境&quot;&gt;三、初始化项目环境&lt;/h2&gt;

&lt;h4 id=&quot;31-下载模板项目代码&quot;&gt;3.1 下载模板项目代码&lt;/h4&gt;

&lt;p&gt;Sketchup官方团队在github上有一个VScode下的空白项目模板：&lt;a href=&quot;https://github.com/SketchUp/sketchup-extension-vscode-project&quot;&gt;sketchup-extension-vscode-project&lt;/a&gt;，里面已经为sketchup开发预制好了：&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;代码自动完成配置（.solargraph.yml）&lt;/li&gt;
  &lt;li&gt;Sketchup api调用检查（.rubocop.yml）&lt;/li&gt;
  &lt;li&gt;VScode插件提醒&lt;/li&gt;
  &lt;li&gt;编辑器配置（.editorconfig，比如ruby社区约定用2个空格键代替tab等）&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;先下载项目代码：&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/2021/2021-4-20-vscode-sketchup-dev-setup/2021-4-20-vscode-sketchup-dev-setup-180.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;

&lt;p&gt;解压到D:\workspace\目录下，形成如下目录结构：&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/2021/2021-4-20-vscode-sketchup-dev-setup/2021-4-20-vscode-sketchup-dev-setup-190.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;

&lt;p&gt;打开VScode - 打开文件夹 - 选择“D:\workspace\sketchup-extension-vscode-project-master”&lt;/p&gt;

&lt;p&gt;会提醒你一下推荐的其他插件，建议也装上。&lt;/p&gt;

&lt;p&gt;这时，点开左边的main.rb，就有了点开发的模样了：&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/2021/2021-4-20-vscode-sketchup-dev-setup/2021-4-20-vscode-sketchup-dev-setup-200.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;

&lt;p&gt;但是！因为这个项目是2019年的，所以里面有些配置有些过时，需要更新一下：（说实话我写到这里也有点烦了，真不省心呀，但坚持一下哈，快看到曙光了！）&lt;/p&gt;

&lt;p&gt;需要修改的文件如下图：&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/2021/2021-4-20-vscode-sketchup-dev-setup/2021-4-20-vscode-sketchup-dev-setup-210.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;

&lt;h4 id=&quot;32-修改gemfile文件&quot;&gt;3.2 修改Gemfile文件&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;把第一行的默认源修改为国内源&lt;/li&gt;
  &lt;li&gt;把rubocop的版本号从0.63.1更改为0.93.0。rubocop最新版本已经到了1.9.x了，但新版本和sketchup的规则冲突，所以这里指定一个旧版本&lt;/li&gt;
  &lt;li&gt;把rubocop-sketchup的版本从0.8.0更新为0.18.0，这是截至2021年4月的最新版本。后期自己可以到&lt;a href=&quot;https://github.com/SketchUp/rubocop-sketchup&quot;&gt;rubocop-sketchup的github页&lt;/a&gt;检查是否更新。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;/img/2021/2021-4-20-vscode-sketchup-dev-setup/2021-4-20-vscode-sketchup-dev-setup-220.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;

&lt;p&gt;这是修改后的Gemfile，可以直接覆盖源内容&lt;/p&gt;
&lt;div class=&quot;language-yml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;#source 'https://rubygems.org' &lt;/span&gt;
&lt;span class=&quot;s&quot;&gt;source 'https://gems.ruby-china.com'&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;# 更新为国内源&lt;/span&gt;

&lt;span class=&quot;s&quot;&gt;group :development do&lt;/span&gt;
  &lt;span class=&quot;s&quot;&gt;gem 'minitest'&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;# Helps solargraph with code insight when you write unit tests.&lt;/span&gt;
  &lt;span class=&quot;c1&quot;&gt;# gem 'rubocop', '~&amp;gt; 0.63.1' # Static analysis of Ruby Code.&lt;/span&gt;
  &lt;span class=&quot;s&quot;&gt;gem 'rubocop', '~&amp;gt; 0.93.0'&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;# 最新版本和rubocop-sketchup冲突，指定0.93版本&lt;/span&gt;
  &lt;span class=&quot;c1&quot;&gt;# gem 'rubocop-sketchup', '~&amp;gt; 0.8.0' # Static analysis of SketchUp extensions.&lt;/span&gt;
  &lt;span class=&quot;s&quot;&gt;gem 'rubocop-sketchup', '~&amp;gt; 0.18.0'&lt;/span&gt;  &lt;span class=&quot;c1&quot;&gt;# 更新版本&lt;/span&gt;
  &lt;span class=&quot;s&quot;&gt;gem 'sketchup-api-stubs'&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;# Auto-complete for the SketchUp Rub API.&lt;/span&gt;
  &lt;span class=&quot;s&quot;&gt;gem 'skippy', '~&amp;gt; 0.4.1.a'&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;# Aid with common SketchUp extension tasks.&lt;/span&gt;
  &lt;span class=&quot;s&quot;&gt;gem 'solargraph'&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;# For code-insight and RuboCop integration with VSCode.&lt;/span&gt;
&lt;span class=&quot;s&quot;&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h4 id=&quot;33-修改rubocopyml文件&quot;&gt;3.3 修改.rubocop.yml文件&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;把TargetSketchUpVersion从2014修改为你自己的版本，这里我修改为2020&lt;/li&gt;
  &lt;li&gt;把TargetSketchUpVersion从2.2修改为你自己的版本，这里我改为2.5&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;/img/2021/2021-4-20-vscode-sketchup-dev-setup/2021-4-20-vscode-sketchup-dev-setup-230.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;

&lt;p&gt;另外，多说一句，第12行的“DisabledByDefault: true”是rubocop一般静态检查规则的开关，如果设为false的话，就会把&lt;a href=&quot;https://rubystyle.guide/&quot;&gt;ruby社区的代码规范&lt;/a&gt;都检查一遍，对代码质量有追求的开发者建议打开此检查。但其中有些规则是不适合中文的，比如出现中文注释就会提醒等，我把自己的.rubocop.yml贴上，供参考：&lt;/p&gt;

&lt;div class=&quot;language-yml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;rubocop-sketchup&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;# If you want to use the same codding pattern as SketchUp's projects, enable&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;# the next line. RuboCop will then use the coding pattern from the&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;# rubocop-sketchup project. This coding pattern is a more relaxed version than&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;# the default RuboCop pattern.&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;# inherit_from: https://raw.githubusercontent.com/SketchUp/rubocop-sketchup/master/sketchup-style.yml&lt;/span&gt;

&lt;span class=&quot;na&quot;&gt;AllCops&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;c1&quot;&gt;# This prevents normal RuboCop cops to run. Disable this to get full static&lt;/span&gt;
  &lt;span class=&quot;c1&quot;&gt;# analysis of your Ruby code.&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;DisabledByDefault&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;true&lt;/span&gt;

  &lt;span class=&quot;na&quot;&gt;DisplayCopNames&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;true&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;DisplayStyleGuide&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;true&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;ExtraDetails&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;true&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;Exclude&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;src/*/vendor/**/*&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;# Exclude skippy vendor folder&lt;/span&gt;
  &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;src/ruby/main.rb&lt;/span&gt; 
  &lt;span class=&quot;na&quot;&gt;SketchUp&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;SourcePath&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;src&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;# TargetSketchUpVersion: 2014&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;TargetSketchUpVersion&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;2020&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;Exclude&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;# Exclude common folders.&lt;/span&gt;
    &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;profiling/&lt;/span&gt;
    &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;skippy/&lt;/span&gt;
    &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;tests/&lt;/span&gt;
   &lt;span class=&quot;c1&quot;&gt;#TargetRubyVersion: 2.2 # Should have been 2.0 but RuboCop dropped support.&lt;/span&gt;
   &lt;span class=&quot;na&quot;&gt;TargetRubyVersion&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;2.5&lt;/span&gt; 

&lt;span class=&quot;c1&quot;&gt;# 根据自己项目修改的一些规则&lt;/span&gt;
&lt;span class=&quot;s&quot;&gt;Style/AsciiComments&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;Enabled&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;false&lt;/span&gt;

&lt;span class=&quot;s&quot;&gt;SketchupRequirements/FileStructure&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;Enabled&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;false&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;# If DisabledByDefault is set to true then we need to enable the SketchUp&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;# related departments:&lt;/span&gt;

&lt;span class=&quot;na&quot;&gt;SketchupDeprecations&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;Enabled&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;true&lt;/span&gt;

&lt;span class=&quot;na&quot;&gt;SketchupPerformance&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;Enabled&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;true&lt;/span&gt;

&lt;span class=&quot;na&quot;&gt;SketchupRequirements&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;Enabled&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;true&lt;/span&gt;

&lt;span class=&quot;na&quot;&gt;SketchupSuggestions&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;Enabled&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;true&lt;/span&gt;

&lt;span class=&quot;na&quot;&gt;SketchupBugs&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;Enabled&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;true&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id=&quot;34-修改solargraphyml文件&quot;&gt;3.4 修改.solargraph.yml文件&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;把第2行的SU安装路径改为你自己的&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-yml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;require_paths&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;# - &quot;C:/Program Files/SketchUp/SketchUp 2019/Tools&quot;&lt;/span&gt;
&lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;C:/Program&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;Files/SketchUp/SketchUp&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;2020/Tools&quot;&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;#改为自己的安装路径&lt;/span&gt;
&lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;src&lt;/span&gt;

&lt;span class=&quot;na&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
&lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;sketchup-api-stubs&lt;/span&gt;

&lt;span class=&quot;na&quot;&gt;reporters&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
&lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;rubocop&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src=&quot;/img/2021/2021-4-20-vscode-sketchup-dev-setup/2021-4-20-vscode-sketchup-dev-setup-240.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;

&lt;h4 id=&quot;35-用bundle安装gemfile中的依赖&quot;&gt;3.5 用bundle安装Gemfile中的依赖&lt;/h4&gt;
&lt;p&gt;3.2步骤中修改好的Gemfile文件中，列的都是静态检查，自动补全需要的工具包，现在需要把他们都安装到本机。&lt;/p&gt;

&lt;p&gt;先在windows命令行下换到D盘&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;d:
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;进入到项目根目录，也就是Gemfile文件所在的文件夹&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;cd D:\workspace\sketchup-extension-vscode-project-master
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;然后运行&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;bundle install
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;就开始安装一大批依赖包。完毕后，再打开VS Code，稍等十几秒，代码自动完成，静态检查等功能就出现了！&lt;/p&gt;

&lt;p&gt;比如，我输入“Sketchup::Set”，rubocop就会提示你这是个废弃的class。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/2021/2021-4-20-vscode-sketchup-dev-setup/2021-4-20-vscode-sketchup-dev-setup-250.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;四自动reload开发目录下的插件代码&quot;&gt;四、自动reload开发目录下的插件代码&lt;/h2&gt;

&lt;p&gt;现在你就可以开始全副武装的SU插件开发了，但慢慢又会发现一个问题：每次都要把代码拷贝到SU的plugin目录下，再重启SU才能看到更改结果，太麻烦了！&lt;/p&gt;

&lt;p&gt;解决方法就是参考&lt;a href=&quot;https://github.com/SketchUp/sketchup-ruby-api-tutorials/wiki/Development-Setup&quot;&gt;sketchup-ruby-api-tutorials里的wiki&lt;/a&gt;，步骤如下：&lt;/p&gt;

&lt;h4 id=&quot;41-把工作目录下的代码载入到su的plugin目录下&quot;&gt;4.1 把工作目录下的代码载入到SU的plugin目录下&lt;/h4&gt;

&lt;p&gt;在SU的plugin目录下（我电脑上是C:\Users\baisong\AppData\Roaming\SketchUp\SketchUp 2020\SketchUp\Plugins），新建一个!vscode-project-master.rb文件，当然文件名也可以改成别的，代码如下:&lt;/p&gt;
&lt;div class=&quot;language-ruby highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;paths&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;
  &lt;span class=&quot;s2&quot;&gt;&quot;D:/workspace/sketchup-extension-vscode-project-master/src&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;#你自己代码的路径&lt;/span&gt;
  &lt;span class=&quot;c1&quot;&gt;# Add more as needed here...&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;

&lt;span class=&quot;no&quot;&gt;SKETCHUP_CONSOLE&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;show&lt;/span&gt;  &lt;span class=&quot;c1&quot;&gt;# 显示ruby控制台&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;paths&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;each&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;
  &lt;span class=&quot;vg&quot;&gt;$LOAD_PATH&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;path&lt;/span&gt;
  &lt;span class=&quot;no&quot;&gt;Dir&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;glob&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;/*.rb&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;file&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;
    &lt;span class=&quot;no&quot;&gt;Sketchup&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;file&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;这样就可以把你在D盘的插件代码，载入到C盘的SU下了&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/2021/2021-4-20-vscode-sketchup-dev-setup/2021-4-20-vscode-sketchup-dev-setup-260.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;

&lt;h4 id=&quot;42-动态载入代码避免重启su&quot;&gt;4.2 动态载入代码，避免重启SU&lt;/h4&gt;

&lt;p&gt;还是以3.1的模板项目为例，在最顶层的ruby文件ex_hello_cube.rb中的module Examples层下，加入如下代码：&lt;/p&gt;

&lt;div class=&quot;language-ruby highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;  &lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;reload&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;original_verbose&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;vg&quot;&gt;$VERBOSE&lt;/span&gt;
    &lt;span class=&quot;vg&quot;&gt;$VERBOSE&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kp&quot;&gt;nil&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;pattern&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;File&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;join&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;__dir__&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'**/*.rb'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;no&quot;&gt;Dir&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;glob&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;pattern&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;each&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;file&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;
      &lt;span class=&quot;c1&quot;&gt;# Cannot use `Sketchup.load` because its an alias for `Sketchup.require`.&lt;/span&gt;
      &lt;span class=&quot;nb&quot;&gt;load&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;file&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;size&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;ensure&lt;/span&gt;
    &lt;span class=&quot;vg&quot;&gt;$VERBOSE&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;original_verbose&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src=&quot;/img/2021/2021-4-20-vscode-sketchup-dev-setup/2021-4-20-vscode-sketchup-dev-setup-270.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;

&lt;p&gt;重启一下SU，再进入ruby控制台，运行&lt;/p&gt;
&lt;div class=&quot;language-ruby highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;no&quot;&gt;Examples&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;reload&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;就可以重新载入代码了。&lt;/p&gt;

&lt;p&gt;为了验证，我们在main.rb中的Examples::HelloCube.create_cube方法中，加入&lt;/p&gt;
&lt;div class=&quot;language-ruby highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;puts&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;http://baisong.me&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src=&quot;/img/2021/2021-4-20-vscode-sketchup-dev-setup/2021-4-20-vscode-sketchup-dev-setup-280.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;

&lt;p&gt;进入ruby控制台，再运行&lt;/p&gt;
&lt;div class=&quot;language-ruby highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;no&quot;&gt;Examples&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;reload&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;再点击插件的菜单，就会发现这次在创建立方体的同时，也运行了后台新增的打印语句。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/2021/2021-4-20-vscode-sketchup-dev-setup/2021-4-20-vscode-sketchup-dev-setup-290.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;五参考资料&quot;&gt;五、参考资料&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.runoob.com/ruby/ruby-tutorial.html&quot;&gt;Ruby菜鸟教程&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/SketchUp/sketchup-ruby-api-tutorials&quot;&gt;sketchup-ruby-api-tutorials&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://forums.sketchup.com/categories&quot;&gt;Sketchup Community&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
        <pubDate>Tue, 20 Apr 2021 00:00:00 +0800</pubDate>
        <link>http://baisong.me/archivers/vscode-sketchup-dev-setup</link>
        <guid isPermaLink="true">http://baisong.me/archivers/vscode-sketchup-dev-setup</guid>
        
        
        <category>sketchup二次开发</category>
        
      </item>
    
      <item>
        <title>Sketchup中的实体（Solid Manifold）</title>
        <description>&lt;p&gt;这是近期学习中，对实体（Solid Manifold）理解的一个记录。&lt;/p&gt;

&lt;h2 id=&quot;一什么是实体solid-manifold&quot;&gt;一、什么是实体（Solid Manifold）？&lt;/h2&gt;

&lt;p&gt;在SketchUp中，实体是任何具有有限封闭体积的3D模型（组件或组）。&lt;/p&gt;

&lt;p&gt;详细定义的话，包括：&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;必须是组件或群组&lt;/li&gt;
  &lt;li&gt;不能有破面&lt;/li&gt;
  &lt;li&gt;不能有多余的线&lt;/li&gt;
  &lt;li&gt;不能有其余的隐藏物体&lt;/li&gt;
  &lt;li&gt;每条线（edge）都只连接两个面（两个立方体，如果有任何一条边相切的话，尽管这两个立方体各自是一个实体，但合起来却不是）&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;如果做3D打印的话，模型中的零件必须都是实体才可以。&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;顺便说一下，有些中文的技术文章，在翻译“entity”这个词时，也翻译成“实体”，是不准确的。&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Entity，包含了所有的几何对象，在官方翻译中，译为“图元”。详细理解可以见&lt;a href=&quot;https://blog.csdn.net/bobo_993/article/details/106800161&quot;&gt;《Ruby for SketchUp之Entities对象》&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Solid Manifold，也可以简称为manifold，或solid。其层级可以说是Entity下的孙子类了，翻译为“实体”&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;二实体的判断及操作&quot;&gt;二、实体的判断及操作&lt;/h2&gt;

&lt;p&gt;判断一个Entity是否实体，最简单的方法是选中，然后看其“图元信息”中，是否有体积的数值。如果有，它就是实体。&lt;/p&gt;

&lt;p&gt;实体的布尔操作工具，可以参考视频：&lt;a href=&quot;https://www.bilibili.com/video/BV1Jp4y117EU&quot;&gt;SketchUp基础入门-工具篇 1-40-实体工具&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;三实体相关的ruby-api&quot;&gt;三、实体相关的Ruby API&lt;/h2&gt;

&lt;p&gt;因为实体只可能是ComponentInstance或Group，所以只在这两个类下找即可，主要的有：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;#manifold? ⇒ Boolean   判断是否为实体&lt;/li&gt;
  &lt;li&gt;#volume ⇒ Float    求体积&lt;/li&gt;
  &lt;li&gt;#outer_shell、#union、#intersect等   布尔操作，与图形界面上的实体工具相对应。&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Wed, 07 Apr 2021 00:00:00 +0800</pubDate>
        <link>http://baisong.me/archivers/sketchup-solid-manifold</link>
        <guid isPermaLink="true">http://baisong.me/archivers/sketchup-solid-manifold</guid>
        
        
        <category>sketchup二次开发</category>
        
      </item>
    
      <item>
        <title>用VSCode debug Sketchup的几点注意事项</title>
        <description>&lt;p&gt;用VSCode开发Sketchup的Ruby插件，设置debug环境。主要步骤可以跟着官方的参考文档来：&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/SketchUp/sketchup-ruby-api-tutorials/wiki/VSCode-Debugger-Setup&quot;&gt;VSCode Debugger Setup&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;另外还有一篇中文的文章&lt;a href=&quot;https://blog.csdn.net/skybboy/article/details/80105524&quot;&gt;《用vscode调试ruby 和 ruby for Sketchup》&lt;/a&gt;也可供参考&lt;/p&gt;

&lt;p&gt;但今天在摸索的过程中，还是遇到一些问题，特将解决过程记录如下:&lt;/p&gt;

&lt;h2 id=&quot;一配置task时sketchupexe的路径及参数&quot;&gt;一、配置Task时，SketchUp.exe的路径及参数&lt;/h2&gt;

&lt;!--more--&gt;

&lt;p&gt;开始按照官方文档，配置task.json如下：&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/2021/2021-2-21-vscode-debug-sketchup-1.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;//&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;See&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;https://go.microsoft.com/fwlink/?LinkId=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;733558&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;//&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;the&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;documentation&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;about&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;the&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tasks.json&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;format&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;version&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;2.0.0&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;tasks&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;label&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Debug in SketchUp 2020&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;shell&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;command&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;//Windows下不需要&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;windows&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;command&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&amp;amp;'C:/Program Files/SketchUp/SketchUp 2020/SketchUp.exe' -rdebug 'ide port=7000'&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;problemMatcher&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;但实际运行时，要么报&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;此时不应有 &amp;amp;。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;img src=&quot;/img/2021/2021-2-21-vscode-debug-sketchup-2.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;

&lt;p&gt;去掉&amp;amp;，就报&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;‘C:’ 不是内部或外部命令，也不是可运行的程序&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;img src=&quot;/img/2021/2021-2-21-vscode-debug-sketchup-3.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;

&lt;p&gt;于是想了个&lt;strong&gt;Workaround&lt;/strong&gt;：&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;把“C:\Program Files\SketchUp\SketchUp 2020”加到path中去，避免盘符或路径空格引起的问题
  &lt;img src=&quot;/img/2021/2021-2-21-vscode-debug-sketchup-4.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;用转义字符代替单引号&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;这样，task.json变为：&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;//&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;See&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;https://go.microsoft.com/fwlink/?LinkId=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;733558&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;//&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;the&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;documentation&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;about&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;the&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tasks.json&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;format&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;version&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;2.0.0&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;tasks&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;label&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Debug in SketchUp 2020&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;shell&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;command&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;//windows下不需要&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;windows&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;command&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;SketchUp.exe -rdebug &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;ide port=7000&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;problemMatcher&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src=&quot;/img/2021/2021-2-21-vscode-debug-sketchup-5.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;

&lt;p&gt;就能成功唤起Sketchup了&lt;/p&gt;

&lt;h2 id=&quot;二添加surubydebuggerdll&quot;&gt;二、添加SURubyDebugger.dll&lt;/h2&gt;

&lt;p&gt;这点在&lt;a href=&quot;https://github.com/SketchUp/sketchup-ruby-api-tutorials/wiki/VSCode-Debugger-Setup#preparing-sketchup&quot;&gt;官方文档&lt;/a&gt;上是有的，但容易漏掉或搞错。&lt;/p&gt;

&lt;p&gt;在sketchup-ruby-debugger的&lt;a href=&quot;https://github.com/SketchUp/sketchup-ruby-debugger/releases&quot;&gt;release页面&lt;/a&gt;上，下载和自己SU版本对应的SURubyDebugger.dll文件，放到和Sketchup.exe同层的目录下，就可以了。否则无法建立和SU的通讯&lt;/p&gt;

&lt;h2 id=&quot;三进行调试&quot;&gt;三、进行调试&lt;/h2&gt;

&lt;p&gt;注意以上两点后，我在本地就能成功debug了&lt;/p&gt;

&lt;p&gt;先设置好断点，然后运行Task&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/2021/2021-2-21-vscode-debug-sketchup-6.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;

&lt;p&gt;等SU被唤起后，再按F5，就可以debug了&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/2021/2021-2-21-vscode-debug-sketchup-7.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;
</description>
        <pubDate>Sun, 21 Feb 2021 00:00:00 +0800</pubDate>
        <link>http://baisong.me/archivers/vscode-debug-sketchup</link>
        <guid isPermaLink="true">http://baisong.me/archivers/vscode-debug-sketchup</guid>
        
        
        <category>sketchup二次开发</category>
        
      </item>
    
      <item>
        <title>DXF文件格式的理解</title>
        <description>&lt;p&gt;本文是个人学习DXF文件格式的笔记，如有错误，欢迎指正！&lt;/p&gt;

&lt;h2 id=&quot;一dxf文件的基本结构&quot;&gt;一、DXF文件的基本结构&lt;/h2&gt;

&lt;p&gt;DXF文件在业务内容上，为一个树状结构，总体上分为6个Section（段）如下图：&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/2021/2021-2-5-dxf-understanding-1.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;由于DXF起源于上个世纪80年代，所以其内部的具体数据结构，在今天看来比较奇怪。用文本编辑器打开一个DXF文件，其最初的几行内容为（下面代码中“-&amp;gt;”的后面为我的注释）：&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;  0         -&amp;gt; 组码（Group Code）0，表示下一行表示的，是哪个层级的业务内容
SECTION     -&amp;gt; 值。表明这是一个SECTION（最高层次的业务级别）的开始
  2         -&amp;gt; 组码2，表示下面的值是上面层级（SECTION）名字
HEADER      -&amp;gt; 值。结合前两行，表示这个SECTION的名字为HEADER（第一个段）
  9         -&amp;gt; 组码9。表示下面一行的内容为一个变量名
$ACADVER    -&amp;gt; 值。变量名为$ACADVER，指Autocad的版本号
  1         -&amp;gt; 组码1。表示下面一行的内容为上一行变量（$ACADVER）的值
AC1027      -&amp;gt; 值。AC1027表示Autocad 2013
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;从上面的例子，可以看出，DXF文件的具体实现为：&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;首行（奇数行）为Group Code（组码），规定了下一行具体是什么样的内容。&lt;/li&gt;
  &lt;li&gt;紧跟的下一行（偶数行），为具体的内容&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;所有Group Code的含义，都可以参考：&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;autodesk官网中的&lt;a href=&quot;https://help.autodesk.com/view/OARX/2018/ENU/?guid=GUID-235B22E0-A567-4CF6-92D3-38A2306D73F3&quot;&gt;DXF参考文档&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;autodesk官网中&lt;a href=&quot;https://www.autodesk.com/developer-network/platform-technologies/autocad-dxf-archive&quot;&gt;下载版PDF文档&lt;/a&gt;（更新到AutoCAD 2014）&lt;/li&gt;
  &lt;li&gt;可下载的中文翻译版，虽然旧点，但99%的内容都能覆盖&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;二entities段的基本结构&quot;&gt;二、ENTITIES段的基本结构&lt;/h2&gt;

&lt;p&gt;图形信息都在ENTITIES段，对大部分开发者来说最为重要。&lt;/p&gt;

&lt;p&gt;我用autocad 2014画了一条直线和一个圆。直线起点坐标[111,222]，终点坐标[333,444]。圆的圆心坐标[555,555]，半径50。如下图：&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/2021/2021-2-5-dxf-understanding-2.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;

&lt;p&gt;另存为DXF文件，摘取其中ENTITIES段予以说明：&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;  0         -&amp;gt; 组码0，表示下一行表示的，是哪个层级的业务内容
SECTION     -&amp;gt; 值。表明SECTION的开始
  2         -&amp;gt; 组码2，表示下面的值是上面层级（SECTION）名字
ENTITIES    -&amp;gt; 值。SECTION的名字是ENTITIES
  0         -&amp;gt; 组码0，表示下一行表示的，是哪个层级的业务内容
LINE        -&amp;gt; 值。表明SECTION下的LINE（直线）开始
  5         -&amp;gt; 组码5，表示Entity handle（图元句柄，就是这条Line的一个ID）
243         -&amp;gt; 值。表示具体的ID
330         -&amp;gt; 组码330，表示此元素在内部字典的另外一个ID
1F          -&amp;gt; 值。表示具体的ID
100         -&amp;gt; 组码100，表示子类的开始。
AcDbEntity  -&amp;gt; 值。表示子类名
  8         -&amp;gt; 组码8，表示图层名
0           -&amp;gt; 值。表示图层为0
100         -&amp;gt; 组码100，表示子类的开始。所有Line对象特有的数据，都在这个子类里
AcDbLine    -&amp;gt; 值。表示子类名
 10         -&amp;gt; 组码10，表示起点X轴坐标
111.0       -&amp;gt; 值。X轴坐标值
 20         -&amp;gt; 组码20，表示起点X轴坐标
222.0       -&amp;gt; 值。Y轴坐标值
 30         -&amp;gt; 组码30，表示起点X轴坐标
0.0         -&amp;gt; 值。Z轴坐标值
 11         -&amp;gt; 组码11，表示终点X轴坐标
333.0
 21         -&amp;gt; 组码21，表示终点X轴坐标
444.0
 31         -&amp;gt; 组码31，表示终点X轴坐标
0.0
  0         -&amp;gt; 组码0，表示又开始了一个新层级的业务内容
CIRCLE      -&amp;gt; 值。表示一个圆，读者可以自行分析以下内容
  5
244
330
1F
100
AcDbEntity
  8
0
100
AcDbCircle
 10
555.0
 20
555.0
 30
0.0
 40
50.0
  0         -&amp;gt; 组码0，表示又开始了一个新层级的业务内容
ENDSEC      -&amp;gt; 值。ENDSEC表示ENTITIES SECTION结束
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
</description>
        <pubDate>Fri, 05 Feb 2021 00:00:00 +0800</pubDate>
        <link>http://baisong.me/archivers/dxf-understanding</link>
        <guid isPermaLink="true">http://baisong.me/archivers/dxf-understanding</guid>
        
        
        <category>sketchup二次开发</category>
        
      </item>
    
      <item>
        <title>2017年读的文章</title>
        <description>&lt;p&gt;2017年读的文章&lt;/p&gt;

&lt;p&gt;《信用紧缩期需改变通胀思维模式》  范欣&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;《论睁了眼看》&lt;/strong&gt;  鲁迅&lt;/p&gt;

&lt;p&gt;“中国人的不敢正视各方面，用瞒和骗，造出奇妙的逃路来，而自以为正路。在这路上，就证明著国民性的怯弱，懒惰，而又巧滑。一天一天的满足着，即一天一天的堕落着，但却又觉得日见其光荣。在事实上，亡国一次，即添加几个殉难的忠臣，后来每不想光复旧物，而只去赞美那几个忠臣；遭劫一次，即造成一群不辱的烈女，事过之后，也每每不思惩凶，自卫，却只顾歌咏那一群烈女。”&lt;/p&gt;

&lt;p&gt;影帝的“多难兴邦”也是这个套路。&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://www.eeo.com.cn/2017/0621/306945.shtml&quot;&gt;《政治正确的反智性》&lt;/a&gt;&lt;/strong&gt;  周泽雄 2017-6&lt;/p&gt;

&lt;p&gt;“人们——尤其是有头有脸的人物——必须讨好每一个无能之辈，假装拥有一副佛陀般的好脾气，假装相信“每个人都是独特的、有创造力的”乃是一个和“上帝面前人人平等”同样不容置疑的结论”&lt;/p&gt;

&lt;p&gt;对多元文化的过度尊重，使真理不再具有精神硬通货的属性，人们更愿意把观点社区化。当“激烈争辩”会被说成“胁迫”，人们在“放聪明点”之余，也随之放弃与他人展开观点交锋，改为“分享”大家喜闻乐见的内容。&lt;/p&gt;

&lt;p&gt;所以，这里真正的问题不在于谁对谁错，而是撕裂双方表现出的大惊失色感，好像他们对于有人会持相反意见这一点，完全缺乏心理准备。这正好证明了沃勒先生的判断，即所谓的多元包容，只是使人们蓄意回避，他们习惯于在拥有相同趣味和价值观的群体里进行讨论并相互点赞，同时对于对立方的观点无比陌生。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://www.eeo.com.cn/2017/0421/302951.shtml&quot;&gt;《我的阅读是实用主义》&lt;/a&gt;&lt;/strong&gt; 张瑞敏 2017-4&lt;/p&gt;

&lt;p&gt;我感觉，读书一是要把自己放进去。《楞严经》有句话：“失于本心，为物所转，若能转物，则同如来”。用另一句简单的话来说就是，“物转心则凡，心转物则圣”，大体是这个意思。如果读书不把自己放进去，可能你读了以后什么都忘记了。&lt;/p&gt;

</description>
        <pubDate>Sat, 01 Jul 2017 00:00:00 +0800</pubDate>
        <link>http://baisong.me/archivers/read-in-2017</link>
        <guid isPermaLink="true">http://baisong.me/archivers/read-in-2017</guid>
        
        
        <category>读书看报</category>
        
      </item>
    
      <item>
        <title>2016年秋冬季读的文章</title>
        <description>&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://www.eeo.com.cn/2017/0217/298367.shtml&quot;&gt;《镀金的祖先》&lt;/a&gt;&lt;/strong&gt; 周泽雄  2017-2&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://www.eeo.com.cn/2016/1213/295105.shtml&quot;&gt;《暗黑系的真理》&lt;/a&gt;&lt;/strong&gt;  周泽雄  2016-12&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://www.eeo.com.cn/2016/1022/292927.shtml&quot;&gt;《为创新确权》&lt;/a&gt;&lt;/strong&gt;  薛兆丰  2016-10&lt;/p&gt;

&lt;p&gt;……
人们常常说既要把饼做大，也要把饼分匀。此话听来入耳。它是在说，做饼在前，分饼在后，两者相对独立，前者不受后者影响。然而，事实是相反的。不容易入耳的逻辑是：是前者由后者决定，是后发生的事情决定了先发生的事情，是饼的分法决定了饼的大小。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://www.eeo.com.cn/2016/1121/294287.shtml&quot;&gt;《人民依旧不可捉摸》&lt;/a&gt;&lt;/strong&gt;  周泽雄 经济观察报 2016-11&lt;/p&gt;

&lt;p&gt;使人民变得不可捉摸的原因，正在于每一位个体拒绝使自己沦为勒庞式群众的努力&lt;/p&gt;

&lt;p&gt;如果最大程度地尊重勒庞，把他写在书里的内容都视为原创，同时尽量合理化他的命令型见解，那么，作为无意于成为“群众领袖”的普通读者，我们也能从中受益。&lt;/p&gt;

</description>
        <pubDate>Mon, 24 Oct 2016 00:00:00 +0800</pubDate>
        <link>http://baisong.me/archivers/read-in-2016-winter</link>
        <guid isPermaLink="true">http://baisong.me/archivers/read-in-2016-winter</guid>
        
        
        <category>读书看报</category>
        
      </item>
    
      <item>
        <title>2016年春夏季读的文章</title>
        <description>&lt;p&gt;2016年春夏季读的文章&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://www.eeo.com.cn/2016/0722/289824.shtml&quot;&gt;《保房价还是保汇率 这是个问题》&lt;/a&gt;&lt;/strong&gt;  范欣 2016-7&lt;/p&gt;

&lt;p&gt;以下为个人猜测，三年后回来看：&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;人民币继续贬值，甚至有可能突然大幅度贬值&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;核心城市，核心区房价继续上涨&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;通胀率升高&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;!--more--&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://www.eeo.com.cn/2016/0905/291683.shtml&quot;&gt;《学者作为榜样——再以钱钟书为例》&lt;/a&gt;&lt;/strong&gt;  周泽雄  2016-9&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://www.eeo.com.cn/2016/0604/288013.shtml&quot;&gt;《快递业全解读：更加惨烈的对抗将大范围展开》&lt;/a&gt;&lt;/strong&gt;  于占福  2016-6-4添加&lt;/p&gt;

&lt;p&gt;学习资本在行业整合中的作用，行业格局分析等&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://zhuanlan.zhihu.com/p/19967863&quot;&gt;《上市前都要想明白啥（四）——关于新三板》&lt;/a&gt;&lt;/strong&gt;  沈一冰  2016-4-28添加&lt;/p&gt;

&lt;p&gt;“债权融资是有举债上限的（资产负债率），而且要用现金还。这也决定了能使用债权融资的企业都需要较好的稳定现金流，但是对初创企业等中小企业来说这是很难做到的。这种内在的矛盾导致中小企业贷款风险很高，高风险需要用高利率来覆盖。而真正出了风险跑路的人还不上钱，反倒是正常经营的中小企业来承担高利率来弥补跑路的中小企业带来的损失，这种机制会导致企业家的逆向选择，鼓励不做好人做坏人。&lt;/p&gt;

&lt;p&gt;但是股权投资则不同，通过参与投资公司，投资者会在投资较好的企业后获得高额回报，而在投资错误时收到惩罚，这种机制会鼓励投资者去发现更好的企业，并以股权回报的丰厚收益来弥补其他的投资损失。在这里消除了上面说到的逆向选择，如果没有大的机制错误，则会促进投资者和中小企业的发展。”&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://www.jianshu.com/p/33a61ff3aa8d&quot;&gt;《一个语言爱好者的bucket list (汉语篇)》&lt;/a&gt;&lt;/strong&gt;    Jacky&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;知乎上看到的这句话让我印象深刻 – 汉语教育的敌人不在英语，而在「坚决拥护加大力度鼓足干劲表达诚挚的慰问两手都要抓摸着石头一心一意搞建设全面建成一道亮丽的风景线」。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://www.eeo.com.cn/2016/0430/285661.shtml&quot;&gt;《卷轴里的政治与人性——韩熙载夜宴图》&lt;/a&gt;&lt;/strong&gt;  李冬君 2016-4&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://www.eeo.com.cn/2016/0406/284772.shtml&quot;&gt;《简单里的陷阱》&lt;/a&gt;&lt;/strong&gt;  周泽雄 2016-4&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://www.eeo.com.cn/2016/0313/284169.shtml&quot;&gt;《当我们谈创业时我们谈些什么》&lt;/a&gt;&lt;/strong&gt;    贾雪峰&lt;/p&gt;

&lt;p&gt;当我琢磨创业的时候，从未想过这是国家鼓励的举动，我真正在考虑的是——我的家庭、我的员工包括我自己能不能活下去？这个项目是否会如我所计划的那样进行？一路做下去我能找到什么样的人？如何才能获得资金的支持？……可是当我谈创业的时候，这些还是我要琢磨的问题，一条都没变。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://www.eeo.com.cn/2016/0227/283461.shtml&quot;&gt;《如何拥有良好的投资心态？》&lt;/a&gt;&lt;/strong&gt;    管大宇&lt;/p&gt;

&lt;p&gt;良好的心态对于做好投资是有帮助的，但是好心态并不能通过一些玄之又玄的方法修炼出来。通过提高投资活动的盈亏比和交易系统的确定性，可以帮助自己发挥理性的部分，规避不理性的部分，不但帮助自己拥有一个良好的投资心态，还可以有效增加投资过程的可靠性和结果的确定性。&lt;/p&gt;
</description>
        <pubDate>Tue, 01 Mar 2016 00:00:00 +0800</pubDate>
        <link>http://baisong.me/archivers/read-in-2016-summer</link>
        <guid isPermaLink="true">http://baisong.me/archivers/read-in-2016-summer</guid>
        
        
        <category>读书看报</category>
        
      </item>
    
      <item>
        <title>2014年夏季读的文章</title>
        <description>&lt;p&gt;2014年春夏季读的文章&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://www.huxiu.com/article/29908/1.html&quot;&gt;《目标有一个非常重要的特点，叫“极简”》&lt;/a&gt;&lt;/strong&gt;  傅盛  2014-3-17&lt;/p&gt;

&lt;p&gt;……管理的本质是什么？就是树立起一个核心的业务，让这个业务带着所有的员工和组织构架往前走，而不是去构建一个四平八稳的组织构架，让所有的业务井井有条。&lt;/p&gt;

&lt;p&gt;雷军有一句话非常有道理，他说，“你不要用战术的勤奋掩盖战略的懒惰”。……&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://www.huxiu.com/article/32613/1.html&quot;&gt;《好问题，坏问题》&lt;/a&gt;&lt;/strong&gt;  脱不花妹妹  2014-5-2&lt;/p&gt;

&lt;p&gt;伪问题：反问，设问，基于假设的问题。&lt;/p&gt;

&lt;p&gt;……好问题与坏问题的根本差别就在于，好问题尽量避免对动机或价值观的争议，着眼于客观事实，着眼于当下，引发对陌生领域的探寻。……&lt;/p&gt;

&lt;p&gt;……因此，人人都不妨扪心自问一下：我是真诚的、开放的想要获知一个信息，还是想要显示自己的高明而去发问的？……&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://www.eeo.com.cn/2014/0328/258398.shtml&quot;&gt;《比特币引发的反思》&lt;/a&gt;&lt;/strong&gt;  陈季冰  2014-3-21&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;哈耶克和弗里德曼……认为，通过超量发行货币来制造通货膨胀，从而隐蔽地对民众财富进行巧取豪夺，是政府在经济上最简单、最不易被察觉、因而也是最常用的作恶手段。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;……所谓货币，其本质即信用——使“钱”成为“钱”的，是人们寄予它的一种共同的信心。由此我们还可以得出结论，“法定货币”并不是货币的唯一形态，由中央银行垄断法币的发行及其监管的现行金融体系，可能并非像许多人以为的那么神圣、那么理所当然。而将一种货币定义为“实体的”或是“虚拟的”，说到底也是一个伪命题。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;……法币也有其难以克服的内在缺陷——基于基本人性，我们不能保证任何一个政府在任何时候都是负责任的，更不能确信其在任何情况下都有能力为自己作出过的承诺负责。近现代历史上一再发生的恶性通货膨胀已经不容辩驳地证明，国家没有办法从根本上解决法币币值的稳定问题。……&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;……法币的信用是建立在国家主权担保基础上的，但这只是这枚铸着国王和总统头像的光灿灿的硬币的一面，它的另一面是国家的强制。这意味着民众对于它的信任并不是真正意义上自发和自主的信得过，而是排除了其他选择的被迫。相反，私人货币由于没有国家担保，自然也就不具有强制性和排他性，对于它的信心纯粹建立在市场的自由选择上。……&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;……事实上，当一种货币变得越来越具有投资价值，它就越来越远离真正的货币属性。……&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://www.eeo.com.cn/2014/0404/258704.shtml&quot;&gt;《地产拐点年内或现》&lt;/a&gt;&lt;/strong&gt; 范欣 2014-4-7&lt;/p&gt;

&lt;p&gt;参考&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://www.eeo.com.cn/2014/0421/259500.shtml&quot;&gt;《无聊的思想》&lt;/a&gt;&lt;/strong&gt;  丁力  2014-4-21&lt;/p&gt;

&lt;p&gt;……严格说来，并不存在中国思想、西方思想这样的区分。它们都有对方的基因，而且都是以人类共同的认知能力为基础。它们内部之间的分歧，常常大于和对方的差 异。这种差异来自个人的“意志”，以及越来越少见的、特定语境中的权力干涉。中西哲学是可以融洽互补的亲属，绝非互相排斥和对立的仇人。……&lt;/p&gt;

&lt;p&gt;……叔本华流传最广的一句话大概是：“人生是在痛苦和无聊之间像钟摆一样的来回摆动着；事实上痛苦和无聊也就是人生的两种最后成分。”……&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://www.eeo.com.cn/2014/0607/261529.shtml&quot;&gt;《硅谷如何吸引顶尖人才》&lt;/a&gt;&lt;/strong&gt;  Jeanne Harris  2014-6-7&lt;/p&gt;

&lt;p&gt;facebook 完成胜过完美 done is better than perfect&lt;/p&gt;

&lt;p&gt;详情可见：http://www.cnbeta.com/articles/251605.htm&lt;/p&gt;

&lt;p&gt;其他也可参考&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;&quot;&gt;《许小年：没有内心趋动，哪有创新？》&lt;/a&gt;&lt;/strong&gt;  陈哲  2014-7-7&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://www.eeo.com.cn/2014/0627/262576.shtml&quot;&gt;《“下狗”游走苏黎世——爱因斯坦的求学生活》&lt;/a&gt;&lt;/strong&gt;  冯八飞 2014-6-27&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.eeo.com.cn/2014/0709/263148.shtml&quot;&gt;《热爱物理的伯尔尼专利员》&lt;/a&gt;  冯八飞&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.eeo.com.cn/2014/0722/263772.shtml&quot;&gt;《石破天惊的五篇论文》&lt;/a&gt;  冯八飞&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.eeo.com.cn/2014/0722/263773.shtml&quot;&gt;《想当教授的爱物理青年》&lt;/a&gt;  冯八飞  2014-7-21&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.eeo.com.cn/2014/0815/264958.shtml&quot;&gt;《踏遍欧洲人未老》&lt;/a&gt;  冯八飞  2014-7-28&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.eeo.com.cn/2014/0813/264880.shtml&quot;&gt;《战争下的广义相对论》&lt;/a&gt; 冯八飞  2014-8-13&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.eeo.com.cn/2014/0820/265195.shtml&quot;&gt;《无用之用相对论》&lt;/a&gt;   冯八飞  2014-8-20&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.eeo.com.cn/2014/0913/266300.shtml&quot;&gt;《只有死亡才能分开》&lt;/a&gt;   冯八飞  2014-9-6&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.eeo.com.cn/2014/0918/266432.shtml&quot;&gt;《星光弯曲的1919年》&lt;/a&gt;   冯八飞  2014-9-13&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.eeo.com.cn/2014/0919/266561.shtml&quot;&gt;《一夜成名究可哀》&lt;/a&gt;   冯八飞  2014-9-20&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.eeo.com.cn/2014/1009/267152.shtml&quot;&gt;《乘光电兮轻取诺贝尔》&lt;/a&gt;   冯八飞  2014-9-26&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.eeo.com.cn/2014/1014/267354.shtml&quot;&gt;《万世弱者守护神》&lt;/a&gt;   冯八飞  2014-10-14&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.eeo.com.cn/2014/1021/267641.shtml&quot;&gt;《爱因斯坦在美国》&lt;/a&gt;   冯八飞  2014-10-&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.eeo.com.cn/2014/1106/268315.shtml&quot;&gt;《跟上帝掷骰子》&lt;/a&gt;   冯八飞  2014-11-6&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;&quot;&gt;《超弦屠龙统一场》&lt;/a&gt;  冯八飞  2014-11-8&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://www.eeo.com.cn/2014/0718/263615.shtml&quot;&gt;《青岛来客：财富管理实验区诱惑》&lt;/a&gt;&lt;/strong&gt;  庞丽静  2014-7-21&lt;/p&gt;

&lt;p&gt;关注青岛的互联网金融实验区建设&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://www.eeo.com.cn/2014/0726/264071.shtml&quot;&gt;《异化的担保》&lt;/a&gt;&lt;/strong&gt;  李意安  李超  2014-7-28&lt;/p&gt;

&lt;p&gt;四川汇通担保事件报道&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://www.eeo.com.cn/2014/0919/266556.shtml&quot;&gt;《时空翻转：看电商如何摧毁零售》&lt;/a&gt;&lt;/strong&gt;  姜汝祥  2014-9-21&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;……电商宣布，一个产品是不是被需要，不再与地租有关，不再与店面有关，不再与广告有关，而只与消费者的喜爱有关。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;基于这样一种逻辑，互联网就不再是一种技术或一种生意，互联网首先是一种观念，一种基于尊重人性，尊重生活的观念。……&lt;/p&gt;
&lt;/blockquote&gt;
</description>
        <pubDate>Wed, 26 Mar 2014 00:00:00 +0800</pubDate>
        <link>http://baisong.me/archivers/read-in-2014</link>
        <guid isPermaLink="true">http://baisong.me/archivers/read-in-2014</guid>
        
        
        <category>读书看报</category>
        
      </item>
    
      <item>
        <title>2013年秋冬季读的文章</title>
        <description>&lt;p&gt;2013年秋冬季读的文章&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://www.eeo.com.cn/2013/1102/251510.shtml#wechat_redirect&quot;&gt;《在小时代，理想主义如何可能？》&lt;/a&gt;&lt;/strong&gt;  许纪霖  2013-11&lt;/p&gt;

&lt;p&gt;1，疑惑：理想主义是我们的宿命，但是理想的实现又是那么的虚幻，究竟应该怎么办？在什么意义上来确证自己的理想？&lt;/p&gt;

&lt;p&gt;回答：史铁生讲得非常好：“意义的确证应该从目的转向过程”，“生命的价值就在于你能够镇静而又激动地欣赏这过程的美丽与悲伤，从不屈获得骄傲，从苦难获得幸福，从虚无创造意义。”这需要人生的一些阅历去感受它。&lt;/p&gt;

&lt;p&gt;2，工具理性（实现具体的，功利的目标）的缺陷&lt;/p&gt;

&lt;p&gt;然而，一个真正有意义的人生，不是自我设计的结果，而是有一个理想的大目标，根据自己的个性和爱好，将自己打造成器，然后顺应机遇，一步步接近自己的理 想。通往理想的道路，不是只有一条，而是有可能有多条。今天这个社会千变万化，人生不会跟着你的设计走，而是设计跟着人生走。因此，人生不是靠工具理性设 计出来的，不是设定一个一个具体的目标，关键是让自己成为优秀的人，有理想，有抱负，但是理想和抱负又不能太具体。要相信天生我材必有用，东方不亮西方亮。&lt;/p&gt;

&lt;p&gt;……智慧这个元素，就像撒在汤里的盐一样，看不见，摸不着，但品得出来。……&lt;/p&gt;

&lt;p&gt;3，公共生活熏陶出来的卓越&lt;/p&gt;

&lt;p&gt;4，内在的价值追求（价值理性）VS外在价值的追求（工具理性）&lt;/p&gt;

&lt;p&gt;……知识分子就是一种业余精神，所谓业余，就是不为稻粱谋，不计功利，不在乎成败，以业余爱好的游戏状态去做，不仅可以得到真正的快乐，而且可以安身立命……&lt;/p&gt;

&lt;p&gt;……就是对内在价值、内在利益的追求。这种内在价值，正是你的志业……&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://www.huxiu.com/article/25926/1.html&quot;&gt;《新闻有毒，放弃新闻会让你感觉更好》&lt;/a&gt;&lt;/strong&gt;  虎嗅  phate004  2014-1&lt;/p&gt;

&lt;p&gt;新闻“有误导性，和你自身无关，没有解释力，阻碍思考”，所以，戒了吧！&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://www.huxiu.com/article/25920/1.html&quot;&gt;《一个孩子到底该值多少钱？》&lt;/a&gt;&lt;/strong&gt;  虎嗅  伯通  2014-1&lt;/p&gt;

&lt;p&gt;促使这个社会变化的可能更多的是那些冷冰冰但摸得到的事实，而不是人们心里的主管愿望。&lt;/p&gt;

&lt;p&gt;……“儿童被当成生命，和思想启蒙关系不大，而是因为医学进步”……&lt;/p&gt;

&lt;p&gt;“任何想用道德挑战社会结构的举动都堪称愚蠢。美国童工的迅速消失，不是因为大家良心发现，也不是因为政府立法，而是因为那符合经济规律”……&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://www.eeo.com.cn/2013/0910/249625.shtml&quot;&gt;《暗战债权融资》&lt;/a&gt;&lt;/strong&gt;  胡中彬 周雅珏  2013-9&lt;/p&gt;

&lt;p&gt;介绍了宜信“高成长企业债”这样的产品及案例：巨人教育创始人从风投处回购股份需要资金，宜信提供融资。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://www.eeo.com.cn/2013/0821/248736.shtml&quot;&gt;《商业银行变革盈利模式方能自救》&lt;/a&gt;&lt;/strong&gt;  杜静  2013-8&lt;/p&gt;

&lt;p&gt;目前商业银行透支性盈利的途径：&lt;/p&gt;

&lt;p&gt;1，以资产各种结构性错配，延缓不良资产发生。通俗说，有病尽量往后拖。&lt;/p&gt;

&lt;p&gt;2，资金空转&lt;/p&gt;

&lt;p&gt;3，依靠政策保护，低成本吸收资金，获取垄断利润。&lt;/p&gt;

&lt;p&gt;指路：&lt;/p&gt;

&lt;p&gt;1，风险控制永远要大于盈利冲动。&lt;/p&gt;

&lt;p&gt;2，不能老指望“央妈”&lt;/p&gt;

&lt;p&gt;3，多开源，广积粮。&lt;/p&gt;
</description>
        <pubDate>Sun, 05 Jan 2014 00:00:00 +0800</pubDate>
        <link>http://baisong.me/archivers/read-in-2013-winter</link>
        <guid isPermaLink="true">http://baisong.me/archivers/read-in-2013-winter</guid>
        
        
        <category>读书看报</category>
        
      </item>
    
      <item>
        <title>2013年夏季读的文章</title>
        <description>&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://blog.sina.com.cn/s/blog_630b51b001018us8.html&quot;&gt;《没有错误的错误》&lt;/a&gt;&lt;/strong&gt;  2013-2  王健&lt;/p&gt;

&lt;p&gt;自我提升更好的做法，是把时间和精力用在发挥自己的特长，而不是用来弥补自己的不足。&lt;/p&gt;

&lt;p&gt;“从结果看，B远强于A，但荒唐的是，大多数人的本能是向A学习，他们把全部精力都倾注在减少缺点和不犯错误上，使自己在别人心中尽量完美。”&lt;/p&gt;

&lt;p&gt;“切勿追求在别人心中的完美”&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://www.eeo.com.cn/2013/0628/245829.shtml&quot;&gt;《唐钢“非钢”故事》&lt;/a&gt;&lt;/strong&gt;  经济观察报  张向东&lt;/p&gt;

&lt;p&gt;就记住一句话：“安者非一日之安也，危者非一日之危也，皆以积渐然。”——班固&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://tech.sina.com.cn/i/2011-08-01/14395864878.shtml&quot;&gt;《好钢用在刀刃上——豆瓣网开发经验分享》&lt;/a&gt;&lt;/strong&gt;  CSDN 2011-8 解彦博&lt;/p&gt;

&lt;p&gt;今天偶然翻CSDN旧杂志，看到这篇文章，再次细读，感觉很对自己胃口。&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;能自动化的尽量自动化，&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;在开发工具上多花些精力是值得的，磨刀不误砍柴工。&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;给团队选择的空间&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;招聘优秀的人&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;减少对团队的限制，尤其是行政限制。&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;给员工成长的土壤&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://tech.sina.com.cn/i/2011-08-01/14395864878.shtml&quot;&gt;《创业公司如何招聘优秀工程师》&lt;/a&gt;&lt;/strong&gt;  CSDN  2011-6  潘晓良&lt;/p&gt;

&lt;p&gt;怎样面试：写代码；让足够多的优秀工程师面试；试婚。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://www.eeo.com.cn/2013/0520/244251.shtml&quot;&gt;《为什么书生总会败下阵来》&lt;/a&gt;&lt;/strong&gt;  2013-5  金雁&lt;/p&gt;

&lt;p&gt;托洛茨基说，我们这个体制说的是不劳动者不得食，而真正体现的是不服从者不得食，在政府是唯一雇主的国家里，反叛就等于饿死。&lt;/p&gt;

&lt;p&gt;所以我可以坦诚地说，如果我在那个时代，不会做得比他好，如果我能够做得比他好，那我的结局将会比他更悲惨。就像利哈乔夫所说的，在一个不幸的社会里，敢于抗衡权力的人不可能是幸福的。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://www.eeo.com.cn/2013/0503/243617.shtml&quot;&gt;《思考是一种信念》&lt;/a&gt;&lt;/strong&gt; 卡尼曼访谈  2013-5  Eric Fish&lt;/p&gt;

&lt;p&gt;这篇文章值得好好看，卡尼曼的回答透出一种智慧。&lt;/p&gt;

&lt;p&gt;没错，从这个角度说，没有人会在辩论中真正改变原意，辩论几乎是徒劳。讨论是有益处的，但是大多数情况下，没有人真的会因此改变。&lt;/p&gt;

&lt;p&gt;如果不是因为战争中的一方，或者双方存有某些极端执念，战争根本就不会发生。&lt;/p&gt;

&lt;p&gt;所以自信的律师会赢一些本该输的官司。&lt;/p&gt;

&lt;p&gt;在大多数情况下鼓励比批评更有用。批评有时是很好的催动力，但是它并不使人接受教训。总体上说积极的对待会更加催人奋进。&lt;/p&gt;

&lt;p&gt;每一次改革都会有其相应的损失者和受益者，而损失者会比受益者更激烈地反抗。改革通常比预期的成本更大，因为在规划改革的时候，被纳入计算的是整体的成本和收益，而现实中，承受损失的人会强烈地要求赔偿，这使得改革常常比预期的更为低效。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://wenku.baidu.com/view/8761f61d5f0e7cd18425367f.html&quot;&gt;《小贷公司集团化及前景分析》&lt;/a&gt;&lt;/strong&gt;  2013-1  第1财经  李钧&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://wenku.baidu.com/view/c9861b607e21af45b307a8cc.html&quot;&gt;《长三角小微企业经营与融资现状调研报告》&lt;/a&gt;&lt;/strong&gt;  2012-9  北京大学国家发展研究院  阿里巴巴集团&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://blog.sina.com.cn/s/blog_4b35d1f80101kv7u.html#bsh-24-228931398&quot;&gt;《个人对个人（P2P）小额信贷信息服务行业法律问题座谈会综述》&lt;/a&gt;&lt;/strong&gt; 2013-4 白澄宇等&lt;/p&gt;

&lt;p&gt;有专家认为……有专家认为……有专家认为……&lt;/p&gt;

&lt;p&gt;好在基本的共识是：1，平台不碰钱（汇付天下的P2P解决方案）2，平台不担保&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://www.chinamfi.net/files/products/8840.1355_00000010-P2P00000000000.pdf&quot;&gt;《P2P信贷：性质、风险与监管》&lt;/a&gt;&lt;/strong&gt;  2013-5  李钧  第一财经研究院研究员&lt;/p&gt;

&lt;p&gt;目前为止看到过的最好的行业分析文章&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://finance.ifeng.com/opinion/mssd/20130503/7991172.shtml&quot;&gt;《我们需要怎样的互联网金融》&lt;/a&gt;&lt;/strong&gt;   2013-5  董俊峰&lt;/p&gt;

&lt;p&gt;一个银行业内人自己对互联网金融的期待，其中提到了供应链金融。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://www.eeo.com.cn/2013/0407/242294.shtml&quot;&gt;《京东棋局》&lt;/a&gt;&lt;/strong&gt;  2013-4  闫威&lt;/p&gt;

&lt;p&gt;为社会、消费者创造巨大价值的公司，盈利只是一个时间问题&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://www.eeo.com.cn/2013/0410/242403.shtml&quot;&gt;《“影子银行”出路何在》&lt;/a&gt;&lt;/strong&gt;  2013-4  润彤&lt;/p&gt;

&lt;p&gt;2013年开始， 中国的影子银行也许会进入被严厉监管的通道&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://www.eeo.com.cn/2013/0408/242320.shtml&quot;&gt;《分食银行供应链金融 快钱模式冲击波》&lt;/a&gt;&lt;/strong&gt;  2013-4  蓝彬珍&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://www.eeo.com.cn/2013/0331/242040.shtml&quot;&gt;《温州金改年考交卷 金融洼地尚未形成》&lt;/a&gt;&lt;/strong&gt;  2013-3  蓝彬珍&lt;/p&gt;

&lt;p&gt;温州金改没能像深圳前海金融改革区、滨海新区一样形成金融洼地。&lt;/p&gt;

&lt;p&gt;企业如果寻求小额贷款公司，更多的是作为转贷或者偿还贷款，如果是正常的企业融资我们不会寻求小额贷款公司，利率太高，企业根本无法负荷。&lt;/p&gt;

&lt;p&gt;温州金融改革有两个要点（目的），盘活民间资本和让民营资本进入金融领域，民间资本进入金融领域没有突破，金改就不算到位&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://www.eeo.com.cn/2013/0331/242040.shtml&quot;&gt;《信念比创造力更驱动创新》&lt;/a&gt;&lt;/strong&gt; Doreen　Lorenzo&lt;/p&gt;

&lt;p&gt;“在有意义的工作方面不断取得进展”是让员工获得参与感与动力的主要因素。信念是重要的。当工作当中的目标与员工本身的信念产生共鸣时，这将会驱动他更努力地工作。&lt;/p&gt;

&lt;p&gt;所有规模的组织都可鼓励从CEO到实习生的每个人去追求自己的信念。他们并不需要啦啦队在一旁鼓劲加油。&lt;/p&gt;

&lt;p&gt;在青蛙设计，我们听从员工的心声，为他们的兴趣诉求创造条件，并勇敢承担这些诉求可能带来的风险。在青蛙设计，员工是第一位的，我们的理念是营造一个开放的文化氛围，为每个人的意见诉求提供机会，不管你是哪种级别的员工，你都可以与任何高级行政人员甚至是董事会成员在日常或是季度会议这样全公司的平台上沟通交换意见。在这种氛围里，员工们能够毫无顾虑地分享新鲜而有创意的想法，改进青蛙目前存在的问题，更好地改善青蛙的经营状况。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://www.eeo.com.cn/2013/0331/242040.shtml&quot;&gt;《屎蛋瞎扯的经济和行业》&lt;/a&gt;&lt;/strong&gt; 2013-2  屎蛋吴（hi-pda）&lt;/p&gt;

</description>
        <pubDate>Wed, 10 Apr 2013 00:00:00 +0800</pubDate>
        <link>http://baisong.me/archivers/read-in-2013-summer</link>
        <guid isPermaLink="true">http://baisong.me/archivers/read-in-2013-summer</guid>
        
        
        <category>读书看报</category>
        
      </item>
    
  </channel>
</rss>
