Topic: Blender en Python  (gelezen 29136 keer)


Offline JvL

  • Member
  • *
  • Berichten: 3,415
    • Bekijk profiel
    • Llyr Studio
« Reactie #30 Gepost op: 26 mei 2014, 20:57:46 pm »
Ik heb het weer uitgeprobeerd en het is allemaal gelukt.

Bedankt weer.

Offline PKHG

  • Member
  • *
  • Berichten: 718
    • Bekijk profiel
« Reactie #31 Gepost op: 27 mei 2014, 19:27:25 pm »
Zo nu ook wat mij voor ogen staat om al dit te gebruiken!

Een addon, waar ik via de in vorige post's uitgelegde werkwijze modellen stapsgewijs heb laten ontstaan
Hier de link: http://pkhg.nl/blender/stepwise2PKHGvoorDBC27mei.zip

Maar eerst dit: lang geleden werkte het een of ander al perfect, maar met de upgrad van Blender van 2.56 of zo ging op eens iets niet meer, was worden verboden in Blender .... reden voor lange pauze met Blender, af en toe geprobeerd een oplossing
te vinden, maar wilde niet lukken!
Het idee is namelijk: Tutorials in stappen te vangen! En dat gaat in principe zo als in deze thread is begonnen!

Zo nu de addon van boven gebruiken:
-1- haal de zip
-2- pak alles uit naar */2.70/scripts/addons, maoet en map maken: stepwise2PKHG waar de inhoud van de zip dan ook zit!
-3- een (nieuwe?) Blender activeren en de addon op de een of andere wijze activeren: ik doe dat met Ctlr-Alt-U  addons-tab activeren of zoeken naar step (met klik) of klik op Mesh en dan de addon activeren
-4- naar de Properties gaan en onderaan stapsgewijs ... laten ontstaan, zie ook plaatje!

Zo heb ik b.v. in s_castle.py het commando om de standard Cube naar links te schuiven
gewoon,  via copy paste toegevoegd ...

De addon is nu nog niet weer zo als hij een was, waar men via een menu het een of ander konde instellen ... daar word weer aan gewerkt.

Wie wil kan meedoen en/of voorstellen maken.

Het eerste is natuurlijk een mogelijkeid om via de user-interface tussen het kasteel en Gus te kunnen kiezen en weer van voren af aan .. etc.

Graag kommentaar
       Peter



Doei
       Peter

Offline JvL

  • Member
  • *
  • Berichten: 3,415
    • Bekijk profiel
    • Llyr Studio
« Reactie #32 Gepost op: 28 mei 2014, 22:43:56 pm »
Ik heb hem getest en het zit best mooi in elkaar maar wat wil je hier precies mee doen? Als het de bedoeling is om tutorials te maken voor andere mensen dan zou het misschien wel mooi zijn als er ook tekst of uitleg op het scherm te zien is bij iedere stap.
Nu ga je steeds door naar de volgende stap maar weet je niet echt wat er precies gebeurt of welke commando's/modifiers gebruikt worden.

Wat ook misschien een mooie toevoeging zou zijn (indien mogelijk) is om stappen terug te kunnen gaan.

Maar mooi gemaakt hoor. Dat doe ik je voorlopig nog niet na.

Offline PKHG

  • Member
  • *
  • Berichten: 718
    • Bekijk profiel
« Reactie #33 Gepost op: 29 mei 2014, 09:33:18 am »
Inderdaad: terug gaan is ook (was het vroeger ingebouwd) mijn wens, en ook in meerdere stappen tegelijk etc.

Maar heb eindelijk iets dat een goed begin is ...: kunnen kiezen tussen Gus en Castle ...
maar moet een melding/waarschuwing? snappen en wegwerken
???!!!
step6 de vertices voor extrude kiezen en extruden PROPERTIES
convertViewVec: called in an invalid context
convertViewVec: called in an invalid context

Maar deze invalid context doet verder niets aan het stappen door ...
Als de addon nog iets fijner is probeer ik bij de blenderartists help te krijgen
Aldaar is al hetzelfde gevraagd maar zonder een goed antwoord voor mij
Doei
       Peter

