Removendo bordas visíveis de modelos importados do FBX

Utilizar esse script para ocultar todas as bordas indesejadas de modelos importados, normalmente modelos Revit carregados no 3ds Max usando o FBX.

O que são bordas visíveis?

As bordas visíveis são linhas ocultas que normalmente são invisíveis no 3ds Max. O problema geralmente ocorre com modelos do Revit porque tudo exportado do Revit é triangulado. Isso faz com que as bordas que o 3ds Max normalmente ocultaria se tornem visíveis.

Você pode reconhecer uma borda visível, por exemplo, se tiver uma parede no Revit que somente deve ser representada no 3ds Max com quatro bordas que são os quatro lados da parede. Em vez disso, o 3ds Max exibe o triângulo do meio que conecta os dois vértices de canto. Essa triângulo do meio normalmente é oculto.

O seguinte script lê todas as bordas e determina quais podem ser ocultas avaliando se elas estão perto de alguma borda vizinha. Ocultar essas bordas não desejadas torna muito mais fácil ver o modelo.

Para usar esse script:

  1. Selecione todos os objetos na cena.
  2. Selecione o MAXScript Novo Script no menu principal do 3ds Max.
  3. Copie e cole o script abaixo na caixa de diálogo.
  4. Pressione CTRL-E para Avaliar todas e execute o script.

Você também pode salvar esse script no 3ds Max e arrastar e soltar o arquivo .ms no viewport enquanto os objetos são selecionados.

Nota: Esse script funciona somente para editar malhas e ignora polígonos editáveis, correções ou outras entidades.
(
	-- 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))