Dutch Blender Community

Coding => Hulp => Topic gestart door: PKHG op 13 mei 2014, 18:58:10 pm

Titel: Blender en Python
Bericht door: PKHG op 13 mei 2014, 18:58:10 pm
Zo hier nu mijn eerste medeling, toegelicht met een gif-plaatje.

De eerste bedoeling is het, om te laten zien hoe Blender eigenlijk (bijna) alles wat men met de muis en toetsen doet, onderwater (wel/ of niet?) via Python commando's doet!

Start Blender maar op en kijk dan naar het gif!


Er zijn 2 dingen te leren:
1) Een extra window van Blender te voorschijn halen waar men de Python commando's kan zien
2)Hoe het verwijderen van objecten, hier de Cubus, die er toch meestal na het opstarten van blender is met een Python commando zou kunnen verwijderen!

Alle 3 plaatjes in de gif blijven elk 2 sec staan (te kort of te lang?)
Het eerste laat zien waar je de muis kunt neerzetten om een extra venster, waar we later de commando's vandaan halen kunnen zien. Precies op de rand zodat de dubbele pijl te voorschijn komt en dan maar naar beneden slepen.
Het tweede, daar heb ik de standard Cube geactiveerd en met X en dan op Delete gebruiken verwijdert
Het derde plaatje laat zien hoe dat met Python er uit ziet!

Daarover MEER in het volgende deel.

Algemeen: voeg hier of in de shout-box commentaar toe, over wat beter kann, onduidelijk is ...OK?
Moeten we nog gaan leren of een forum geschikt is ...
(Mark hoe doet men dat?)
 
(http://s12.postimg.org/a1q64vtzt/Nr1.jpg) (http://postimg.org/image/a1q64vtzt/)


Edit1
Oh, het gif moet men downlaoden??? Nee slechter, werd als jpg geupload, gRRRRRRRRRR
Mark hoe kan dat beter????
Titel: Re: Blender en Python
Bericht door: JvL op 13 mei 2014, 19:03:26 pm
Peter,

Ik krijg maar 1 plaatje te zien en dat ziet er beschadigd uit.

(http://s29.postimg.org/f9f26x5ab/Knipsel1.jpg) (http://postimg.org/image/f9f26x5ab/)

Klopt dit of doet hij het bij jou wel?
Titel: Re: Blender en Python
Bericht door: PKHG op 13 mei 2014, 20:39:44 pm
Ja, deugd niet, het forum heeft het gif naar jpg geconverteerd .... ik zal het gif anders laten zien (en misschien zelfs later een wiki)

Kijk maar http://pkhg.nl/pictures/Nr1.gif
Titel: Re: Blender en Python
Bericht door: JvL op 13 mei 2014, 20:48:58 pm
Dit werkt inderdaad wel. Bedankt.
Titel: Re: Blender en Python
Bericht door: PKHG op 14 mei 2014, 06:38:56 am
Twee dingen nu:
Ik ga er van uit, dat men weet hoe men 'Windows' in Blender kan aanmaken door via de rechter bovenhoek een window in tweeën te splitsen respectievelijk samen kan voegen (als het passt) door op de scheiding van twee Windows een dubbel pijl met de muis te laten ontstaan en dan met der RMB (rechter muisknop) voor in de ene of andere richting samenvoegen te kiezen?!

Tweede: Python kan men in Blender op 3 manieren gebruiken:
1) als addon, iets dat kant en klaar is gaan gebruiken, (Ctrl Alt U ==> addons en kiezen maar)
2) een window in een python-console wijzigen (Klik in de linker benedenhoek op en kies dan helemaal boven voor Python Console en aldaar (vooraan beginnen!) Python commando's te typen. Probeer het maar: [el for el in range(4)]  en dan Enter, dat levert dan dit: [0, 1, 2, 3] , en wat dit is komt zo aan de orde
3) een window in een Text Editor wijzigen, aldaar kan men Python commando's typen (heel veel mogelijk!) en dan via de knop Run Script of RMB en ook Run Script of de afkorting Alt P te laten uitvoeren. Probeer maar: print([el for el in range(4)]) in een text window (met New evt. aan te maken!) ... werkt maar waar is het te zien? In de Window Console  (op window boven klikken, misschien twee keer ...) en dan zou je hetzelfde moeten zien als onder 2) als resultaat te zien was.

Deze twee onderdelen zijn basis weten en zou men moeten kunnen dromen  :).

Dus: uitproberen en vragen als iets (nog) niet duidelijk genoeg, te nieuw voor je is.

