모델에 가장자리가 표시되는 이유

보이는 가장자리는 일반적으로 3ds Max에 표시되지 않는 숨은선입니다. Revit에서 내보낸 모든 항목은 삼각 측량 처리되기 때문에 일반적으로 Revit 모델에서 문제가 발생합니다. 이로 인해 3ds Max에서 대체로 숨겨지는 가장자리가 표시됩니다.

주: Revit 2010 및 이전 버전에서 내보내는 경우 이 표시 가장자리 문제가 발생합니다. 이 문제는 Revit 2011에서 해결되었습니다. 따라서 이제 해당 버전에서는 숨겨지는 가장자리 정보와 함께 오브젝트를 내보냅니다.

표시 가장자리란?

예를 들어 Revit의 벽이 3ds Max에서만 벽의 4개 측면인 4개의 가장자리로 표시되어야 하는 경우 표시 가장자리를 인식할 수 있습니다. 대신 3ds Max에서는 두 모서리 정점을 연결하는 중간 삼각형을 표시합니다. 이 중간 삼각형은 대체로 숨겨집니다.

이 스크립트를 사용하여 가져온 모델(일반적으로 FBX를 사용하여 3ds Max에 로드된 Revit 2010 및 이전 버전 모델)에서 불필요한 가장자리를 숨깁니다. 다음 스크립트에서는 모든 가장자리를 읽고 인접한 가장자리 옆에 있는지 여부를 평가하여 숨길 수 있는 가장자리를 결정합니다. 이러한 불필요한 가장자리를 숨기면 모델을 보기가 훨씬 쉬워집니다.

이 스크립트를 사용하려면

  1. 장면에 있는 모든 오브젝트를 선택합니다.
  2. 3ds Max 주 메뉴에서 MAXScript 새 스크립트를 선택합니다.
  3. 아래 스크립트를 복사하여 대화상자에 붙여 넣습니다.
  4. Ctrl -E를 눌러 모두 평가를 수행하고 스크립트를 실행합니다.

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))