Offline PKHG

  • Member
  • *
  • Berichten: 718
    • Bekijk profiel
« Reactie #34 Gepost op: 29 mei 2014, 18:37:24 pm »
Nieuwe opdracht voor HIER:

In de addon (voor stapsgewijs een model maken) is NOG vast ingebouwd dat na 32 stappen (toevallig geschikt vor Gus en Castle) geen echte stappen meer worden getoond (omdat zij er NIET zijn) ..

In de volgende versie haal ik dus of s_gus.py of s_castle.py binnen als MODULE
en print(dir(res))  (res is het resultaat van het binnen halen van een s_gus.py of zo)  levert dan:
['EnumProperty', 'Parameters', 'TriangleNormal', '__builtins__', '__cached__', '__doc__', '__file__', '__initializing__'
, '__loader__', '__name__', '__package__', '__warningregistry__', 'bpy', 'cos', 'cos_pid3', 'cos_pid4', 'description', '
fp', 'imp', 'makeFace', 'makeMaterial', 'name', 'parameters', 'pathname', 'pi', 'script_path', 'selectVertices', 'setMaterial', 'sin', 'sin_pid3', 'step1', 'step10', 'step11', 'step12', 'step13', 'step14', 'step15', 'step16', 'step17', 'ste
p18', 'step19', 'step2', 'step20', 'step21', 'step22', 'step23', 'step24', 'step25', 'step26', 'step27', 'step28', 'step
29', 'step3', 'step30', 'step31', 'step4', 'step5', 'step6', 'step7', 'step8', 'step9', 'time']

Maar ik heb daarvan alleen de 31 als geheel getal van de step31 nodig!

Zo nu goed kijken:
dir(res) levert blijk baar een lijst af, te herkennen aan de [ ... ]  , OK?
en ALLES zijn texten te herkennen aan de '...'  (met ... vervangen door, na ja kijk maar ;-) ).

