Warum werden auf meinen Modellen Kanten sichtbar?

Sichtbare Kanten sind verdeckte Linien, die in 3ds Max normalerweise nicht sichtbar sind. Das Problem tritt in der Regel bei Revit-Modellen auf, da für alle aus Revit exportierten Objekte eine Dreieckseinteilung vorgenommen wird. Das führt dazu, dass Kanten, die 3ds Max normalerweise ausblenden würde, sichtbar werden.

Anmerkung: Dieses Problem mit sichtbaren Kanten tritt beim Exportieren aus den Versionen Revit 2010 und früher auf. Es wurde in Revit 2011 behoben. Ab dieser Version werden Objekte mit Informationen zu ausgeblendeten Kanten exportiert.

Was sind sichtbare Kanten?

Eine sichtbare Kante können Sie beispielsweise dann erkennen, wenn in Revit eine Mauer vorhanden ist, die in 3ds Max nur mit vier Kanten dargestellt werden sollte, die die vier Seiten der Mauer bilden. Stattdessen zeigt 3ds Max das mittlere Dreieck an, das beide Scheitelpunkten der Ecken miteinander verbindet. Dieses mittlere Dreieck ist normalerweise ausgeblendet.

Mit diesem Skript blenden Sie nicht gewünschte Kanten aus importierten Modellen aus. Dabei handelt es sich normalerweise um Modelle aus den Versionen Revit 2010 und früher, die mit FBX in 3ds Max geladen wurden. Das Skript liest alle Kanten und ermittelt diejenigen, die ausgeblendet werden können, indem es auswertet, ob sie sich neben angrenzenden Kanten befinden. Wenn diese unerwünschten Kanten ausgeblendet werden, ist das Modell viel einfacher visuell zu erfassen.

So verwenden Sie dieses Skript

  1. Wählen Sie alle Objekte in der Szene aus.
  2. Wählen Sie im 3ds Max-Hauptmenü MAXScript Neues Skript aus.
  3. Kopieren Sie das nachfolgende Skript, und fügen Sie es in das Dialogfeld ein.
  4. Drücken Sie STRG-E, um alle auszuwerten und das Skript auszuführen.

Sie können dieses Skript auch in 3ds Max speichern und die .ms-Datei per Drag & Drop im Ansichtsfenster ablegen, während die Objekte ausgewählt werden.

Anmerkung: Dieses Skript funktioniert nur für editierbare Netze und ignoriert editierbare Polygone, Patches oder andere Elemente.
(
	-- 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))