Titel: Re: Blender en Python
Bericht door: JvL op 14 mei 2014, 07:38:09 am
check, duidelijk.
Titel: Re: Blender en Python
Bericht door: IJp op 14 mei 2014, 11:59:01 am
Het heeft even geduurd maar het is duidelijk  :-[
(http://s1.postimg.org/3pp1a4lij/Pyton.jpg) (http://postimg.org/image/3pp1a4lij/)
Titel: Re: Blender en Python
Bericht door: PKHG op 14 mei 2014, 14:03:46 pm
En nu eventjes tussendoor .. een 4x3 sized plaatje

http://youtu.be/gYzaYuFJUwA

===================
Volgende stap: een mini oefening om een willekeurig object via een scriptje op verschillende 'layers' te hebben ... even geduld dan komt de hulp .

Dit naar aanleiding van de tutorial van Ray Mairlot. Zie boven een voorbeeld van mij gemaakte (bijna kant en klaar addon voor Blender) waar:
er een object in layer 5, een in layer 4 en en resultaat in layer 1 moest komen.

Dat gaan wij nu met een Mesh -> Plane al doende oefenen :-)

Wij starten Blender, het beste voor deze  en volgende oefening, klaar gemaakt starthier.blend

Zie plaatje ..
(http://s11.postimg.org/t5c3bwlnz/Start_1.jpg) (http://postimg.org/image/t5c3bwlnz/)

Richt je Blender a.u.b zo in ... (of moet ik een start_1.blend voor downloaden aanbieden?)
Er ontbreekt nog EEN iets:  je moet nog op op New van het Text-window klikken!

Zo nu ga je in het 3D-window een nieuwe Mesh-->Plane aan maken!
Dan verschijnt in het bovenste window zoiets als dit:
bpy.ops.mesh.primitive_plane_add(radius=1, view_align=False, enter_editmode=False, location=(0.691208, -3.39513, -4.02415), layers=(True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False))

Het ziet er bij jouw bijna zo uit de getalletjes zijn zeker (hi hi) anders!
Het eerste stuk zegt:
bpy  = blenderpython  een punt . is altijd een scheidingsteken voor blender commando's,
ops komt van operators
mesh is duidelijk net als
primitive_plane_add

wat erna tussen ronde haakjes komt zijn opties war men aan kan en mag draaien of zelfs kan weglaten!

Zo en nu?
Om dit nog een keer met Python, in het Text gedeelte, te kunnen uitvoeren voegen wij helemaal boven links in het Text-window
import bpy
toe, we willen namelijk niet alleen Python gebruiken maar Python met Blender dingen!
Dit import bpy vertelt aan Python dat er Blender commando's (kunnen, moet niet maar hier wel) volgen.
Zo en nu dat rare commado naar het Text gedeelte kopiëren!
Een rechter muisklik helemaal boven waar bpy.ops... staat maakt het licht blauw: geselecteerd!
Nu dus met Ctrl-C en Ctlr-V naar het Text-window kopiëren!
wijzig bij jouw wat achter location staat (plaatje (0.691208, -3.39513, -4.02415) )b.v.
zo:  location=(1, 1, 0)

Nu een na laatste stap: uitvoeren! zie eerder: Alt P of knop gebruiken.( muis in het Tex-window)!
En wat gebeurt er? Een nieuwe plane op een ANDERE (hopelijk, hihi) plaats in het 3D View!

Laatste stap: Ga True met de derde False in het Text-window verwisselen en weer Alt P voor uitvoeren!
Tja, het plane is dan in een andere, afhankelijk welke False je voor verwisselen gebruikte, layer aangekomen, een nieuwe plane.

En nog een afsluitende (voor vandaag) opmerking: gaat vergelijkbaar met de anderen objecten! Uitproberen!
Titel: Re: Blender en Python
Bericht door: JvL op 14 mei 2014, 14:52:59 pm
Vanavond even mee aan de slag!
Titel: Re: Blender en Python
Bericht door: PKHG op 14 mei 2014, 15:30:34 pm
Voor het gemak:
http://www.pkhg.nl/blender/start_python.blend
Aldaar staat links in het Text-window de opdrachten noch eens!
Titel: Re: Blender en Python
Bericht door: Mark aka Dark op 14 mei 2014, 15:59:59 pm
Volgens mij doet het wel hoor.

(http://s18.postimg.org/ale6rov85/Nr1.jpg) (http://postimg.org/image/ale6rov85/)

Klik op het plaatje en voila!

Wat het misschien kan zijn: laat je het plaatje op originele grootte uploaden?
anders weet ik het ook niet.

MAD
Titel: Re: Blender en Python
Bericht door: PKHG op 14 mei 2014, 17:22:27 pm
Mark snap ik niet bij jou staat ook jpg en klik maar helemaal boven op de geuploadde gif
totaal slecht ????

Peter
Titel: Re: Blender en Python
Bericht door: Mark aka Dark op 14 mei 2014, 19:18:58 pm
Mark snap ik niet bij jou staat ook jpg en klik maar helemaal boven op de geuploadde gif
totaal slecht ????

Peter

Dat is het plaatje was als link fungeert. Als je op mijn plaatje klikt, krijg je in een nieuwe tab de gif te zien.

MAD
Titel: Re: Blender en Python
Bericht door: JvL op 14 mei 2014, 19:21:45 pm
Zo, weer een oefeningetje gedaan!  ;)

P.S. Gif werkt nu inderdaad.
Titel: Re: Blender en Python
Bericht door: PKHG op 14 mei 2014, 19:44:22 pm
Volgens mij doet het wel hoor.

Klik op het plaatje en voila!

Wat het misschien kan zijn: laat je het plaatje op originele grootte uploaden?
anders weet ik het ook niet.

MAD

Ik heb jouw link en die van Post 1 hier maar ingeplakt  zonder ...

Van jouw Mark wat WEL werkt
postimg.org/image/ale6rov85/
s18.postimg.org/ale6rov85/Nr1.jpg

Maar dit is ontstaan bij uploaden van het gif en duidelijk anders, en werkt NIET
postimg.org/image/a1q64vtzt/
/s12.postimg.org/a1q64vtzt/Nr1.jpg

Dus graag uitleggen wat je gedaan hebt!



JvL: de *.blend gehaald en uitgevoerd? Duidelijk of niet?
Titel: Re: Blender en Python
Bericht door: JvL op 14 mei 2014, 19:51:01 pm
Ja, ik heb de .blend voor het gemak gedownload maar hoe het met de diverse schermen werkt wist ik al.

De oefening was verder ook helemaal duidelijk dus ik neem aan dat het voor andere mensen ook wel duidelijk is.

Bedankt in ieder geval voor de uitleg.
Titel: Re: Blender en Python
Bericht door: IJp op 14 mei 2014, 21:32:33 pm
Nee voor mij niet ik heb namelijk een geheugen probleem en dit is teveel tekst voor mij dus ik ga hier afhaken :-[
Titel: Re: Blender en Python
Bericht door: PKHG op 15 mei 2014, 10:42:39 am
Zo graag commentaar op deze opdracht:
http://pkhg.nl/blender/start_python-1.blend

Mijn nieuwste idee hoe we dit gemakkelij kunnen doen ...

(het oude deel is er ook in te ontdekken) ;-)

Volgende opdrachten volgende week woe of iets later ..
Titel: Re: Blender en Python
Bericht door: PKHG op 15 mei 2014, 16:36:18 pm
Sorry, had de vorig post niet meer kunnen zien ... na ja dubbel is soms ook niet slecht ;-)

voor het week end:
http://pkhg.nl/blender/start_python-1.blend

Maar ik heb net voor het eerst een Macro-recorder in 2.7 gebruikt en werkend gekregen en
dat komt natuurlijk heel gauw aan de orde ...

Hetgeen ik (zie boven) en hiervoor heb uitgelegd KAN automatisch worden gedaan!
Men drukt op een MACRO-OPNAME knop .... doet het een of ander .... stopt via de MACRO-OPNAME knop ...
En daarna kan men het geel gewoon aanroepen .... en gebeurt dus HETZELFDE noch een keer
Heerlijk om dan de script, die in een TEXT-WINDOW terecht kwam bekijken en
gewoon maar aan knutselen.
Tot gauw!
Prettig weekeinde
     Peter
Titel: Re: Blender en Python
Bericht door: JvL op 16 mei 2014, 07:41:10 am
ik zal er in het weekend naar kijken want ik ben nu even druk met mijn werk.
Titel: Re: Blender en Python
Bericht door: PKHG op 21 mei 2014, 08:40:10 am
So terug van weg geweest, prachtige feest gefierd naar aanleiding van een 80jarige zus ;-).