-1- hoe haalt men alleen de 'step****' uit die lijst?
Eenvoudig: alleen die teksten die met step beginnen toch?!
-1.1- en dat kan zo:
steps = [el for el in dir(res) if el.startswith('step')]
het rode gedeelte lees je zo  als (de if !!!)  het el met steps start dan slechts het element el in de lijst (die ik toevallig) de naam steps heb gegeven opnemen!
-2- maar nu kan toch bij elk text in steps  step afgeknipt worden?
-2.1- men kan op volgend manier stukken uit een tekst halen, dat doet men door achter de text tussen [ en ] aan te geven van tot! "Peter Gragert"[0:5] levert gewoon 'Peter' op (doen in de Python console met andere getallen en texten!)
-2.2- Nu moet men nog weten hoe lang een tekst is om ALLES achter (in dit geval) step te pakken te krijgen en dat doet men met behulp van een functie die len (van length , lengte)!
Dus b.v. len("Peter Gragert") levert (DOEN in de Python Console van Blender!) bij mij levert het 13 op.
-3- dat doen we nu maar METEEN in het commando onder 1.1 beschreven:
-3.1- dus: steps = [el[4:len(el)] for el in dir(res)  if el.startswith('step')] dat leverde bij mij
['1', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '2', '20', '21', '22', '23', '24', '25', '26', '27', '
28', '29', '3', '30', '31', '4', '5', '6', '7', '8', '9']
-3-2- Jippie inderdaad alleen van alle steps*   het getal gedeelt maar kijk goed als str (string, tekst)!
-4- Hoe gaat men een tekst, die slechts een (geheel) getal bevat in een echt getal voor Python omzetten?
-4.1-  probeer maar in de Python console: int('123') en je krijgt gegarandeerd 123 als antwoord,
int komt van integer, geheel getal!
-4.2- we zijn lui en vullen in steps (zie boven) rond el[4:len(el)] nog int( voor en ) achter an:
-4-3- en ik krijg dan dit als antwoord [1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 3, 30, 31, 4, 5, 6, 7, 8, 9]
juist de kenmerken van teksten de '  zijn verdwenen
-5- Blijft over om het grootste getal uit die lijst te vissen, dan weet ik hoeveel steps* in het module zitten en kan het gaan gebruiken:
-5.1- Doe maar max([1,3,-4,5]) in de Python console, wat dacht je komt er uit? of vervan max door min! Inderdaad 5 resp -4!  Makkelik toch?
-6- dus wat ga ik doen? Natuurlijk: in de addon wordt de 32 vervangen door:
-6.1- max([int(el[4:len(el)]) for el in dir (res) if el.startswith("step")]) of als ik nog ontwikkel
gebruik ik eerst:
-6.2- steps = max([int(el[4:len(el)]) for el in dir (res) if el.startswith("step")]) op via
print(steps) te controleren of ik ook geen denkfout heb gemaakt!

Zo dat komt dus in de addon!

Samenvattend: Als je dit gesnapt hebt heb je een slimme manier in Python onder de knie hoe men met lijsten kan 'toveren', om dat er uit te halen wat je nodig hebt.
't is niet altijd zo eenvoudig als in dit geval ... maar toch te snappen, of niet?


« Laatst bewerkt op: 30 mei 2014, 07:27:32 am door PKHG »
Doei
       Peter

Offline JvL

  • Member
  • *
  • Berichten: 3,415
    • Bekijk profiel
    • Llyr Studio
« Reactie #35 Gepost op: 29 mei 2014, 21:43:46 pm »
Hier ga ik morgen even op mijn gemak voor zitten om te kijken of ik het snap.

Offline PKHG

  • Member
  • *
  • Berichten: 718
    • Bekijk profiel
« Reactie #36 Gepost op: 30 mei 2014, 06:54:30 am »
Wacht maar nog een beetje tot dat ik hier een link naar een verbeterde addon inplak,
Aldaar zal het in een  s_lijsten.py zitten, die je met Blender dan staps gewijs kunt uitvoeren!
En in de source bekijken ...
Peter
Zo nu nog even alles pakken maar dit wordt het:




komt zo ... gebeurd:

http://pkhg.nl/blender/voordbc.zip

Haal de zip en pack uit naar 2.7*/scripts/addons etc.  zie post 31 ;-)
Peter

Probeer alle 4 de s_*.py files maar uit, ze moeten in het (View3D menu TOOLS) worden gekozen opdat men het script kan activeren (zie plaatje in post 31) ...
« Laatst bewerkt op: 30 mei 2014, 09:02:51 am door PKHG »
Doei
       Peter

Offline JvL

  • Member
  • *
  • Berichten: 3,415
    • Bekijk profiel
    • Llyr Studio
« Reactie #37 Gepost op: 30 mei 2014, 15:52:27 pm »
De addon werkt inderdaad prima Peter. Erg leuk ook dat je nu kunt selecteren welke je wilt zien. Helaas heb ik nog geen tijd gehad om de tekst door te nemen omdat ik het onverwacht weer drukker heb dan ik eigenlijk zou willen. Ik hoop er vanavond aan toe te komen.
Ik heb nog wel een pdf bestand gevonden op mijn pc over Python dus die zal ik er de komende tijd ook eens bijpakken.
« Laatst bewerkt op: 30 mei 2014, 15:55:25 pm door JvL »

Offline PKHG

  • Member
  • *
  • Berichten: 718
    • Bekijk profiel
« Reactie #38 Gepost op: 30 mei 2014, 17:50:05 pm »
wat ik in post 34 probeerde uit te leggen zit nu OOK in s_lijsten.py ...
Dat dus stapsgewijs doen en in de Blender Console kijken en s_lijsten.py maar in
kijken ....

Zo nu ga ik over verbeteringen van de addon nadenken, b.v. EEN stap terug
of ga elke keer maar x stappen vooruit (x = 2 of 3 of zo ...)  En een s_verwijder_alle_meshes.py ...

