In de meest recente update van de belastingcombinatiegenerator, we hebben de interne werking van de module vereenvoudigd en de volgende functionaliteit toegevoegd:
- Het genereren van belastingcombinaties wordt gedefinieerd door één enkel .json-bestand (Schema) voor elke standaard.
- Belastingsgroepen en -combinaties kunnen worden gemaakt zonder dat u eerst belastingen hoeft toe te wijzen in de S3D-modelleringsruimte.
- Patronen, die zijn gebaseerd op de oude “Vouw windbelastingen uit” selectievakje, werk nu met alle belastingsgevallen.
Nomenclatuur
In de laatste versie van de belastingcombinatiegenerator, de naam van het belastinggeval die voor veel dingen werd gebruikt:
- Fungeren als een unieke ID.
- Maak onderscheid tussen belasting super geval en de obstructie onder het dakoppervlak, en vereisen altijd één waarde in elk (leidend tot bizarre zoals Dood: dood).
- Blijf leesbaar voor mensen, terwijl het toch klein genoeg blijft voor vervolgkeuzemenu's door woorden samen te trekken (Leven: Q-dist-dakvloer).
In de meest recente update, we hebben de namen van belastinggevallen onderverdeeld in symbolen, die compact zijn en worden gebruikt wanneer de ruimte beperkt is (bijvoorbeeld bij het benoemen van de belastingscombinaties: 1.25D1 + 1.5De + 1.5Ld + 0.5Sl + 0.5T), en etiketten, wat beschrijvend zal zijn (gebruikt bijvoorbeeld in vervolgkeuzelijsten). Beide symbolen en etiketten zal uniek moeten zijn binnen een bepaalde standaard. Wij zullen het ook toestaan belastingsgevallen dezelfde naam krijgen als de belasting super geval, meestal voor het standaardbelastingsgeval (het meest gebruikt). De twee hierboven gebruikte voorbeelden zouden op deze manier worden opgesplitst:
{"D": "Dood"}
{“Ldr”: "Live - Geconcentreerd, Daken, Vloer"}
De symbool moet minimaal uit één hoofdletter bestaan, die het supergeval definieert. De super geval is een nieuw concept, gebruikt om vergelijkbare belastinggevallen te groeperen die gewoonlijk samen optreden. De super geval label wordt gegeven aan het begin van het belastinggevallabel (vóór het streepje). In het bovenstaande voorbeeld (Eurocode) het belastingsgeval Ldr zou deel uitmaken van het L-supergeval (genaamd Live in het label), naast andere belastinggevallen zoals Ldd en Ldo. Achter de schermen, de super geval wordt voornamelijk gebruikt om de filterregels af te dwingen, dat wil zeggen om te bepalen welke schemarijen moeten worden behouden en welke moeten worden verwijderd.

