GE-Script : treeDistributorV1200 : (re)distribute and align trees within a transform group

Work in Process Mod Vorstellung
benito
Beiträge: 5
Registriert: Do 23. Feb 2017, 05:23

GE-Script : treeDistributorV1200 : (re)distribute and align trees within a transform group

Beitrag von benito » Do 23. Feb 2017, 06:19

Script für den Editor zum automatischen verteilen von Objekten in einer Transformgruppe.
Script for use in Giants editor to distribute objects within a transform group.

>>>> WIP <<<<
please submit feedback on errors and usability
bitte gebt mir Rückmeldung bei Fehlern und zur Benutzbarkeit

-- Author:Benito / xczz.de
-- Name:treeDistributorV1200
-- Description: align nodes within a selected node to terrain height and apply a random rotation
-- Icon:
-- Hide: no
-- Version:: 1.2.0.0 (2017-02-23)
-- Credits: thx TracMax for getting me started with "MoveToZero", "SplinePlacement_Execute"
-- License: WTFPL http://www.wtfpl.net/ "Do What the Fuck You Want to Public License"
-- Contact: benito.kreis@xczz.de

-- settings / features / Funktionen
local doGetUserAttributes = true
- checks if the transform group (root node) has similar parameters and overwrites local with node settings
- prüft ob die Transform-Gruppe User Attributes entprechend der Script-Parameter hat und übernimmt vorhandene Einstellungen für die Scriptausführung

local doSetUserAttributes = true -- lazy me
- writes script params as User Attributes (does not overwrite existing attributes)
- setzt Einstellungen des Script als User Attributes in der Tragsformgruppe (bestehende Werte werden nicht überschrieben)

local doAlignTreesWithTerrain = true
- sets objects within the transform group to terrain level (translate y)
- setzt Objekte in der Transformgruppe of Oberflächenlevel

local doShuffleOrderProcessing = false
- shuffle processing order, does not touch scenegraph order
- mixed Verarbeitungsreihenfolge, die Sortierung des Scenegraph wird nicht beeinflusst

local doDistribute = false
- if true objects will be redistributed on a grid, 1. localtion is 0/0, distribution is spiral clockwise
- verteilt die Objekte / Bäume auf einem Muster(Schachbrett), 1. Punkt is 0/0, die Verteilung erfolgt schneckenförmig im Uhrzeigersinn

local doTranslate = false
- the position / translation(x/z) of a child will be modified by "translateDistance" meters from its processed position in a random direction
- die Endposition des Objektes wird nach der Grunverteilung noch einmal durch "translateDistance" in Metern in eine zufällige richtung verschoben

local doRotate = false
- rotation will be randomised from rotateTreesBy[1] to rotateTreesBy[2]
- die Rotation der Objekte / Bäume wird auf eine Zufallszahl zwischen rotateTreesBy[1] und rotateTreesBy[2] gesetzt


local childCountThreshold = 3
- minimal required amount of children in the node, prevents accidently applying an action on a single tree
- Sicherheitsprüfung auf die Anzahl von Objekten in der Transformgruppe (falls mal du ein Baum selektiert ist)

local distributeDistance = 12
- param for "doDistribute", distance between objects for x/z
- Parameter für "doDistribute", Abstand der Objekte auf x/z zueinander

local rotateTreesBy = {0,360}
- rotate the tree for {min,max} degree, param for "doRotate"
- Bereich der Objektrotaion für die Option "doRotate"

local translateDistance = {2,4}
- option for "doTranslate", translates the child meters(min,max) from its processed position in a random direction
- Option für "doTranslate", korrigiert die Position nach Hauptverteilung in eine zufällige Richtung für zufälliger {min,max} meter

-- TODO / noch zu machen
- apply variation in tilt / Schräglage
- pull and clone from a source stack / automatisches Erstellen von Objekten durch Clonen aus einem Quell-Container
- distribute within defined markers <-- this one gets ugly / Verteilung der Objekte innerhalb von Markern <-- der wird fies
- check terrain angle and skip to steep areas / prüfe den Bodenanstieg und überspringe zu steile Passagen


... worst thing is writing the docu / Dokumentation schreiben ist der schlimmste Teil ;)

Source:
https://xczz.de/fs17/scripts/treeDistri ... rV1200.zip

Screens:
https://xczz.de/fs17/scripts/treeDistri ... een_01.png
https://xczz.de/fs17/scripts/treeDistri ... een_02.png

cheers / gruss benito


Ak_Helldog
Beiträge: 30
Registriert: Mi 5. Aug 2015, 22:27
Danksagung erhalten: 2 Mal

Re: GE-Script : treeDistributorV1200 : (re)distribute and align trees within a transform group

Beitrag von Ak_Helldog » Sa 4. Mär 2017, 14:28

Hi,
klappt super. :danke:
Nur bei einem Waldstück (TG), haut es mir die gesamten Bäume unter die map. ka warum.

benito
Beiträge: 5
Registriert: Do 23. Feb 2017, 05:23

Re: GE-Script : treeDistributorV1200 : (re)distribute and align trees within a transform group

Beitrag von benito » Do 9. Mär 2017, 18:34

