// Lot STM1 (STM1-SPEC-12, G4-b ; 1.2.1, STM1-DIAG-02) : table de pose des maisons d'une ville (ULPCityHouses), sans interface. // // Pour chaque batiment de l'UStreetMap (au moins 3 points) : centre (boite, comme GI.FindCenterOfPolygon), lacet de l'arete // la plus longue, longueur et largeur de la boite orientee sur ce lacet, hauteur (building:levels x hauteur d'etage, sinon // Height en m, sinon etages par defaut), variante (choix deterministe par le centre). Batiments exclus : centres du masque // d'eau (/Water/_Mask) et des monuments (/Landmarks/), s'ils existent. // Ecrit /Houses/ ; jamais d'ecrasement ; -DryRun : rapport seul. // // 1.2.1 : -Osm= -Origin=, lit les balises OSM de chaque batiment (voie projetee comme l'importeur, // associee par son centre de boite a 50 cm pres). Exclus : location=underground, layer < 0, tunnel=yes, // building=roof, emprise sous -MinAreaM2 (20). Etages : building:levels reels (bornes de 1 a 15), sinon // height / 3 m, sinon -DefaultLevels ; petits types (kiosk, shed, toilets, hut, cabin, garage, garages, carport) et emprise // sous -SmallAreaM2 (30) sans etages : 1 etage. (L'importeur tire au hasard 3 a 12 etages quand la balise manque : sans -Osm, // ces etages-la sont pris tels quels.) // // -Layout=Haussmann : variantes dans l'ordre Etroit;Large;Angle_Coupe;Angle_Coupole;Commerces;Porte_Cochere[;Petit]. // - facade tournee vers la voie la plus proche (cotes de la boite orientee, routes de l'UStreetMap a -StreetCm pres) ; // - batiment d'angle (deux cotes voisins a moins de -CornerStreetCm d'une voie, chacun d'au plus -CornerMaxCm) : une variante // d'angle, coin coupe au carrefour ; // - sinon decoupe en modules de -ModuleCm le long de la facade et -DepthModuleCm en profondeur (centres hors du polygone // ecartes) ; Etroit sous 10 m de facade, sinon Large, Porte_Cochere ou Commerces (rang sur rue seulement) ; // - hauteur = hauteur du maillage x etages / etages du maillage (-VariantLevels, 5,6,6,6,5,5) ; // - petits batiments (petits types, emprise sous -PetitMaxAreaM2 (100), ou pavillon sans etages OSM dont le centre est dans un // parc de l'UStreetMap, sous -ParkPetitMaxAreaM2 (1000), alors a 1 etage) : variante Petit si donnee (hauteur = etages x // -LevelHeightCm). 1.2.2 : un grand batiment bas reste un immeuble a son nombre d'etages. 1.3.0 : Petit plafonne a 1 etage ; // petite emprise a 3 etages connus ou plus : un seul module Etroit, a ses etages. 1.3.4 : Petit pour les petits types // seulement ; autres emprises sous -TinyMaskM2 (30) masquees ; sous -PetitMaxAreaM2 (100), un module Etroit a leurs etages // (2 si moins de 3 connus ou inconnus ; 1 pour un pavillon de parc). // -RealShops (1.3.0) : Commerces sur le rang sur rue des batiments dont l'amenite de l'UStreetMap est un commerce ou de la // restauration (UStreetMap enrichi par LPEnrichCityBuildings) ; plus aucun Commerces tire au hasard. // -Trees=;... (1.4.3, STM1-SPEC-19 A1, avec -Osm) : arbres d'alignement en variantes ajoutees apres celles des maisons, // sur l'axe des trottoirs OSM le long des voies nommees Boulevard, Avenue, Quai, Cours, Allee (a -TreeNearRoadM, 15 m), tous // les -TreePitchM (10 m) ; ecartes sur chaussee, batiment ou pierre ; hauteur -TreeHeightM=min,max (9,13), proportions gardees. // -MeshFront=<+X|-X|+Y|-Y> : facade du maillage ; -MeshCorner=<+X|-X|+Y|-Y> : cote voisin du coin coupe (variantes d'angle). // // 1.6.0 (STM1-SPEC-21 § 3 bis, E1) : -Churches : eglises et chapelles (church, chapel, cathedral, basilica, culte chretien) en // une entree d'un modele generique (allonge ou trapu selon le rapport de la boite orientee), plan etire sur l'emprise. // 1.6.1 (STM1-DIAG-07 b) : plusieurs modeles allonges alternes (le dernier de -Churches est le trapu) ; -ChurchStretch borne // l'etirement en longueur (centre garde) ; -ChurchMaxRatio laisse en immeubles les emprises trop longues. // 1.7.0 (STM1-SPEC-21 § 3) : -TallBar, -TallTower, -TallOffice (@;...) : immeubles de -TallFromLevels (10) niveaux // reels ou plus en une entree d'un modele de leur famille (Bureau, Tour a partir de -TallTowerLevels, Barre), au modele de // niveaux les plus proches, plan etire sur la boite orientee, hauteur reelle bornee par -TallMaxLevels. // // Usage : -run=LPBuildCityHouses -City= -MapRoot=/StreetMap> // -Variants=;;... [-KeepSkyscrapers] [-DefaultLevels=6] [-LevelHeightCm=300] [-MinSideCm=300] // [-Osm= -Origin=, [-MinAreaM2=20] [-SmallAreaM2=30]] // [-Layout=Haussmann -MeshFront=-Y -MeshCorner=+X [-VariantLevels=5,6,6,6,5,5] [-ModuleCm=1300] [-DepthModuleCm=1500] // [-StreetCm=2500] [-CornerStreetCm=1200] [-CornerMaxCm=2500] [-PetitMaxAreaM2=100] [-ParkPetitMaxAreaM2=1000]] // [-RealShops] [-Trees=;... [-TreePitchM=10] [-TreeHeightM=9,13] [-TreeNearRoadM=15]] // [-Churches=;...; [-ChurchRatio=1.8] [-ChurchHeightM=10,60] [-ChurchStretch=1.3] [-ChurchMaxRatio=4]] // [-TallBar=@;...] [-TallTower=...] [-TallOffice=...] [-TallFromLevels=10] [-TallTowerLevels=15] [-TallMaxLevels=40] // [-DryRun] [-Report=] #pragma once #include "CoreMinimal.h" #include "Commandlets/Commandlet.h" #include "LPBuildCityHousesCommandlet.generated.h" UCLASS() class ULPBuildCityHousesCommandlet : public UCommandlet { GENERATED_BODY() public: ULPBuildCityHousesCommandlet(); virtual int32 Main(const FString& Params) override; };