polysections


在多處橫切一個管狀物會得到數個切面,這個模組做的是相反的動作,可以基於多個切面來建立一個管狀物。例如,如果有以下多個切面:

polysections

這個模組可以建立以下模型:

polysections

看來有點像是依路徑拉伸?沒錯,這個模組可以進行這個動作,不過,更有彈性。

你也可以將之視為 polyline3d 的替代方案。如果只有座標點的話,使用 polyline3dhull_polyline3d 是比較簡單的方式,如果能有路徑上的多個切面,可以使用 polysections 來達到更好的效果。

使用這個模組之時,必須用座標點來表示每個切面。每個切面必須是逆時針方式指定座標點。例如:

polysections

如果切面是中空的,可以將 triangles 參數設為 "HOLLOW",而座 標索引順序設為如下:

polysections

你也可以自行切割其中的三角形,例如,可以將上面的形狀切割為以下的三角形:

polysections

此時可以指定底下的索引給 triangles

[
    [0, 3, 1],
    [1, 3, 4],
    [1, 4, 2],
    [2, 4, 5],
    [2, 5, 0],
    [0, 5, 3]
]

對這個模組來說,定義三角形索引時順時針、反時針都可以。

參數

  • sections : 切面清單。每個切面使用座標點來定義,詳見底下範例。
  • triangles : "SOLID"(預設)、"HOLLOW" 或自定義索引。詳見底下範例。

範例

include <rotate_p.scad>;
include <polysections.scad>;

section1 = [
    [20, 0, 0],
    [18, 9, 0],
    [15, 10, 0],
    [10, 0, 0]
];

// 盤旋 section1
sections = [
    for(i = [0:55]) 
        [
            for(p = section1)
                let(pt = rotate_p(p, [90, 0, 10 * i]))
                [pt[0], pt[1] , pt[2] + i]
        ]
];

polysections(sections);

polysections

include <rotate_p.scad>;
include <polysections.scad>;

section1 = [
    // 外輪廓
    [20, 0, 0],
    [18, 9, 0],
    [15, 10, 0],
    [10, 0, 0],
    // 內輪廓
    [18, 2, 0],
    [17, 7, 0],
    [15, 7, 0],
    [12, 2, 0]
];

// 盤旋 section1
sections = [
    for(i = [0:55]) 
        [
            for(p = section1)
                let(pt = rotate_p(p, [90, 0, 10 * i]))
                [pt[0], pt[1] , pt[2] + i]
        ]
];

polysections(sections, "HOLLOW");

polysections

include <rotate_p.scad>;
include <polysections.scad>;

section1 = [
    // 外輪廓
    [30, 0, 0],
    [15, 10, 0],
    [10, 0, 0],
    // 內輪廓
    [26, 1, 0],
    [15, 8, 0],
    [12, 1, 0],        
];

// 盤旋 section1
sections = [
    for(i = [0:55]) 
        [
            for(p = section1)
                let(pt = rotate_p(p, [90, 0, 10 * i]))
                [pt[0], pt[1] , pt[2] + i]
        ]
];

polysections(
   sections = sections, 
   triangles = [
        [0, 3, 1],
        [1, 3, 4],
        [1, 4, 2],
        [2, 4, 5],
        [2, 5, 0],
        [0, 5, 3]
    ]
);

polysections