2014-10-21 3 views
1

누군가 나에게 최근에 그쪽에 새겨진 맞춤 이미지가있는 팔찌를 인쇄 할 수 있는지 물었습니다.실린더 주위에 이미지 감싸기

저에게 문제는 간단합니다. 나는 사람이 보낸 벡터화 된 이미지의 포인트를 표현하는 2 차원 데카르트 시스템 (x, y)을 가지고 있습니다. 나는 r을 일정한 3 차원 원통형 시스템 (theta, r, z ')으로 취급하고 싶다. 마지막으로,이 3d 원통형 시스템을 일반적인 방식으로 3d 데카르트 시스템 (x ', y', z ')으로 변환하고 싶습니다.

그래서 :

z' = y 
y' = r cos(x) 
x' = r sin(x) 

문제는 내가 OpenSCAD이를 표현하는 방법을 모르는 것입니다. multmatrix()를 사용하는 행렬 변환 옵션이 있지만 선형 변환 만 허용합니다. 즉, 적어도 지식에 대해서는 cos (x)와 같은 것을 표현할 수 없습니다.

내가 원하는 중 하나입니다

  • 기존 모듈/많은 GLSL에서 버텍스 쉐이더와 같은 당 정점 변환을 수행하는이 변환, 또는

  • 일반적인 방법을 표현하는 해킹

적어도 OpenSet에서 사용할 수없는 것들을 확인할 수 있습니까?

답변

0

surface()을 사용할 수 있습니다 (http://en.wikibooks.org/wiki/OpenSCAD_User_Manual/The_OpenSCAD_Language#Surface 참조). 외부 스크립트에서 하이트 맵을 계산하고 값을 파일에 씁니다. 'surface.dat'. 결과 서페이스를 평행 이동하고 회전하여 difference()에서 사용할 수 있습니다.

는이 코드 및 문서에서 'surface.dat'와 그것을 시도

difference() { 
translate([0,0,5])cube([10,10,10], center =true); 
rotate([0,0,90])surface(file = "surface.dat", center = true, convexity = 5);} 

편집 2014년 10월 28일 : 원주에 픽셀로 픽셀을 배치 할 당신이 매트릭스에 pixeldata를 사용할 수있는 또 다른 방법으로 팔찌의 for 반복과 행렬 반복. 행렬의 벡터는 조각 (depth)의 깊이를 나타내는 차원으로 픽셀 (x), 픽셀 (y) 및 회색 값/255를 포함합니다. 모양의 수를 줄이려면 한 열의 픽셀을 풀링하여이 열의 깊이 프로필을 나타내는 다각형을 작성하고 선형으로 밀어 내십시오. 이 경우 벡터는 픽셀 (x)와 다각형의 포인트 매트릭스를 포함합니다. 나는 체의 알려진 그래픽으로 그것을 성공적으로 시도했다. 행렬을 생성하려면 python3.4, PyQt5 및 Qt.QtGui.QImage를 사용하십시오. 기본적으로 openscad는 2000 요소의 렌더링을 끕니다. matrix_p.scad 설정

include <./matrix_p.scad>; 
difference() { 
    translate([-b,0,0]) rotate([0,90,0]) difference() { 
     cylinder(h = hb, r = rb, center = false); 
     translate([0,0,-0.5]) cylinder(h = hb+1, r = rb-tb, center = false); 
    } 
    for (val = m) 
    rotate([-ap*val[0],0,0]) translate([0,-rb-0.1,-ps/2]) linear_extrude(height = ps) polygon(points = val[1]); 
} 

매개 변수 :

// userinput 
rb = 50;     //radius bracelet 
tb = 5;      //thickness of b. 
hb = 80;     //height of b. 
b = 10;      //borderwidth beside engraving 
// input from Qt.QtGui.QImage 
iw = 590;     //imagewidth in pixel 
ih = 726;     //height in pixel 
ps = (hb-2*b)/ih;   //scaling of pixel to fill the free place 
ap = (ps*180)/(PI*rb);  //angle per pixel 

Download all scripts

+0

내가 할 수있는 당신은

/편집/환경 설정에서 필요한 번호로 openscad 스크립트를 고급

을 설정할 수 있습니다 이것이 해결책으로 작용하는 방법을 알지 못합니다. 나는 surface()가 이미지에 사용될 수 있다는 것을 알고있다. 그렇지 않으면 나는 그 질문을했을 것이다. 문제는 이미지를 3D 모양으로 변환하는 방법이 아니라 팔찌의 측면에 맞게 3D 모양을 구부리는 방법입니다. – 16807

+0

이것이 마음에 드는 방법입니다. 팔찌를 y 축과 평행하게 돌리고 x-y 평면상의 모든 점에 대해 팔찌 둘레의 z 값을 계산하십시오.surface.dat에서이 값을 사용하면 팔찌의 밑 부분에 해당하는 surface()를 얻을 수 있습니다. 조각의 깊이로 x와 z를 조절할 수 있습니다. surface()에서와 같이 모든 점에 고유 한 z 만 가능합니다. 아마도 여러 섹터로 나누어야합니다. –

관련 문제