Ik denk dat een volgende stat het uitproberen van de automatische Macro-recorder zal kunnen zijn ... dat ga ik deze week voorbereiden en in de *.blend stoppen.

Weet iedereen die dit leest hoe je een addon activeerd en waar je de source moet plaatsen?
Het laatste is vrij eenvoudig:
In de map war je 'blender.exe' te vinden is ...
zie plaatje!
tot ...



(http://s28.postimg.org/vxmvd8x2x/waar_Addons_PLaatsen.jpg) (http://postimg.org/image/vxmvd8x2x/)


Kijk maar naar http://pkhg.nl/blender/start_python-1.blend (aangepasste versie!)


Titel: Re: Blender en Python
Bericht door: JvL op 21 mei 2014, 09:22:14 am
Welkom terug!

Dat is allemaal bekend voor mij dus ik wacht de rest rustig af.
Titel: Re: Blender en Python
Bericht door: PKHG op 21 mei 2014, 09:33:03 am
Welkom terug!

Dat is allemaal bekend voor mij dus ik wacht de rest rustig af.

Je was te snel (hi hi).... zie boven,of hier, de links naar  http://pkhg.nl/blender/start_python-1.blend
Titel: Re: Blender en Python
Bericht door: JvL op 21 mei 2014, 21:18:54 pm
Hoi Peter,

Ik heb het uitgeprobeerd en de macrorecorder werkt, alleen als ik de macro selecteer in de text window en ik run het script dan zie ik geen objecten verschijnen.
Weet jij misschien hoe dit komt.

Ik krijg verder geen foutmeldingen.
Titel: Re: Blender en Python
Bericht door: PKHG op 22 mei 2014, 09:43:20 am
Hi JvL
Nadat je de macro hebt afgesloten dan run je inderdaad de macro EERST
in het bijbehorende tekst venster. DIE DOET NOG NIETS behalve iets dat
Macro heet aan te maken!
Deze macro moet men nog aanroepen via: spatiebalk en in de zoekregel maar Macro typen en dan beneden Macro klikken ;-).