@Ak_Helldog hey, ist das betroffene Waldstück auf dem als terrain markierten Mesh oder ist es auf einer "Attrappe" (wie bei nem Fake Tunnel) ausgerichtet?

Kannst du einen du einen Screenshot machen?

Ak_Helldog
Beiträge: 30
Registriert: Mi 5. Aug 2015, 22:27
Danksagung erhalten: 2 Mal

Re: GE-Script : treeDistributorV1200 : (re)distribute and align trees within a transform group

Beitrag von Ak_Helldog » Do 9. Mär 2017, 19:35

Hi,
der TG liegt wie alle anderen Waldstücke (TG´s) in nem Haupt TG. alle anderen gehen bis jetzt.
1.jpg
ohne doAlignTreesWithTerrain
2.jpg
mit doAlignTreesWithTerrain

benito
Beiträge: 5
Registriert: Do 23. Feb 2017, 05:23

Re: GE-Script : treeDistributorV1200 : (re)distribute and align trees within a transform group

Beitrag von benito » So 12. Mär 2017, 21:15

Fehler gefunden: die Transformgruppe darf nicht gekippt sein.

Transformgruppe "Wald00":
Rotate X: 2.115
Rotate Y: -2.562


Erklärung:
(das ist der code der die Bäume aufs Terrain aufsetzt)
-----------
local node = getSelection(0)
local nodeXw, nodeYw, nodeZw = getWorldTranslation(node)
local childStackCount = getNumOfChildren(node)

for i=0, childStackCount-1 do

local childXw, childYw, childZw = getWorldTranslation(myChild)
local terrainY = getTerrainHeightAtWorldPos(terrain, childXw, childYw, childZw);

-- set tree to terrain level
if doAlignTreesWithTerrain then
local childYDiff = childYw - terrainY
local childYSet = childYw -nodeYw - childYDiff
setTranslation(myChild, childXw, childYSet, childZw)
end
end
---------------

1. ermittle die Differenz zwischen Objekt-Y und Terrain-Y
2. die Differenz wird um die Position der Transform-Gruppe korrigiert
3. die neue Position des Objektes innerhalb der Transform-Gruppe wird geschrieben

Ist die Transform-Gruppe Rotiert, entspricht die neue Position nicht mehr der Terrain-Oberfläche :) Die Positionierung der Objekte beachtet nicht die Eigenschaften der "umfassenden" Transformgruppe, die aber vererbt an ihre Eigenschaften an Kind- / Unter- Elemente da innerhalb der Gruppe / relativ platziert wird.

Ich werde in der nächsten Version eine Warnung einbauen wenn die Transformgruppe gekippt ist.

Danke für den Fund.
Gruss Benito

Ak_Helldog
Beiträge: 30
Registriert: Mi 5. Aug 2015, 22:27
Danksagung erhalten: 2 Mal

Re: GE-Script : treeDistributorV1200 : (re)distribute and align trees within a transform group

Beitrag von Ak_Helldog » Mo 13. Mär 2017, 08:21

ok
gut zu wissen. Glaube das war einer meiner ersten Wälder bevor ich dein Script benutzte.
Kann sein das ich da einfach eine TG kopiert habe und Strg+B irgendwohin gesetzt habe.
Die Verschiebung habe ich wohl wie es aussieht genullt. Rotation vergessen^^

Gruß Helldog

MorDecai
Beiträge: 51
Registriert: So 13. Dez 2015, 00:15

Re: GE-Script : treeDistributorV1200 : (re)distribute and align trees within a transform group

Beitrag von MorDecai » Di 14. Mär 2017, 21:46

Good script!! wonderfull!! :hi:

Edit:

I test the script and the attribute local doShuffleOrderProcessing yes touch scenegraph order.

benito
Beiträge: 5
Registriert: Do 23. Feb 2017, 05:23

Re: GE-Script : treeDistributorV1200 : (re)distribute and align trees within a transform group

Beitrag von benito » Fr 17. Mär 2017, 22:26

@MorDecai The script should not touch the "Scenegraph" order.

If you set "doShuffleOrderProcessing" to true, it simply shuffles the reference table which defines the order objects will be picked for placement.

Example:
-> main transform group has the index "7>24"
-> first child / tree has the index "7>24|0"

If you set doShuffleOrderProcessing == true, the first child might not be the first object picked for placement (first pick will always be the center one), but it will remain its scenegraph index "7>24|0", not matter when picked for placement.

For doShuffleOrderProcessing == false, the placement will follow the scenegraph order. First element in the center, followed by a spiral, clockwise placement for available objects.

If you encounter a different behavior, please give me some "proof", on my side it works as intended, maybe my description was confusing :)

cheers benito

MorDecai
Beiträge: 51
Registriert: So 13. Dez 2015, 00:15

Re: GE-Script : treeDistributorV1200 : (re)distribute and align trees within a transform group

Beitrag von MorDecai » Mo 26. Jun 2017, 14:36

Some quick way to remove the leftover trees? XD

Bild

This in 70 fields... puff... some script for select a area and delete? xD

Antworten

Zurück zu „WIP Mods“