可視エッジは、通常 3ds Max では表示されない隠線のことです。この問題は、Revit モデルで特に発生しやすく、Revit から書き出されるすべてが三角形化されることが原因です。これによって、3ds Max で通常は非表示のエッジが表示されることになります。
可視エッジが見えてしまうのは、たとえば、3ds Max では壁の 4 辺である 4 つのエッジだけが表示されるべき壁が Revit のシーンにあるような場合です。代わりに、3ds Max では両方のコーナーの頂点を接続する中間に三角形が表示されます。この中間の三角形は、通常は非表示です。
このスクリプトを使用すると、読み込まれたモデルの不要なエッジをすべて非表示にすることができます。特に FBX を使って 3ds Max に読み込まれた Revit 2010 以前のモデルなどで有効です。次のスクリプトは、すべてのエッジを読み込んで、隣接するエッジの隣にあるかどうかを評価して非表示にできるエッジを決定します。不要なエッジを非表示にすると、モデルは見やすくなります。
このスクリプトを使用するには
このスクリプトを保存して、オブジェクトを選択した状態で、3ds Max のビューポートに .ms ファイルにドラッグ アンド ドロップすることもできます。
( -- do this in a local scope so I don't pollute the global scope. function setVisibilityEdges obj = ( local edgeSelSet = #() -- Go through all faces local numFaces = obj.numfaces for faceIndex = 1 to numFaces do ( -- And for every one of the 3 edges for edgeIndex = 1 to 3 do ( --collect the edge append edgeSelSet ( ((faceIndex-1)*3) + edgeIndex ) ) ) -- Select all visible edges meshop.autoedge obj edgeSelSet 5 type:#setclear ) --============================================== -- Start of the runtime script --============================================== local timestart = timestamp() -- turn off undo during this operation. with undo off ( local editMeshArray = #() for obj in Selection do ( if (classof obj == Editable_Mesh) do ( -- collect all the edit meshes first, because the -- user could have selected some helper objects too, which we -- don't want to process. append editMeshArray obj ) ) -- we don't need to hold the selection anymore, clear it out. clearselection() -- Array of object handles that have already had their edges hidden local allReadyProcessed = #() -- iterate through all selected edit meshes... for editMeshobj in editMeshArray do ( local found = (FindItem allReadyProcessed editMeshobj.handle) > 0 if (not found) then ( setVisibilityEdges editMeshobj append allReadyProcessed editMeshobj.handle -- Mark all the instances as processed too! InstanceMgr.GetInstances editMeshobj &repeatArray if (repeatArray.count > 0) then ( -- mark them as processed by adding their handle to the array for repeat in repeatArray do ( append allReadyProcessed repeat.handle ) ) ) ) ) redrawviews() local timeend = timestamp() format "Total time: % (seconds)\n" ((timeend - timestart)/1000.0))