EDIT: toevoeging
Ik was/ben van plan dit tutorial https://www.youtube.com/watch?v=QiJfcZ031AY
met een macro te voorzien ... 't is tot nu toe half gelukt.
De Cycles eigenschappen van een object vangen ging (nog) niet ...


(http://s30.postimg.org/91zogzwn1/Peter_Met_Cycles.jpg) (http://postimg.org/image/91zogzwn1/)

De bedoeling is: gewoon met een Macro oproep een willekeurige tekst
laten ontstaan, opdat de Cycles render  werkt ....

na ja .. even zien of ik dat voor elkaar kan krijgen. het is iets wat met 'nodes' moet worden gedaan.
Nodes, is vermoedlijk een onderwerp, dat men vroeger of later zou moeten leren gebruiken ... (dus later ...)
Titel: Re: Blender en Python
Bericht door: JvL op 23 mei 2014, 21:49:38 pm
Hoi Peter, hij doet nog steeds niets als ik precies doe wat je zegt. Ook niet als de macro aanroep die in jouw .blend zit.

Als ik zelf een macro record dan zie ik de uitgevoerde acties niet in het script staan terwijl hij vervolgens wel gewoon de macro opslaat. Ik kan hem gewoon aanroepen in de text editor maar het lijkt wel of de macro recorder niet goed werkt bij mij.
Titel: Re: Blender en Python
Bericht door: PKHG op 24 mei 2014, 10:18:09 am
Hmm, inderdaad, zoiets had ik ook.
Om lui te zijn, had ik de instelling van de Macro 'opgeslagen' om het niet elke keer te activeren ...
En inderdaad kwamen de opdrachten daarna NIET meer  terecht in de Text-Macro-window ...

zo: dus de macro-recorder NIET via de instelling 'standaard geactiveerd' maken.
 (?)
Dan start_python-1.blend  lijkt het niet te doen. Oorzaak (?) let op welke layer je net ziet! Dus activeer de eerste layer.
Dan Run Script van de macro-text-window, dan spatie ==> Macro kiezen en laten doen.
Dan komt er bij mij een Cube en een Plane te voorschijn ...

OK 
Nu dus even iets over Python zelf, in start_python-1.blend is er een text-window geheten  Python en typen.
Bovenaan staat (als het goed is) dit:

geheel_getal = 72                       #int integer
decimaal_get = 3.14                     #float
text_1 = "Peter was hier"               #str string text
text_2 = 'Peter was hier nog een keer'  #str string text

raar_tuple = (1, -4, "hallo")           #tuple
een_lijst = [-7, 8, 4 , 5]       #list lijst
een_lexicon = {"P" : "Gragert", 3:5}    #dict dictionary woordenboek
.... (nog iets, later meer erover)

Deze onderdelen zijn standard Python opbjecte: gehele getallen ( zoals -4   0   23456 )
decimale getallen, moeten bij invoer dus een  .  (punt) bevatten
gewone texten (een geheel tussen aanhalings teken)

Iets wat "tuple" wordt genoemd namelijk tussen ronde haakjes met comma gescheiden dingen die Python snapt, deze gewone dingen (getallen text ...) maar ook Blender-Objecte!

Dan zijn er nog zo genoemde list  en dictionary objecten, een soort woordenboek ...

Zo, nu even iets doen:
start_python-1.blend openen, de muis in de Python console zetten en Ctrl - Pijlnaarboven tippen, gevolg het Python Console venster neemt het hele blender window in beslag (Ctrl - Pijlnaarboven) maakt het weer 'klein'..
Deze toets-combination is dus iets wat men toggle noemt, (in een browser de F11 is ook een toggle,probeer maar als je het nog nooit hebt gedaan)

We beginnen met een lijst in te voeren:

List_1 = [1, 2, 3, 4, 5,6,7,       8888           ]
Dan hebben we nu iets ter beschikking, de zo genoemde VARIABELE List_1 met een aantal getallen gevuld

tik nu maar: len(List_1)
Dat levert nu een getal, in dit geval een 8, omdat er 8 getallen in de list zitten!

Hoe haalt men nu getallen eruit?
Dat gaat zo:  List_1[ ???? ]  met ??? vervangen door 0 voor het EERSTE getal , 1 voor het TWEEDE getal, enz
Dat ligt er aan dat Python de nummering van lijsten (EN ook van tuples) bij 0 (nul) begint. Even wennen.

Samenvatten: lijsten (list) zijn objecten die een aantal (liefst gelijksoortige) objecten bevatten,
ook geen enkele is mogelijk, probeer maar: len([])
resultaat keurig netjes een 0, of niet?

So genoeg voor deze post ....
Volgende keer zullen wij met lijsten een beetje meer 'knutselen' , is bij programmeren namelijk hard nodig. Tot zo ...



Titel: Re: Blender en Python
Bericht door: JvL op 24 mei 2014, 18:05:37 pm
Als ik het doe zoals jij nu beschreven hebt dan werkt het inderdaad. Dank je!

Vanavond kijk ik naar de nieuwe opdracht want ik heb nu even wat anders te doen.
Titel: Re: Blender en Python
Bericht door: JvL op 26 mei 2014, 01:09:44 am
Ik heb het gedeelte over List gedaan en het is helemaal duidelijk.
Titel: Re: Blender en Python
Bericht door: PKHG op 26 mei 2014, 09:36:15 am
In Python bestaat iets, dat men vaak met lijsten iets wil doen ...

Laten wij een 'eenvoudig' verzoek schetsen: Ik heb lijst nodig die de getallen van 1 tot 100 bevat ..
GRRR vreselijk 1,2,3, ..,99,100 allle getallen tussne [ ] typen? Nee, dat moet en kan makkelijker!
Zulk getallen reeksen maakt men vaak met het 'range'-commando!

Typ maar in de Python-console van Blender :   help(range)
dat levert een heleboel .. maar bovenaan staat het meest belangrijke, het gebruik:
range([start,] stop[, step]) -> range object

Uitleg:
-1- het commando heet range, voor een serie gehele getallen! te gebruiken als range( ..... )
-2- achter het ( kunnen 3 getallen staan waarvan het middelste, de stop verplicht is daarom NIET tuss [ ] gezet in de hulp
-3- men kan aangeven met een getal voor stop, waar men wil beginnen
-4- als men start en stop heeft (met , gescheiden kan men een derde (komma niet vergeten) voor een stapgrootte!
-5- men moet nog weten dat het getal stop NET NIET wordt geproduceerd

Zo even doen (natuurlijk in de Python console ;-) )
r1tot100 = range(1,101)
r1tot100 
tja levert weer range(1,101)  dus dat is een object, raar, even wennen

NU gebruiken: en dat is het waarover ik het hier heb
[getal for getal in r1tot100]
Dan zie je inderdaad  100 getallen van 1 tot 100 met komma gescheiden tussen [ en ] ;-)

UIt de console gekopieerd:
>>> r1tot100 = range(1,101)
>>> [getal for getal in r1tot100]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100]

