Svenska 3D-Tåg - Forum  
 

Om det här är ditt första besök, se till att gå till vår FAQ (finns även länk till FAQ i navigeringsmenyn ovan). Du kan behöva att registrera dig innan du kan posta (finns även en länk till registrering i navigeringsmenyn ovan). För att titta på inlägg, välj det forum som du vill besöka från de som är listade nedan.

Gå tillbaka   Svenska 3D-Tåg - Forum > N3V Trainz > 3D-design - Trainz

 
 
Ämnesverktyg Visningsalternativ
Gammal 2015-01-22, 18:46   #1
korvtiger
Medlem
 
Reg.datum: Jan 2008
Ort: Uppland, Sverige
Inlägg: 2 717
Standard Lite hjälp av Python

När man bygger så mycket personvagnar som jag har gjort under åren så börjar man faktiskt att tröttna lite på vissa delar av workflowet som är tråkigt, tidskrävande och enformigt, men som måste göras för varje vagn.

Ett sådan är alla dessa attachmentpoints för passagerare. Att skapa dem, ingen problem. Att sätta ut dem, går lätt och enkelt. Men sedan så skall man döpa alla till a.sit0, a.sit1, a.sit2, a.sit3, a.sit4, a.si.... Evighetsgöra!

Sedan skall de ju in i configfilen med.
0 "a.sit0"
1 "a.sit1"
2 "a.sit2"
...
Men där är det ju enklare för det är bara att kopiera från en annan vagn och lägga till och ta bort några rader på slutet, eller? Nej. För och man listar dessa i ordning så kommer Trainz att fylla på med passagerare från ena änden till den andra, säte för säte. Jag vill att de mer realistiskt ska sätta sig i blandad ordning, så att vagnen fylls på med passagerare på ett slumpvist sätt. Då blir det väldigt jobbigt att hålla koll på att man fått med alla attachments, att man inte har dubbelnamngivit och så vidare.

Som tur är så detta som gjort för att lösas av dator! Configen kan man lätt generera med ett litet program. Men namngivningen i 3D-programmet är klurigare. Men lyckloghtvis är så har Blender (som jag 3D-modellerar i) ett programmerings API som gör att man i princip skulle kunna köra Blender genom att bara skriva programkod, rad efter rad för alla grejer du vill göra. Dock väldigt mycket jobb om man bara vill flytta något 10 dm åt höger, men för detta ändamål är det ett fenomenalt vektyg!
Programmeringsspråket som låter dig göra det heter Python och är ett helt vanligt programmeringsspråk som är ett av de mest använda idag. Såhär gör man:

Dela av 3D-fönstret så att du får ett nytt fönster och byt fönstertyp till Python Console. Kopiera följande kodsnutt och klistra in i konsolen:

Kod:
def rename_seats():
  obj_list = [obj for obj in C.selected_objects if obj.type == 'EMPTY']
  for (counter, epy) in enumerate(obj_list):
    epy.name = "a.sit" + str(counter)
Sedan trycker du enter två gånger så att början på randen där markören är får en ny prompt (början på raden skall se ut som >>>) När du gjort det så definieras en funktion i Blender med namnet rename_seats, men den kommer inte att köras.
Innan du kör den ska du först markera alla emptys/attachments i 3D-viewporten och sedan skriva följande i Python konsolen för att anropa funktionen:
Kod:
rename_seats()
och tryck enter. Tada! Alla markerade emptys kommer då att namnges a.sit0, a.sit1, a.sit2, osv. Ordningen är en aning slumpartad, men det gör ju inte så mycket.



Detta kan man ju bara göra om man faktiskt använder just Blender som 3D-program, men att generera configen kan alla göra. Jag har skrivit ett sådant program med, även det i Python, så det går att köra i Blenders Python konsol om man inte har någon Python-tolk på sin dator. Men om man varken har Blender eller orkar ladda ned Python så finns det hemsidor som låter en köra Pythonprogram rak i webbläsaren.

Till exempel kan man använda denna: http://repl.it/languages/Python

Kopiera denna textsnutt och klistra in i det vita fältet på vänsta sidan på hemsidan, precis bredvid 1:an:
Kod:
from random import shuffle

def randomize_seats(seats):
    l = range(seats)
    shuffle(l)
    for (index, seatnr) in enumerate(l):
        print('      ' + str(index) + '                                 "a.sit' + str(seatnr) + '"')
  
randomize_seats(50)
Tryck sedan på play-knappen i mitten för att köra och vänta ett par sekunder. Sedan är det bara att kopiera resultatet som dyker upp på höger sida och klistra in i configen! Vill man slumpa igen är det bara trycka på play igen. Genom att ändra 50 på sista raden kan man välja hur många säten man vill slumpa för.

Och så kan man spara många minuter med tråkigt arbete!
__________________
-k-
korvtiger besöker inte forumet just nu  
Svara med citat
 


Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av
Forumhopp



Alla tider är GMT +2. Klockan är nu 15:49.


Powered by vBulletin® Version 3.7.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
© Svenska 3D-Tåg 2001-2009