s_test.py is overigens bedoeld voor eigen tests ... om snel en gemakkelijk te zien hoe zoiets
werkt

En het werkt ook als men in s_test.py een nieuwe def step2():... etc toevoegd en via het TOOLS menu overnieuw binnensleept, kan men weer gewoon klikken en moet Blender NIET nieuw te starten
Doei
       Peter

Offline PKHG

  • Member
  • *
  • Berichten: 718
    • Bekijk profiel
« Reactie #39 Gepost op: 31 mei 2014, 13:52:16 pm »
EEN iets heb ik nog niet over gehad, Python probeert haakjes zo veel mogelijk door indenteren (inspringen) van tekst te vermijden.
Men kan met spaties lekst laten inspringen of met tab-teken, MAAR niet gemengd, dus of spaties of tab-characters in een script-text!!!

Waar word dit gebruikt? Bei de definitie van functies (en classen, komt later ...) en bij
herhaal-lussen en bij testen ...

-1- Definitie van een functie ziet er zo uit
LET er MOET aan het einde van de def regel een : (dubbel punt) staan! dat voorkomt de haakjes namelijk

def naam_van_een_functie(...):
   tmp = "Peter was hier" #DEZE regel MOET inspringen, men gebruikt vaak 3 resp. 4 spaties!
   tmp += " dit achter tmp plakken #PRECIES even veel inspringen!
-1.1- de ... achter de functienaam (kan bijna alles zij, ...) is plaats voor het aangeven van afhankelijkheden.
-1.2- voorbeeld van een rare optelfunctie
def twee_getallen_plus_10_optellen(getal1, getal2):
    return (getal1 + getal2 * 4 + 10) #ha ha de * 4 staat niet in de functienaam
-1.3- Uitproberen! Gebruik de addon!

Een lus , om min of meer hetzelfde een aantal keren te doen:

-2- een 'for' commando (er zijn ook nog andere, maar dat komt ...later)
Dat ziet er dan zo uit b.v. (er zijn verschillende soorten!)
for i in range(10):
   print( twee_getallen_plus_10_optellen(i, i+5) )  #een willekeurig voorbeeld ;-)
   #zie je de i in de parameters? ... dus er worden 10 getallen afgedrukt
   #hier kunnen nog meer opdrachte ook ingesprongen! volgenh
-2.1-  Zie weer de afsluitende :  en het inspringen!

-3- testen doet men b.v. met een if-command en ziet er zo uit
if (testuitdrukking1):
    #hier ingesprongen een opdracht
    #en misschien noch een, etc.
