2014-05-19 2 views
1

스케치 업을위한 플러그인을 작성했습니다. Ruby에서 프로그래밍 방식으로 수직 또는 수평 인 텍스처 위치를 아는 것이 가능하다는 것을 알고 싶습니다.루비에서 텍스처의 위치를 ​​프로그래밍 방식으로 알 수 있습니까?

예 : 저는 목재 작업을 위해 스케치 업을 사용하고 있으며 모델에 재료를 적용 할 때마다 곡물을 처리해야합니다. 그래서 나는 나무 그레인이 수평 또는 수직에 있음을 알고 싶습니다. 면을 선택하고 Texture-> position을 클릭하면 수평 곡물을 수직 및 부제로 만들 수 있습니다. 프로그래밍 방식으로 재료를 적용한 후에 곡물이 수평 또는 수직임을 어떻게 알 수 있습니까?

해결책이 있습니까?

답변

-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.이 프로그램에는 Ruby API가 내장되어있어 정말 멋지 네요.

+0

텍스처의 투영 방향을 가져오고 설정하지만 위치는 설정하지 않습니다. – thomthom

+0

@thomthom 아래 표를 가져 주셔서 감사합니다. 진심으로 감사드립니다.그가 투영이 어떤 방향인지 알기를 원했기 때문에 내 대답은 잘못이 아니 었습니다. 그는 곡물의 방향을 알고 싶다고 말한 입장을 요구하지 않았습니다. 텍스처> 위치를 통해 설정할 수 있습니다. – engineersmnky

+0

그는 텍스처의 방향 (수직 또는 수평)을 물었다. 당신은 그 위치를 통해 그것을 얻습니다. 벡터 방향과 관련하여 UV 데이터가 얼굴에 어떻게 배향되어 있는지 파악합니다. 얼굴이 정상 [0,0,1]이고 텍스처 투영을 수직 [1,0,0]으로 설정 한 경우 얼굴 전체에 걸친 약간의 픽셀이 균일하게 흐려집니다 . 3d 텍스처로는 작동했지만 2D로는 작동하지 않았습니다. – thomthom

0

일반적인 방향에서 의미하는 가로 및 세로를 말할 때 - 루비 코드를 통해 어떻게 할 수 있습니까? 그룹/구성 요소의 범위를 통해 결정합니까?

face.getUVHelper을 사용하면 얼굴의 텍스처 위치를 추출 할 수 있습니다. (PolygonMesh을 통해이 작업을 수행 할 수도 있습니다. 그러나 다른 모든 데이터에 관심이있는 경우에만 유용합니다.)

UV 위치가 있으면 원하는 방향과 비교할 수 있습니다. (이것은 또한 모든 텍스쳐가 같은 방향으로 그레인을 가지고 있다고 가정합니다.) 그런 다음에 기초하여 face.position_texture을 사용하여 텍스처의 위치를 ​​변경할 수 있습니다.

편집 : 내 기본 버전은 내 UV Toolkit plugin에서 볼 수 있습니다. 그것은 아주 오래된 플러그인이며 가장 좋은 예는 아닙니다. 얼굴이 쿼드 여야하며 90도 회전 만하는 제한을 적용합니다. 그러나 UV 데이터를 얻고 텍스처의 방향을 변경하는 방법을 보여줍니다. 더 일반적인 버전은면의 평면에서 4 점을 얻고 (colinear가 아닌) 각 점에 대한 UV 데이터를 얻는 것입니다. 그런 다음 원하는 방향을 얻고 새로운 UV 데이터를 설정하는 데 필요한 회전으로 UV 데이터를 변환합니다.

관련 문제