Het eerste deel van het etiket (vóór het streepje) is de naam van de super geval. Het tweede deel is een beschrijving, gebruik komma's om categorieën van subcategorieën te scheiden. Het tweede deel is optioneel, maar slechts één belastinggeval kan de standaardwaarde aannemen super geval plek.
Standaardschemarijen
Elke standaard heeft een schema die alle mogelijke belastingscombinaties voor deze standaard volledig definieert. De Schema.json bestand is vrij eenvoudig, maar het kan behoorlijk lang worden, vooral op het gebied van standaarden (zoals Eurocode) waarvoor een groot aantal permutaties nodig is. Om een eenvoudig voorbeeld te nemen, neem de volgende voorbeeldvereiste.
1.2*D + 1.5*L + (0.5*S of 0,5*W of 0,5*T)
Om dit om te zetten in onze schema, we moeten het opsplitsen in elke mogelijke permutatie:
1.2*D + 1.5*L 1,2*D + 1.5*L + 0.5*S 1,2*D + 1.5*L + 0.5*W 1,2*D + 1.5*L + 0.5*T 1,2*D + 1.5*L + 0.5*S + 0.5*W 1,2*D + 1.5*L + 0.5*W + 0.5*T 1,2*D + 1.5*L + 0.5*T + 0.5*S 1,2*D + 1.5*L + 0.5*S + 0.5*W + 0.5*T
Zodra elke belastingscombinatie op deze manier wordt vermeld, u kunt het schema bouwen door deze stappen te volgen:
- Gebruik elke belastinggevalsleutel en coëfficiënt om een schemarijobject te maken.
- Geef elke rij een unieke ID (aangezien dit een object gaat worden). De conventie is om streepjes te gebruiken om verschillende elementen van de naam van elkaar te scheiden.
- Eén niveau hoger, groepeer de rijen in criteria (kracht, bruikbaarheid, toevallig, enz.)
Het eindresultaat zou er ongeveer zo uit moeten zien:
"rijen": {
"kracht":{
"A-1-u": {"D": 1.40},
"A-2a-u":{"D": 1.25, "L": 1.50, "Ls": 1.50},
"A-2b-u":{"D": 1.25, "L": 1.50, "Ls": 1.50, "S": 1.00},
"A-2c-u":{"D": 1.25, "S": 1.50, "W": 0.40},
"A-3a-u":{"D": 1.25, "S": 1.50}
}
}
Algoritme voor het genereren van laadcombinaties
Het algoritme doorloopt verschillende stappen om het uiteindelijke belastingcombinatieobject te genereren:
- De schema zoals hierboven gedefinieerd nodig is. Het wordt doorgegeven aan de functie voor het genereren van hoofdbelastingcombinaties.
- Er wordt een object gemaakt om het aantal te groeperen belastingsgevallen door patroon. Bijvoorbeeld, laten we een verzoek voor de onderstaande belastinggevallen bekijken:
2 Dood belastinggeval, met een samenvoegpatroon 4 Windbelastinggevallen, met een individueel patroon 1 Sneeuwbelastinggevallen, met een individueel patroon 2 Dode belastinggevallen, met een samenvoegpatroon
Het groeperen van de patronen door de obstructie onder het dakoppervlak zal het volgende object geven, die wordt doorgegeven aan de functie voor het genereren van hoofdbelastingcombinaties.
input_by_case =
{
"D": {"samenvoegen": [2, 2], "individueel": []},
"W": {"samenvoegen": [], "individueel": [4]},
"S": {"samenvoegen": [], "individueel": [1]}
}
- De laatste twee argumenten filteren objecten, waarmee gefilterd kan worden criteria of via schemasleutel.
- Zodra het alle vereiste argumenten heeft, de functie voor het genereren van hoofdbelastingcombinaties wordt aangeroepen. Deze functie doorloopt meerdere geneste lussen om elke vereiste combinatie te genereren, die in de volgende punten worden toegelicht, en geïllustreerd in de volgende figuur.
- Op het hoogste niveau, het loopt door de schemarijen. Elke rij wordt bij deze stap gecontroleerd om te zien of deze moet worden behouden of overgeslagen, met behulp van de filterobjecten en specifieke logica die in de onderstaande sectie worden beschreven.
- Genest in de eerste lus is een tweede, die door elke gevraagde lus loopt de obstructie onder het dakoppervlak in de schemarij. Indien gevraagd de obstructie onder het dakoppervlak bestaat ook de schemarij (verzoeken worden samengevat in het input_by_case object), dan gaan we naar het volgende niveau.
- Genest in de tweede lus is een derde, die door elk mogelijk loopt patroon om te zien of er belastingsgroepen zijn die daarin kunnen worden gegenereerd, en voert de functie uit om ze een naam te geven en te genereren wanneer ze dat doen.
- Zodra alle belastinggevallen in de schemarij zijn gegenereerd en benoemd, ze worden opnieuw gecombineerd (naast hun coëfficiënten) in één of meerdere belastingscombinaties.

