ポリゴン 3dsMaxで重複ポリゴンを削除するメモ


表題通り

重複ポリゴンを削除する関数
ちょっとひらめいたんで
試したら大成功ww

スクリプトのくせに、ここにサスペンドとかをかければ
50000ポリゴンくらいあってもアッサリ終わる。

実際の中身はこれ

/**
 * 重複面の削除テスト
 */


/**
 * 小数点切り捨て
 */
function decimalPointTruncation num digit =
(
    digit = 0.1 * (pow 10 digit);
    return floor (num * digit) / digit;
)


/**
* 重複面の取得
*/
function getOverlappedFacies obj =
(
    local facies = #();
    local ovrFacies = #{};
    for i=1 to (polyop.getNumFaces obj) do (
        local cpos = polyop.getFaceCenter obj i;

        cpos.x = decimalPointTruncation(cpos.x, 2);
        cpos.y = decimalPointTruncation(cpos.y, 2);
        cpos.z = decimalPointTruncation(cpos.z, 2);
        local result = appendIfUnique facies cpos;
        if result == false then (
            append ovrFacies i;
        )
    )
    return ovrFacies;
)


/**
* 重複面削除
*/
function deleteOverlappedFacies obj =
(
    local delFacies = getOverlappedFacies(obj);
    if delFacies.isEmpty == false then (
        polyop.deleteFaces obj delFacies;
    )
)


getOverlappedFacies($);
deleteOverlappedFacies($);

GitHubにもあげておきました~

現在コードビューにバグがあるため、コード埋め込み部分を削除しています。

なかなか調子良さそう。

いやはやひらめいて良かったww
イチイチ座標だのナンダの調べてたら
クッソ遅いからねぇ~

これなら10万ポリゴンくらいあってもイケそうない気がする。
APIに頼らなくても工夫次第で何とかなる!ってことか。

Leave a comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください