是否有可能以编程方式了解红宝石中纹理的位置?

时间:2014-05-19 14:22:19

标签: ruby sketchup

我写了一些插图用于草图。我想知道是否有可能在ruby中以编程方式知道垂直或水平的纹理位置?

Ex:我使用Sketch-up进行木材加工,每当我将材料应用于模型时,我都应该处理谷物。所以我想知道木纹是水平的还是垂直的。选择面,然后单击纹理 - >位置,我们可以使水平纹理垂直,反之亦然。以编程方式应用材料后,我应该如何知道颗粒是水平的还是垂直的。

有什么解决方案吗?

2 个答案:

答案 0 :(得分:0)

当你说从一般方向暗示的横向和纵向时 - 你是否通过Ruby代码得到了一些如何?您是通过组/组件的界限来确定的吗?

您可以使用face.getUVHelper提取脸部纹理的位置。 (您也可以通过PolygonMesh进行此操作 - 但如果您对从中获得的所有其他数据感兴趣,那么这只会非常有用。)

一旦有了UV位置,您就可以使用它来与您想要的方向进行比较。 (这也会假设所有纹理都具有相同方向的纹理。)基于此,您可以使用face.position_texture重新定位纹理。

编辑:在UV Toolkit plugin中可以看到非常原生的版本。它是一个非常古老的插件而不是最好的例子 - 它强制限制面部必须是四边形并且只旋转90度。但它显示了如何获取UV数据并更改纹理的方向。 一个更好的通用版本是获得面的平面的四个点(不是共线)并获得每个点的UV数据。然后通过获得所需方向所需的旋转来转换UV数据并设置新的UV数据。

答案 1 :(得分:-1)

免责声明

我对3维度感到非常糟糕(所以请不要向适当的向量请求帮助)我从未使用sketchup。直到现在才开始......但是......

<强>信息

您必须选择Face对象。

model = Sketchup.active_model
entities = model.active_entities
face_entities = entities.find_all{|e| e.class == Sketchup::Face}
#=>[#<Sketchup::Face:0xea645d8>]
face_entities.each{|e| puts e.get_texture_projection(false)}
#=> output of each texture projection for the back side
#nil means that the projection is unchanged from it's initial position 

所以这就是你能做的事情

#true returns front, false returns the back texture as a Vector object
get_texture_projection(true || false)

#submit a vector [0,1,0] || nil , true sets front || false sets the back
#nil will reset the projection back to it's initial position
set_texture_projection([0,1,0],true || false)
#texture is now rotated 90 degrees on the Y axis 
set_texture_projection([1,0,0],true || false)
#texture is now rotated 90 degrees on the X axis

您还可以通过materialback_material

访问该资料
face.material.name
#=> [Wood_ Floor]
face.material.texture.filename
#=>Wood_Floor.jpg

希望这可以帮助你进行一些挖掘,但基于在Sketchup中使用内置控制台,它可以工作。

P.S。我喜欢这个程序有一个内置的Ruby API,非常棒。