- Dit proces wordt herhaald voor elke rij van het schema, alle gegenereerde belastingscombinaties naar het uiteindelijke belastingscombinatieobject duwen.
Het is niets waard dat alle logica met betrekking tot patronen plaatsvindt binnen een enkele schemarij. Dit weten is belangrijk om het gedrag van patronen te begrijpen. Het samenvoegpatroon, bijvoorbeeld, staat niets anders toe dan het belastinggeval waaraan het is toegewezen. Dit betekent dat u dat niet kunt:
- Voeg verschillende belastinggevallen samen, zoals het proberen om D1- en L1-belastingsgroepen samen te voegen.
- Voeg identieke belastinggevallen op verschillende rijen van de invoertabel samen. Bijvoorbeeld, in het voorbeeld gegeven in punt #2 bovenstaande, ons wordt gevraagd te genereren 2 dode lasten met behulp van het samenvoegpatroon op twee afzonderlijke rijen. De eindresultaatcombinaties zouden er dan ongeveer zo uit kunnen zien:
1.2*D1 + 1.2*D2 + 1.5*L 1.2*D3 + 1.2*D4 + 1.5*L 1.2*D1 + 1.2*D2 + 1.5*L + 0.5*S 1.2*D3 + 1.2*D4 + 1.5*L + 0.5*S 1.2*D1 + 1.2*D2 + 1.5*L + 0.5*W 1.2*D3 + 1.2*D4 + 1.5*L + 0.5*T
Automatisch filteren van onnodige belastingscombinaties
Terwijl het bovenstaande algoritme functioneel is zonder enige filtering, het kan leiden tot redundante belastingscombinaties, wat leidt tot extra rekentijd en redundante resultaten. Neem de volgende belastingscombinaties:
1.2*D + 1.5*L 1,2*D + 1.5*L + 0.5*S 1,2*D + 1.5*L + 0.5*W 1,2*D + 1.5*L + 0.5*T
Als we één enkel geval van dode belasting hebben, deze vier belastingscombinaties resulteren in identieke belastingscombinaties:
1.2*D 1,2*D 1,2*D 1,2*D
Om deze situatie te voorkomen, Er worden vier regels gebruikt, die elk enkele kleine uitzonderingen bevatten. Eerste, laten we eens kijken naar de regels. De standaardstatus is dat de combinatie behouden blijft en de regels worden gebruikt om te bepalen welke moeten worden uitgesloten.
Filteren op criteria
Deze casus spreekt voor zich. Als het criteria wordt niet gevraagd, alle schemarijen die daaraan zijn gekoppeld criteria worden weggegooid.
Filteren op tekens in de schemasleutel
Schemasleutels zijn doorgaans door komma's gescheiden verwijzingen naar de oorspronkelijke verwijzing. Bijvoorbeeld, in het onderstaande NBCC-voorbeeld, de sleutel bestaat uit drie componenten:
- A: Meestal is de eerste term de belangrijkste referentie, raadpleeg de tabel waarin dit deel van de belastingen is opgenomen.
- 2b: De tweede term is meestal een unieke identificatie voor de belastingscombinatie in de tabel.
- u: De derde term wordt gewoonlijk gereserveerd om aan te geven wanneer een groot aantal belastingscombinaties met een kleine wijziging wordt gepermuteerd. Bijvoorbeeld, het kan aangeven of de eigen lasten in de belastingscombinatie gunstig zijn ( f ) of ongunstig ( u ).
{
"kracht":{
"A-2b-u":{"D": 1.25, "L": 1.50, "Ls": 1.50, "S": 1.00},
}
}
Filteren in de schemasleutel kan voor elk van deze termen worden gedaan. Bijvoorbeeld, als we willen filteren op de derde term, we kunnen het volgende filter toevoegen, waarmee een vervolgkeuzelijst voor filteren voor deze term wordt gemaakt:
"naam_filters": {
"Kracht": {
"Dode lading": {
"Negatieven gebruiken om de negatieve Z-richting te specificeren": 2,
"tooltip": "",
"artikelen": {
"Gunstig": "f",
"Ongunstig": "u"
},
"standaardinstellingen": ["Gunstig", "Ongunstig"]
}
}
}
Alle mogelijke dropdown-namen en bijbehorende termen moeten worden vermeld onder 'items'. Alleen de schemarijen met overeenkomende symbolen worden bewaard. Als het nodig is om een schemarij te behouden, onafhankelijk van wat er in het filter wordt ingevoerd, de term kan blanco worden gelaten. Elke schemasleutel die niet alle overeenkomende vervolgkeuzetermen bevat, wordt verwijderd.
Overbodige combinaties
Als een schemarij tijdens de eerste twee stappen niet wordt uitgefilterd, het gaat verder met stap nummer drie. In deze stap, het redundantieprobleem uit het bovenstaande voorbeeld wordt aangepakt. Om dit te doen, we moeten tegelijkertijd naar twee objecten kijken, schemarij en het gesorteerde input_by_case object (zie beschrijving hierboven), waarin wordt beschreven welke belastinggevallen zijn aangevraagd. Als de schemarij een supercase bevat die het input_by_case-object niet bevat, de belastingscombinatie wordt verwijderd. Nemen, bijvoorbeeld, de volgende schemarij:
"A-2a-u":{"D": 1.25, "L": 1.50, "S": 1.50}
en het volgende input_by_case object:
input_by_case =
{
"D": {"samenvoegen": [], "individueel": [1]},
"L": {"samenvoegen": [], "individueel": [4]}
}
In dit voorbeeld, de schemarij bevat a super geval S die niet is aangevraagd. Het behouden van deze rij zou leiden tot een belastingscombinatie die identiek zou zijn aan de belastingscombinatie die is gekoppeld aan de onderstaande schemarij, dus het wordt verwijderd.
"A-1a-u":{"D": 1.25, "L": 1.50}
Uitzonderingen
Terwijl dit gedrag meestal wenselijk is, er zijn gevallen waarin het NIET verwijderen van een rij wanneer het belastingsgeval afwezig is, tot een veel eenvoudiger schema leidt. Bijvoorbeeld, als we horizontale grondbelastingen hebben, moet deze aan elke combinatie van schema's worden toegevoegd, maar zijn niet altijd aanwezig, we kunnen alle belastingscombinaties kopiëren en plakken en de schemasleutel voor de nieuwe rijen aanpassen met een achtervoegsel zoals “h” voor horizontale grondbelastingen. Alternatief, we kunnen eenvoudigweg de horizontale grondbelasting aan alle gevallen toevoegen en een uitzondering voor behouden toevoegen aan het belastingsgeval in de metagegevens. Op die manier, als het belastinggeval niet wordt opgevraagd, het zal niet verschijnen, maar de rij blijft behouden. Het resultaat ziet er ongeveer zo uit in de meta-eigenschap van het schema:
"H.": {
"label": "Laterale aarde - Ongunstig",
"rang": 1,
"uitzonderingen": ["houden"],
"oude_labels": []
},
Overbodige combinaties
Als een schemarij niet wordt uitgefilterd tijdens de eerste drie stappen, het gaat verder met stap nummer vier. In deze stap, de kwestie van het matchen van specifieke belastingsgevallen tussen het schema en wat wordt gevraagd. Als een schemarij en een verzoek overeenkomende supercases hebben, maar het specifieke gevraagde belastinggeval staat niet in het schema, de rij wordt niet bewaard. Nemen, bijvoorbeeld, de volgende schemarij:
"A-2a-u":{"D": 1.25, "Sl": 1.50}
en de volgende input_by_case:
input_by_case =
{
"D": {"samenvoegen": [], "individueel": [1]},
"Sh": {"samenvoegen": [], "individueel": [1]}
}
In dit voorbeeld, zowel de schemarij als het verzoek hebben overeenkomende supercases. Echter, het verzoek vereist een combinatie met Sh, die de schemarij niet biedt. Dus, de schemarij wordt niet bewaard.
Uitzonderingen
Nogmaals, dit gedrag is meestal wenselijk, maar kan tot problemen leiden. Eén zo'n probleem doet zich voor wanneer normen belastinggevallen hebben die een supergeval delen, maar handel niet tegelijkertijd. Bijvoorbeeld, in ASCE, de windbelastingen W en tornadobelastingen Wt werken niet gelijktijdig, hoewel ze dezelfde supercase W delen. Wanneer we dit probleem tegenkomen, we kunnen een uitzondering toevoegen om naar een andere over te schakelen super geval voordat de code in de metadata wordt uitgevoerd. Achter de schermen, het symbool dat volgt op de “->” karakters worden toegewezen aan het belastingsgeval, die de belastingsgevallen die daarin optreden, zal simuleren super geval. Het resultaat ziet er ongeveer zo uit in de meta-eigenschap van het schema:
"Wt" : {
"label": "Wind - Tornado",
"rang": 8,
"uitzonderingen": ["supercase->X"],
"oude_labels": []
},
In het bovenstaande geval, de super geval “W” zal worden omgewisseld “X” voordat de code wordt uitgevoerd. Deze functie kan ook worden gebruikt om groepsbelastinggevallen met unieke waarden te verzenden super geval symbolen samen.

