1. 程式人生 > >三、Sketchup用ruby進行二次開發--實體類和構件圖類

三、Sketchup用ruby進行二次開發--實體類和構件圖類

    實體類是所有可畫圖形的子類,如下圖所示。實體類的主要子類是構件圖類,構件圖類是我們今後重點學習的類,包括Image、Text、Edge、Face、Group、Component

Definition和Component Instance。下面對這兩個類做簡要說明。

    1、實體類(Entity)

如上圖所示,實體類位於繼承關係的頂部,他包含的方法可以被他的所有子類所繼承,其中一些方法提供了實體的基礎資訊,如:

•entityID——返回識別一個實體的唯一ID。

•typename——定義實體的類別(邊,面等)。

•valid?/deleted?——定義這個實體是否能夠被訪問。

•model——返回設計的模型物件。

test_line = Sketchup.active_model.entities.add_line [0,0,0], [1,1,1]
-->  #<Sketchup::Edge:0x767be50>
test_line.typename
--> Edge
test_line.entityID
--> 1895
   2、構件圖類(The Drawingelement Class)

構件圖類是所有Edge, Face, Group, Image, Text,Component Definition和 Component Instance類的父類。它包含的一些方法用於如何把元素圖形在Sketchup中顯示出來,並設定一些元素的屬性資訊,例如陰影、組成材質等。

構件圖類提供的一個最有用的方法叫bounds,這個方法返回一個BoundingBox物件。它的用法如下所示。

new_line = Sketchup.active_model.entities.add_line [0,0,0], [2,2,5]
<pre name="code" class="html">--><span style="font-family: Arial, Helvetica, sans-serif;"> #<Sketchup::Edge:0x767ab18></span>
box = new_line.bounds
--> <span style="font-family: Arial, Helvetica, sans-serif;">#<Geom::BoundingBox:0x76784d8></span>
<span style="font-family: Arial, Helvetica, sans-serif;"></span><pre name="code" class="csharp">box.center
<pre name="code" class="html">--><span style="font-family: Arial, Helvetica, sans-serif;"> Point3d(1, 1, 2.5)</span>
box.diagonal
--><span style="font-family: Arial, Helvetica, sans-serif;"> 5.74456264653803</span>
2.1邊類(Edge)

對於眾多的構件圖類,最容易理解是的邊類(Edge),兩點成線,這就是邊。下面的語句是新增一條起點為(5,0,0),止點為(10,0,0)的邊。

Sketchup.active_model.entities.add_line [5, 0, 0], [10, 0, 0]

在Sketchup中,邊的端點用Vertex物件來表示,邊類的一些方法就是用來處理端點的:

• vertices ——返回邊的兩個節點物件( Vertex )• start/end ——返回邊的起點或止點物件• other_vertex —— 用邊的一個節點得到邊的另一個端點• used_by? ——表示一個節點是否在邊上

下面再說說邊類另外兩個方法length和split,一個用於得到邊的長度,另一個用於分割邊,用法如下:

line = Sketchup.active_model.entities.add_line [0, 0, 0], [6, 3, 0]
line.length
<pre name="code" class="html">--><span style="font-family: Arial, Helvetica, sans-serif;"> 6.70820393249937</span>
new_line = line.split [4, 2, 0]line.length
--><span style="font-family: Arial, Helvetica, sans-serif;"> 4.47213595499958</span>
line.start.position
--><span style="font-family: Arial, Helvetica, sans-serif;"> Point3d(0, 0, 0)</span>
line.end.position
--><span style="font-family: Arial, Helvetica, sans-serif;"> Point3d(4, 2, 0)</span>
new_line.length
--><span style="font-family: Arial, Helvetica, sans-serif;"> 2.23606797749979</span>
<span style="font-family: Arial, Helvetica, sans-serif;"></span><pre name="code" class="ruby">new_line.start.position
--><span style="font-family: Arial, Helvetica, sans-serif;"> Point3d(4, 2, 0)</span>
new_line.end.position
--><span style="font-family: Arial, Helvetica, sans-serif;"> Point3d(6, 3, 0)</span>