else:
    #als de testuitdrukking1 niet waar is komt men hier terecth
    print(" de test leverde een nee (False) op)
    #Weer hetzelfde princiepe, ER MOET worden ingesprongen net zo veel als hiervoor!

Na ja ... al doende zullen er meer en ook ingewikkelder (iets maar) scripts worden gebruikt.

En dit alles is natuurlijk ook by Python te achterhalen, er zijn tal van toelichtingen op het WWW te vinden ...

   


Doei
       Peter

Offline PKHG

  • Member
  • *
  • Berichten: 718
    • Bekijk profiel
« Reactie #40 Gepost op: 31 mei 2014, 18:38:00 pm »
hmmm,
Undo is lastig ...
Heb een alternatief voor 90% werkend ...
Men kan het aantal te nemen stappen instellen
nadat men alle mesh-objecten (met de addon) heeft verwijdert om
dan in een klap op de gewenste plaats (stap) te zijn ...

Waarom niet 100% tja, sommige stappen lijken tijd (voor solidify) nodig te hebben
en material spul lijkt ook soms raar te zijn, met stappen 1 gaat alles goed
maar het moet voor ELKE stap goed gaan ...

Wijziging komt binnen kort online ...

Zo DEZE addon (stepwise ..) komt van af nu altijd in pkhg.nl/blender/voordbc.zip te staan

HET is nu de nieuwste versie (van vanochtend)
De LanguagePresets zijn nog niet verder actierf

New is: alle mesh-objecten met een stap verwijderen
aantal stappen die (via een loop) met een klik worden gedaan is instelbaar met een klik
Voor een sort undo bruikbaar:  je bent bij step7 (zeg) en wil step7 nog eens zien ontstaan, dat doe ik dan zo:
Via de ModelPresets s_delete_meshes uitvoeren
Dan weer naar het andere model gaan activeren de stapgrootte op 6 zetten en doen, daarna de stapgrotte weer op 1 zetten: UNDO gedaan (na ja ...)

« Laatst bewerkt op: 01 juni 2014, 08:31:44 am door PKHG »
Doei
       Peter

Offline JvL

  • Member
  • *
  • Berichten: 3,415
    • Bekijk profiel
    • Llyr Studio
« Reactie #41 Gepost op: 02 juni 2014, 07:37:23 am »
Door drukte loop ik een beetje achter met uitproberen, wel alles gelezen.

Offline PKHG

  • Member
  • *
  • Berichten: 718
    • Bekijk profiel
« Reactie #42 Gepost op: 02 juni 2014, 13:17:55 pm »
OK, geen probleem ...

Ik ben druk bezig (een oude) Joan weer aan de stapsgewijs aan de praat te krijgen
lijkt er al op ;-)
Hier (een verbeterde) tutorial van Joan http://www.3dtotal.com/ffa/tutorials/max/joanofarc/body1.php
Die was een aantal jaren nog niet zo fraai.
Ik zal MIJN  (start) versie in een GIF vangen en als die klaar is hier laten zien ;-).

Hier is zij dan: plaatjes blijven 1 sec staang: http://pkhg.nl/blender/joan_stepise.gif
« Laatst bewerkt op: 02 juni 2014, 21:20:03 pm door PKHG »
Doei
       Peter

Offline PKHG

  • Member
  • *
  • Berichten: 718
    • Bekijk profiel
« Reactie #43 Gepost op: 12 juni 2014, 07:56:23 am »
Nog iets over Python, wat bij het programmeren echt nodig is.

Men moet regelmatig ook beslissingen nemen om of dit of dat (nu) te moeten laten gebeuren ...

Er zijn vragen te stellen of iets wel waar is of niet waar is, het antwoord van Python zal of True (waar dus) of False (niet waar) zijn.
Dit zijn zogenoemde boolean values (tja, hoe vertalen?) : True, resp False.  Let op, T en F niet true en false.

Wat zijn nu (eenvoudige) vragen? Vaak nagaan of een getal groot genoeg of gelijk of kleiner een ander getalt is, met andere woorden twee getallen met elkaar vergelijken:

-1-  getal1 ==  getal 2 , zijn de twee getallen gelijk? (ja of ne , dus True of False?)
-2- en  vergelijkbaar voor groter >, kleiner < , groter of gelijk >= , kleiner of gelijk = en de laatste mogelijkheid ongelijk !=

Gebruik van iets dergelijks maakt men met de zogenoemde if-statements:

if conditie :
     doe dit
     en doe dat
     ....

waarbij conditie b.v. een van de bovenstaande vergelijking van twee getallen voorstelt.
En let op er moet een :  na de testvraag( conditie) komen EN de volgend regel(s) moeten iets (altijd gelijk veel) inspringen,

Of soms ook MET alternatief na een vraag
if conditie :
     doe dit
     en doe dat
     ....
else:
    lieverdezeopdracht
    ...

Die ... betekent (altijd) geen regel meer of nog een of nog een heleboel opdracht regel s...

Soms heeft men een hele rits aan testen nodig dat gaat dan zo:
if conditie1:
   ...
elif  conditie2:
   ...
elif conditie3:
    ...
else:
    in_alle_anderen_gevallen
    ...

OK duidelijk genoeg?
Doei
       Peter

Offline JvL

  • Member
  • *
  • Berichten: 3,415
    • Bekijk profiel
    • Llyr Studio
« Reactie #44 Gepost op: 12 juni 2014, 10:05:21 am »
Helemaal duidelijk. Bedankt weer.