Published: May 21, 2018 by Maarten Vroegindeweij
Google Earth luchtfoto naar Revit, Lumion en Revit Live
Een aanvulling op de vorige blog.
- Download een luchtfoto via Google Earth.
- Gebruik de Revit API om deze foto als rendermateriaal in te stellen.
- Download een AHN3-bestand. Gebruik poisson surface reconstruction, dynamo naar directshape en exporteer naar Lumion en Revit Live.
1. Downloaden van een luchtfoto in Google Earth.
Stel je locatie in via ‘Location’.
Als je de GIS2BIM-package versie 0.6 geïnstalleerd hebt kun je in de map ‘1.3\packages\GIS2BIM\extra' het bestand ‘TMS Example Google.dyn’ openen. Of download dit bestand via github.
De node GetRevitSiteLocation leest de coördinaten uit de Revit Site Location. De node CreateBoundingBoxLATLONG berekend een linker onderhoek en rechterbovenhoek in geodetische coördinaten in het WGS-84coördinatensysteem.
Google Earth gebruikt een protocol wat bijna hetzelfde is als het TMS-protocol (Tile Map Service). De node TMSGetTileNumbersFromBboxLATLON berekend de nummers van de tegels. De luchtfoto is namelijk opgeknipt in tegels. Voor meer informatie over deze verdeling zie http://www.maptiler.org/google-maps-coordinates-tile-bounds-projection/
De node TMSWebServices maakt op basis van de tilenummers alle directe url-links van alle tiles. Bijvoorbeeld deze.
De node TMS_WMTS_WebrequestAndCombineImages gaat alle images downloaden en samenvoegen tot 1 afbeelding.
Vervolgens kun je de afbeelding opslaan er vervolgens importeren in een view in Revit. Of als materiaal gaan gebruiken.
2. Revit API 2019 gebruiken om luchtfoto als materiaal in te stellen.
Er zijn diverse zaken in Revit API 2018.1/2019 gewijzigd waardoor ook materiaaleigenschappen en asseteigenschappen aan te maken en te wijzigen zijn. Voor meer informatie over dit onderwerp zie onder andere:
- https://thebuildingcoder.typepad.com/blog/2017/11/modifying-material-visual-appearance.html#3
- https://thebuildingcoder.typepad.com/files/sd124625_visual_appearance_of_materials_api_boris_shafiro_slides.pdf
Dit geeft ons de mogelijkheid om de luchtfoto op schaal aan het materiaal te hangen.
Veel informatie is te vinden op www.revitapidocs.com. Dit deel valt onder Autodesk.Revit.DB.Visual Namespace.
Ondanks het feit dat ik een beginner ben in programmeren is het me toch gelukt om een stukje Python code te schrijven waar de eigenschappen van een generic asset bij een materiaal in te stellen zijn.
import clr
clr.AddReference(“RevitNodes”)
import Revit
clr.ImportExtensions(Revit.Elements)
clr.AddReference(“RevitAPI”)
import Autodesk
from Autodesk.Revit.DB import *
from Autodesk.Revit.DB.Visual import *
clr.AddReference(“RevitServices”)
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument
import sys
pyt_path = ‘C:\Program Files (x86)\IronPython 2.7\Lib’
sys.path.append(pyt_path)
mat1= IN[0]
var1 = IN[1]
offsetX1 = IN[2]
offsetY1 = IN[3]
scaleX1 = IN[4]
scaleY1 = IN[5]
lockScale = IN[6]
angle = IN[7]
offsetX = offsetX1/25.4
offsetY = offsetY1/25.4
scaleX = scaleX1/25.4
scaleY = scaleY1/25.4
mat = UnwrapElement(mat1)
doc = DocumentManager.Instance.CurrentDBDocument
AppearanceAsset = doc.GetElement(mat.AppearanceAssetId)
RenderingAsset = AppearanceAsset.GetRenderingAsset()
AppearanceAssetid =AppearanceAsset.Id
TransactionManager.Instance.EnsureInTransaction(doc)
editScope = AppearanceAssetEditScope(doc)
AssetEditable = editScope.Start(AppearanceAssetid)
BitMapLocation = AssetEditable[UnifiedBitmap.UnifiedbitmapBitmap] #AssetProperty String Object
BitMapLocation.Value = var1
BitmapOffsetX = AssetEditable[UnifiedBitmap.TextureRealWorldOffsetX]
BitmapOffsetX.Value = offsetX
BitmapOffsetY = AssetEditable[UnifiedBitmap.TextureRealWorldOffsetY]
BitmapOffsetY.Value = offsetY
BitmapscaleX = AssetEditable[UnifiedBitmap.TextureRealWorldScaleX]
BitmapscaleX.Value = scaleX
BitmapScaleY = AssetEditable[UnifiedBitmap.TextureRealWorldScaleY]
BitmapScaleY.Value = scaleY
Scalelock = AssetEditable[UnifiedBitmap.TextureScaleLock]
Scalelock.Value = lockScale
TextureWAngle = AssetEditable[UnifiedBitmap.TextureWAngle]
TextureWAngle.Value = angle
editScope.Commit(IFailuresPreprocessor)
TransactionManager.Instance.TransactionTaskDone()
Uiteraard zou de code veel beter moeten met if/exceptions enzovoorts. Maar ja, je moet ergens beginnen.
3. AHN3 poisson surface reconstruction, directshape en exporteren naar Lumion en Revit Live.
De hierboven genoemde workaround geeft tal van mogelijkheden.
a) In Revit de luchtfoto automatisch als materiaal in laten stellen. Hier zitten nog wel wat moeilijkheden aan vast. Bij gebruik van een toposurface is een materiaal gespiegeld. Dit is een bug. Je kunt dit oplossen door de foto te spiegelen.
b) AHN3 downloaden, croppen en importeren in cloudcompare.(zie vorige blog)
Vervolgens meshen en importeren via dynamo als directshape.
Na veel exporteren was het volgende werkbaar voor mij:
Cloudcompare:
Normals berekenen met Triangulation
Langzamerhand begin ik enigzins gevoel bij bovenstaande opties te krijgen. Als je AHN3 gebruikt kun je weinig sampels per node gebruiken omdat er veel data is. Bij grovere pointclouds met meer vervuiling kun je meer samples per node kiezen. Kies voor boundary ‘Free’ zodat er geen ‘bubble’ onder de pointcloud gaat onstaan en je het material niet meer goed kunt instellen.
Octree depth 11 geeft fantastische resultaten!!(dit is een duingebied, let op de paden) Alleen is dit te zwaar om in Dynamo te importeren.
Ter info mijn ervaring qua bestandsgrootten bij bovenstaand project.
- AHN3-bestand pointcloud: 1 GB
- Gecropt naar 500x500 meter(laz): 17 mb.
- Poisson Surface Reconstruction in CloudCompare met Octree 9 en opslaan als .obj: 50 MB.
- Poisson Surface Reconstruction in CloudCompare met Octree 10 en opslaan als .obj: 250 MB.
- Importeren in Dynamo als Mesh en vervolgens reduceren tot ca 200.000-500.000 triangles. Daarna loopt Dynamo vast op mijn laptop(Dell XPS 15, 16GB, i7-7700HQ, GTX 1050)
De workflow hiervoor is vrij eenvoudig. Verder is het zo dat je boolean operaties stukken uit de mesh kunt knippen.
Daarna komt de vuurproef. Krijg je een mesh met 400.000 triangles vanuit Revit(niet echt ontworpen voor gebruik van meshes) naar Lumion of Revit Live?
Jazeker dat lukt met fantastische resultaten!
Dus ook met de VR-bril op loop je door je model met de omgeving in 3D zonder dat je hier enig modelleerwerk voor hebt hoeven te doen.
3D DWF Als je het model als 3D DWF gaat exporteren klopt het renderpatroon niet meer.(90 graden rotatieverschil). Dit is wel jammer. DWF is een mooi uitwisselformaat met opdrachtgevers en aannemers.