LifePlay-Revival/Source/LifePlayEditorTools/LPBuildCityHousesCommandlet.h
2026-10-22 21:10:39 +02:00

69 lines
5.5 KiB
C++

// 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 (<MapRoot>/Water/<Ville>_Mask) et des monuments (<MapRoot>/Landmarks/<Ville>), s'ils existent.
// Ecrit <MapRoot>/Houses/<Ville> ; jamais d'ecrasement ; -DryRun : rapport seul.
//
// 1.2.1 : -Osm=<f.osm.xml> -Origin=<lat>,<lon> 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=<objet>;... (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 (<objet>@<niveaux>;...) : 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=<Ville> -MapRoot=</Game/Heavy/StreetMap | /lpm_city_<v>/StreetMap>
// -Variants=<objet>;<objet>;... [-KeepSkyscrapers] [-DefaultLevels=6] [-LevelHeightCm=300] [-MinSideCm=300]
// [-Osm=<f.osm.xml> -Origin=<lat>,<lon> [-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=<objet>;... [-TreePitchM=10] [-TreeHeightM=9,13] [-TreeNearRoadM=15]]
// [-Churches=<allongee>;...;<trapue> [-ChurchRatio=1.8] [-ChurchHeightM=10,60] [-ChurchStretch=1.3] [-ChurchMaxRatio=4]]
// [-TallBar=<objet>@<n>;...] [-TallTower=...] [-TallOffice=...] [-TallFromLevels=10] [-TallTowerLevels=15] [-TallMaxLevels=40]
// [-DryRun] [-Report=<f.md>]
#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;
};