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
내가 할 수있는 당신은
/편집/환경 설정에서 필요한 번호로 openscad 스크립트를 고급
을 설정할 수 있습니다 이것이 해결책으로 작용하는 방법을 알지 못합니다. 나는 surface()가 이미지에 사용될 수 있다는 것을 알고있다. 그렇지 않으면 나는 그 질문을했을 것이다. 문제는 이미지를 3D 모양으로 변환하는 방법이 아니라 팔찌의 측면에 맞게 3D 모양을 구부리는 방법입니다. – 16807이것이 마음에 드는 방법입니다. 팔찌를 y 축과 평행하게 돌리고 x-y 평면상의 모든 점에 대해 팔찌 둘레의 z 값을 계산하십시오.surface.dat에서이 값을 사용하면 팔찌의 밑 부분에 해당하는 surface()를 얻을 수 있습니다. 조각의 깊이로 x와 z를 조절할 수 있습니다. surface()에서와 같이 모든 점에 고유 한 z 만 가능합니다. 아마도 여러 섹터로 나누어야합니다. –