|
広告
雑多なこと
OpenSCADのスクリプトをFreeCADへインポートできる.
- 表示モードを「OpenSCAD」にして「編集(Edit)」⇒「設定()」⇒「OpenSCAD」⇒「OpenSCADのインポート」で「ポリゴン最大面数」を0じゃない数にしておく
- じゃないと円とか曲線が多角形になってしまい後々面倒
- 一度設定すれば大丈夫
- 「ファイル(File)」⇒「開く(Open)」でOpenSCADのファイル(*.scad)を開く
- imoprt plyでエラーが出るときがあるので「python3-ply」などをインストールする
- 現時点ではいくつかの命令(offsetとか)に対応していないのでエラーが出ることがある
- 後はFreeCADで普通に操作する
表示関係
- 色の指定
- 背景色を変える(スキームの変更)
- 断面の色を変える
- 上述のスキームを変える
- difference()で引く側の色を変える。
プログラミング関係
- 角にアールがついたブロックを作るのに便利な関数
- 2015年3月バージョン以降は「offset+linear_extrude」を使うのが楽
testOffset(20,10,5,2);
module testOffset(x,y,z,r,center = false){
linear_extrude(height = z, center = center)
offset(r = r) {
square([x-2*r,y-2*r], center = true);
}
}
- hull()を使うといろいろできる
- minkowski
- 上の2つが2次元図形のみ対応しているが、minkowskiは3次元図形にも対応
- 3次元図形には便利だけど位置や大きさが変わってしまうので注意
- 計算に時間がみたいなので、$fnをあまり大きくしない方が良いらしい
- 以下例
rBox(20,10,10,2);
module rBox(x,y,z,r,center=false){
minkowski(){
cube(size = [x-2*r,y-2*r,z-r],$fn=res,center=center);
cylinder(r=r,h=r,$fn=res,center=center);
}
}
全ての角にRをつける(R面取り)
minkowski(){
cube([10,10,10],center=true);
translate([-5,-5,-5]) sphere(r = 1);
}
translate([20,20,0]){
minkowski(){
linear_extrude(height = 20, center = true, convexity = 10, scale=0.9) polygon([[-5,-5],[0,5],[5,-5]]);
translate([-5,-5,-10]) sphere(r = 1);
}
}
- 楕円柱
- 円柱をresizeで潰す
ellipseCylinder(10,20,5,res=200,center=true);
module ellipseCylinder(h,a,b,res=100,center=false){
resize([0,2*b,0])
cylinder(h = h, r = a,$fn=res,center=center);
}
- 回転楕円体、楕円体
- 球をscaleで引き伸ばす。楕円をrotate_extrudeで回転させるよりも速い
spheroid();
module spheroid(){
//resize([0,40,0]) //resizeではうまく行かなかった
scale([1,1,2])
sphere(r = 20);
}
- 元図形が残るミラー
- 2014年バージョンでは専用関数は無い。mirrorは元図形が残らない
- 有志が作ったモジュールがある
module copy_mirror(vec=[0,1,0])
{
children();
mirror(vec) children();
}
- 同様の手法でコピーもできる
copy([20,0,0])
cube([10,20,5], center = true);
module copy(vec=[0,0,0]){
children();
translate(vec) children();
}
ヘンテコな図形
- linear_extrudeは引き伸ばしながらねじることもでき、絞ることもできるのでファンのブレードみたいのも作れる
$fn=100;
linear_extrude(height = 20, center = true, twist = -30,scale=[0.1,0.1])
translate([5,0,0])
resize([0,2,0])
circle(d=15);
広告
|
|