Heb je slechts alle even getallen 2,4, ... 100 nodig dan maar
evengetallen = [el for el in range(2,101,2)]
evengetallen
levert dan
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100]

Dus samenvatting
[naam for naam in gecamoefleerdelijst] levert een lijst met alle 'dingen' die in gecamoefleerdelijst zitten,
zoals b.v. range(11) ([1, ... , 10]) welke naam je voor naam gebruikt  kun je zelf kiezen!

Voor Blender zullen wij dan b.v. bpy.data.objects gebruiken!
Probeer maar:
[el.name for el in bpy.data.objects]
Ik kreeg dus net dit:

>>> [el.name for el in bpy.data.objects]
['Camera', 'Cube', 'Lamp', 'Pyramid']

(ik had net een pyramide met naam Pyramid in Blender aangemaakt!)
Dus nog een opmerking hiervoor nodig: el (heb ik als afkorting voor element) genomen maar wat is een el
in bpy.data.objects voor een iets? Klaar een Blender-object en dat heeft in dit geval een eigenschap "name" en DAT
heb ik dus maar meteen opgevraagd door el.name, in plaats van alleen el, te gaan gebruiken!

DIT ZAL EEN VAN DE WERKWIJZEN ZIJN, DIE MEN GAAT GEBRUIKEN!
Titel: Re: Blender en Python
Bericht door: JvL op 26 mei 2014, 20:57:46 pm
Ik heb het weer uitgeprobeerd en het is allemaal gelukt.

Bedankt weer.
Titel: Re: Blender en Python
Bericht door: PKHG 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


(http://s1.postimg.org/rp7tgj84b/stepwise_New.jpg) (http://postimg.org/image/rp7tgj84b/)
Titel: Re: Blender en Python
Bericht door: JvL 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.
Titel: Re: Blender en Python
Bericht door: PKHG 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
Titel: Re: Blender en Python
Bericht door: PKHG 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?


Titel: Re: Blender en Python
Bericht door: JvL 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.
Titel: Re: Blender en Python
Bericht door: PKHG 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:


(http://s30.postimg.org/if4wgoav1/s_ljsten.jpg) (http://postimg.org/image/if4wgoav1/)

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) ...
Titel: Re: Blender en Python
Bericht door: JvL 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.
Titel: Re: Blender en Python
Bericht door: PKHG 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
Titel: Re: Blender en Python
Bericht door: PKHG 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 ...

   


Titel: Re: Blender en Python
Bericht door: PKHG 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 ...)

Titel: Re: Blender en Python
Bericht door: JvL op 02 juni 2014, 07:37:23 am
Door drukte loop ik een beetje achter met uitproberen, wel alles gelezen.
Titel: Re: Blender en Python
Bericht door: PKHG 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
Titel: Re: Blender en Python
Bericht door: PKHG 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?
Titel: Re: Blender en Python
Bericht door: JvL op 12 juni 2014, 10:05:21 am
Helemaal duidelijk. Bedankt weer.
Titel: Re: Blender en Python
Bericht door: Mark aka Dark op 12 juni 2014, 11:23:54 am
Ja ja, die Peter weet er wel van.
Ben zelf ook veel bezig met python en Blender, en ben al een paar keer de naam PKHG tegen gekomen. Gisteren ook weer in het handleiding hoe je addons voor blender kunt maken met behulpt van eclipse IDE en Pydev.

MAD

P.S. schoot net door mn hoofd: een titel Scriptor op het forum introduceren? :-)
Titel: Re: Blender en Python
Bericht door: JvL op 12 juni 2014, 11:28:35 am
Lijkt mij wel een goed plan.
Titel: Re: Blender en Python
Bericht door: IJp op 12 juni 2014, 15:45:19 pm
Ja die titel pas Peter wel. ;)
Titel: Re: Blender en Python
Bericht door: PKHG op 12 juni 2014, 16:04:25 pm
Ja, programmeren, scripten, is zeker een hobby van mij .... niet alleen Python maar ook PHP, Java, Javascript, Lisp .... en nog wat meer  :D
(EDIT overigens sinds ca. 1963, tijdens numerieke wiskunde praktikum in HH ;-) ).

EDIT:
Mark, de link over eclipse en .. Heb je die nog voor mij (ons?) ?
Titel: Re: Blender en Python
Bericht door: Mark aka Dark op 12 juni 2014, 17:03:21 pm
link (http://airplanes3d.net/pydev-000_e.xml)
Titel: Re: Blender en Python
Bericht door: PKHG op 12 juni 2014, 17:26:00 pm
Leuk, bedankt Mark!
Titel: Re: Blender en Python
Bericht door: JvL op 12 juni 2014, 20:33:48 pm
Zeker leuk! Nog meer reden om er verder in te duiken (alsof ik nog niet druk genoeg ben... ;)).
Titel: Re: Blender en Python
Bericht door: PKHG op 25 juni 2014, 18:53:52 pm
Eindelijk begrepen :
Waar komen de verschillende UI (de panels) terecht
Dat is te achterhalen en werkt via http://wiki.blender.org/index.php/Dev:2.5/Py/Scripts/Cookbook/Code_snippets/Interface

Voor het gemak de code
#----------------------------------------------------------
# File hello.py http://wiki.blender.org/index.php/Dev:2.5/Py/Scripts/Cookbook/Code_snippets/Interface
#----------------------------------------------------------
import bpy
 
#
#    Menu in tools region
#
class ToolsPanel(bpy.types.Panel):
    bl_label = "Hello from Tools"
    bl_space_type = "VIEW_3D"
    bl_region_type = "TOOLS"
 
    def draw(self, context):
        self.layout.operator("hello.hello")
 
#
#    Menu in toolprops region
#
class ToolPropsPanel(bpy.types.Panel):
    bl_label = "Hello from Tool props"
    bl_space_type = "VIEW_3D"
    bl_region_type = "TOOL_PROPS"
 
    def draw(self, context):
        self.layout.operator("hello.hello", text='Hej').country = "Sweden"
 
#
#    Menu in UI region
#
class UIPanel(bpy.types.Panel):
    bl_label = "Hello from UI panel"
    bl_space_type = "VIEW_3D"
    bl_region_type = "UI"
 
    def draw(self, context):
        self.layout.operator("hello.hello", text='Servus (VIEW3D UI)').country="The Netherlands"
 
#
#    Menu in window region, object context
#
class ObjectPanel(bpy.types.Panel):
    bl_label = "Hello from Object context"
    bl_space_type = "PROPERTIES"
    bl_region_type = "WINDOW"
    bl_context = "object"
 
    def draw(self, context):
        self.layout.operator("hello.hello", text='Bonjour').country = "France (PROPERTiES)"
 
#
#    Menu in window region, material context
#
class MaterialPanel(bpy.types.Panel):
    bl_label = "Hello from Material context"
    bl_space_type = "PROPERTIES"
    bl_region_type = "WINDOW"
    bl_context = "material"
 
    def draw(self, context):
        self.layout.operator("hello.hello", text='Ciao').country = "Italy"
 
#
#    The Hello button prints a message in the console
#
class OBJECT_OT_HelloButton(bpy.types.Operator):
    bl_idname = "hello.hello"
    bl_label = "Say Hello"
    country = bpy.props.StringProperty()
 
    def execute(self, context):
        if self.country == '':
            print("Hello world!")
        else:
            print("Hello world from %s!" % self.country)
        return{'FINISHED'}   
 
#
# Registration
#   All panels and operators must be registered with Blender; otherwise
#   they do not show up. The simplest way to register everything in the
#   file is with a call to bpy.utils.register_module(__name__).
#
 
bpy.utils.register_module(__name__)

Pak de code in een Text-Window van Blender en Alt P (run script)
maak te console zichtbaar boven op de Windows klikken en toggle de Console.
Maak het Blender window iets kleiner zodat je de console kunt zien (of zoals ik het do ik start blender altijd vanuit een console al op, dan hoeft dit niet meer)
Nu zoek je de verschillende plaatsen op waar de button voor hello.hello kan/moet zijn!
Klik er op en kijk wat er in de consolte afgedrukt wordt.

He he, eindelijk (ook voor mij), nu glas-helder.
Titel: belangrijk "Knoff hoff"
Bericht door: PKHG op 23 juli 2014, 17:10:04 pm
Dit tutorial https://www.youtube.com/watch?v=WItCoAzA_XM  (Engels) (is misschien al eerder hier ergens)

is de moeite waard om te zien hoe eenvoudig het tools panels ... kan worden aangepast
Titel: Re: Blender en Python
Bericht door: IJp op 23 juli 2014, 17:59:05 pm
Mooie tutorial en volgens mij kan nu iemand die slim genoeg is een Nederlandse Blender maken. ;)
Titel: Re: Blender en Python
Bericht door: JvL op 24 juli 2014, 16:32:47 pm
Die tutorial wilde ik al gaan volgen na mijn vakantie dus dat komt mooi uit.
Titel: Re: Blender en Python
Bericht door: PKHG op 28 juli 2014, 08:45:08 am
Hmm, het lijkt er op, dat ik alles (wat mijn bijdrages betreft) moet opschonen ... werk voor opa Peter ;-).

Mijn nieuwste ontdekking: In de opdrachten van de Geodesic Dome addon ontstaat een Operator Preset button
En ik heb net ontdekt WAAR daamee alle parameters van het onderwerk worden opgeboren, en dat helemaal automatisch!!! In een iets oudere versie had ik dat zelf geprogrammeerd  maar dat doet nu preset.py voor ...
Nog even uitzoeken welk onderdeel deze button toevoegd ... oh nu eindelijk ontdekt:
de operator class moet slechts dit hebben:  bl_options = {'REGISTER', 'UNDO', 'PRESET'}

Titel: Re: Blender en Python
Bericht door: PKHG op 01 augustus 2014, 12:05:38 pm
Haal de twee sciipts te zien
http://blenderartists.org/forum/showthread.php?344695-addon-develop-using-unittests-who-would-join&p=2697665#post2697665

en maar proberen!

Dat was leren gebruiken van een bmesh !  ging heel erg leuk ;)
Titel: Re: Blender en Python
Bericht door: PKHG op 15 augustus 2014, 15:09:25 pm
Pak het volgende script maar in een text-venster
In het View3D een 'Object' activeren en dan het script maar laten werken!

Dit was eigenlijk maar 3 kliks (in bestaande belichting):

(http://s23.postimg.org/5qfrgyyc7/was_circle.jpg) (http://postimg.org/image/5qfrgyyc7/)

import bpy
import bmesh

#bm = bmesh.new()
obj = bpy.context.scene.objects.active #bpy.data.objects['Plane.002']
bpy.ops.object.mode_set(mode='EDIT')
bm = bmesh.from_edit_mesh(obj.data)
#print(bm.faces[:], bm.verts[:])


#strak Object bpy.ops.object.mode_set(mode='EDIT')


result = bmesh.ops.poke(bm, faces= bm.faces[:], offset =1 , center_mode = 1, use_relative_offset = True)
#print(result)
bpy.ops.object.mode_set(mode='OBJECT')
bm.free()           
[code]

Het komt van bmesh willen bgrijpen, wat het inmiddels alles zo kan!
Titel: Re: Blender en Python
Bericht door: IJp op 15 augustus 2014, 16:39:01 pm
ik heb de code geprobeerd en een cube werd een ster en als je de code daarna weer gebruikt dan krijg je weer andere effecten.
Dit is het effect op een Torus.


(http://s27.postimg.org/w90ime6vj/Torus.jpg) (http://postimg.org/image/w90ime6vj/)
Titel: Re: Blender en Python
Bericht door: PKHG op 15 augustus 2014, 19:30:01 pm
Fijn Wil, dat je het hebt geprobeerd!

Peter
Titel: Re: Blender en Python
Bericht door: IJp op 15 augustus 2014, 19:50:07 pm
Peter als het niet te moeilijk is probeer ik alles ;)
Titel: Re: Blender en Python
Bericht door: PKHG op 28 september 2014, 12:41:16 pm
Roteren rond een as (een 'edge' ) waaraan het een of ander nog vast zit.

Een rotatie in een vlak rond een willekeurig punt R  moet men (denk ik)  zo oplossen:

Schuif het punt R (met wat er en ook wat erbij moet) naar de oorsprong en roteer aldaar het te roteren rest, daarna schuif je alles weer terug.
Althans zo doet men het in het 'complexe vlak' (met behulp van complexe getallen)

Maar nu in 3D, Blender! 3D rotaties daarvoor heeft Blender Quaternionen ...
maar rond een as iets wat er aanhangt roteren om een bepaalde hoek is niet zo gemakkelijk, zonder EEN keer de juiste toelichting ...
Na veel proberen ben ik er uit je kunt dit proberen,
't is voor een gewone Plane ..
import bpy
import bmesh
from math import pi, radians, atan, degrees
from mathutils import Vector, Matrix, Quaternion, Euler

#Make a standard Plane available!!!
plane = bpy.data.objects['Plane']
bpy.ops.object.mode_set(mode = 'OBJECT')
old_location = plane.location.copy()
print("\n*** new *** old_location", old_location)

#PKHG>INFO move origin object to origin
bpy.ops.transform.translate(value = - old_location, constraint_axis=(False, False, False), constraint_orientation='GLOBAL', mirror=False, proportional='DISABLED', proportional_edit_falloff='SMOOTH', proportional_size=1)

bpy.ops.object.mode_set(mode = 'EDIT')

bm = bmesh.from_edit_mesh(plane.data)
inds = [el.index for el in bm.verts]
print(inds)

v0_old = plane.matrix_world *  bm.verts[0].co.copy()
print("global cords vo", v0_old)
#PKHG_INFO global coords v0
v1_old = plane.matrix_world * bm.verts[1].co.copy()
print("global cords vo", v1_old)


#PKHG>INFO move if necessary v0 to origin such that the axis gos through origin and v1
if v0_old != Vector((0,0,0)):
    print("moving")
    for i, ele in enumerate(bm.verts):
        bm.verts[i].co += - v0_old   

#PKHG>INFO rotate now
axis = v0_old-v1_old
a_quat = Quaternion(axis, radians(45)).normalized()
print("(%.2f, %.2f, %.2f), %.2f"    % (a_quat.axis[:] + (degrees(a_quat.angle),)))

#dit maakt de rotatiematrix die gebruikt word, rotatie 45 graad, mag je wijzigen!
a_mat = Quaternion(axis, radians(45)).normalized().to_matrix()
print("\n 1 28 swp new axis=", axis)



for i, ele in enumerate(bm.verts):
    bm.verts[i].co = a_mat * bm.verts[i].co

#PKHG>INFO move back if needed
if v0_old != Vector((0,0,0)):
    print("Moving back")
    for i, ele in enumerate(bm.verts):
        bm.verts[i].co += +v0_old   

bpy.ops.object.mode_set(mode = 'OBJECT')
#PKHG>INFO move origin object back
print("old location = " , old_location)
bpy.ops.transform.translate(value = old_location, constraint_axis=(False, False, False), constraint_orientation='GLOBAL', mirror=False, proportional='DISABLED', proportional_edit_falloff='SMOOTH', proportional_size=1)



EDIT:
Als men goed kijkt gebruik ik de knooppunten 0 en 1 (buren!) men kan dit ook in 2 en 3 of 1 en 2  of 3 en 0 wijzigen om rond andere 'edges' te roteren ...