簡體   English   中英

Sketchup Ruby API對刪除的Face的引用

[英]Sketchup Ruby API reference to deleted Face

大家好

我想創建一個Sketchup工具來在多邊形中移動頂點(它與Sketchup中的移動工具相同,只不過它只是移動頂點而不是邊緣)。 該多邊形位於多邊形數組中。

我創建了一個“工具”類,當我選擇一個類的第一個頂點時,將其移動到另一個位置,並創建了適當的多邊形,將舊的多邊形替換為數組。 但是當我第二次選擇一個頂點時,ruby控制台顯示錯誤:引用已刪除的Face

這是我的課。 我已經在該函數中實現了此工具:onMouseMove,onLButtonDown,draw。

 class MoveVertexPolygon # an array of polygon def gridview @gridview end def gridview=(g) @gridview=g end def initialize @polygon = nil @bSelected = false @arr_vertex = [] @drawn = false @pos= -1 end def onLButtonDown(flags, x, y, view) #if user don't click any vertex before. if(@bSelected == false) ip = view.inputpoint x,y selected_x = ip.position.x.to_f selected_y = ip.position.y.to_f pt = Geom::Point3d.new(selected_x, selected_y, 0) #get appropriate polygon position in array of polygon @pos = @gridview.getIndexByCoordinate(selected_x,selected_y) #reset array of vertex @arr_vertex.clear #get polygon with given position @polygon = @gridview.array_element[@res].polygon #select a vertex if(@polygon != nil && @polygon.valid? && @polygon.is_a? Sketchup::Face) type = @polygon.classify_point(pt) if(type == Sketchup::Face::PointOnVertex) i = 0 while( i < @polygon.edges.length) @arr_vertex.push(@polygon.edges[i].vertices[0].position) if(pt == @polygon.edges[i].vertices[0].position) @selectedVertexIndex = i @bSelected = true end i = i + 1 end; end end #if user selected vertex, move it to another position else @bSelected = false @drawn = false @gridview.array_element[@res].polygon = @polygon end end def onMouseMove(flags, x, y, view) #if user select a vertex, then let's user choose a position of this vertex, display a temporary #polygon if(@bSelected) @ip = view.inputpoint x,y view.invalidate end end def draw(view) if(@drawn == false) entities = view.model.entities temp_x = @ip.position.x.to_f temp_y = @ip.position.y.to_f pt = Geom::Point3d.new(temp_x, temp_y, 0) #delete all edges and face of @polygon i=0 temp_array_edges = [] while(i < @polygon.edges.length) temp_array_edges.push(@polygon.edges[i]) i = i + 1 end; len = temp_array_edges.length i=0 while(i < len) entities.erase_entities temp_array_edges[i] i = i + 1 end; #draw polygon again @polygon = nil @arr_vertex[@selectedVertexIndex] = pt @polygon = entities.add_face @arr_vertex end end 

錯誤說@polygon是Deleted Face。

謝謝你的幫助

無需不斷擦除和重新創建面部,只需將頂點轉換為新位置即可。 entities.transform_by_vectors將允許您執行此操作。 http://www.sketchup.com/intl/en/developer/docs/ourdoc/entities.php#transform_by_vectors

如果要在使用工具時臨時顯示任何內容,請使用view.draw繪制到視口。

除了在draw事件中繪制到視口外,您實際上應該避免執行任何其他操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM