Topic: Knutselen an Blender 2.32 (of 2.9 (alfa)) met python  (gelezen 7131 keer)


Offline PKHG

  • Member
  • *
  • Berichten: 554
    • Bekijk profiel
« Gepost op: 22 april 2020, 14:26:26 pm »
Jullie weten nog dat ik dol ben om met python aan en in Blender te programmeren,
Dus ik heb wel zin in een hele serie posts te plaatsen erover.
Het zou zoiets zijn:

1. Aanname dat je Blender2.32 op je PC hebt (misschien al Blender2.9 (alfa)
2. Start Blender maar
3. Boven rechts  de Scripting tab klikken

dus  een klik  :)
4. dit zal voor min of meer de rest het uitganspunt zijn van als de webmaster het goed vindt
dit een cursus van mij (andere mogen zeker het een of ander bijdragen, opmerking, vragen etc.) ne niet worden herhaald, maar verondersteld of vervangen door haal je *.blend maar op
(van de vorige keer, dat je hiermee bezig was)

5. Configureren zou men ook zonder Python moeten gaan leren ik zal aanenmen
dat
dat je de "3dVie ..." hebt gezocht, gevonden en met een
klik heb geactiveerd.
De Indices laten zien van een object wordt namelijk mijn eerste leuke script natuurlijk met een toelichting en wat voorbereidende stappen EERST ;)
« Laatst bewerkt op: 22 april 2020, 14:34:13 pm door PKHG »
Doei
       Peter

Offline ijp

  • *
  • *
  • Berichten: 3,998
    • Bekijk profiel
    • IJpart
« Reactie #1 Gepost op: 22 april 2020, 17:33:07 pm »
Ik ga zeker mee kijken Peter.
 

Offline PKHG

  • Member
  • *
  • Berichten: 554
    • Bekijk profiel
« Reactie #2 Gepost op: 22 april 2020, 18:44:29 pm »
ik laat ijp maar in het diepe springen, de kursus komt dus een beetje uitvoriger  :)
dus maak de Sripting zichtbaar, heb een cubus of zo in editmode in je 3dview,
en kopier deze functie

def get_bm_of_obj():
    try:
        bmesh
    except:
        import bmesh
    try:
        Vector
    except:
        from mathutils import Vector
    obj = bpy.context.edit_object
    me = obj.data
    # Get a BMesh representation
    bm = bmesh.from_edit_mesh(me)
    bm.verts.ensure_lookup_table()
    bm.faces.ensure_lookup_table()
    bm.edges.ensure_lookup_table()
    bm.faces.active = None
    return bm


in d python console (werkt in 2.82 en 2.9(alfa)
Type dan:
bm = get_bm_of_obj()
dat gedaan hebbended
list(bm.verts)

De basis van mijn uit te leggen (bijna) addon (<== moet het nog worden)


Doei
       Peter

Offline PKHG

  • Member
  • *
  • Berichten: 554
    • Bekijk profiel
« Reactie #3 Gepost op: 22 april 2020, 19:00:12 pm »
deel 2 (start post gelezen?!)
Eerst mini herhaling over Python, er zijn tal van beginners kusussen op het internet te vinden,
let er op dan je (nog) geen, als, tutorial voor gevorden maar voor beginnelinge bestudeert
en zeker NIET alles op eens!
 1. open Blender en dan Scripting, de Python console is dan beneden links
de een na laatste . boven de 3Dview, dan de Python-editor eronder en tenslotte de INFO editor
In de eerste heb je dus al tientallen (zo niet meer) keren gewerkt we gaan even een mini aantal python dinge doen (om warm te worden)

2.  type de volgende opdrachtn in de Python-console een voor een en elke afsluiten met Enter
12 * 13
a = 'PKHG'
print(a)
getallenlijst_1_10 =  [g for g in range(1,11)]

Voor het eerst genoeg, iets aan uitleg:
men kan met gehele getallen flink rekenen  (eerste) * staat voor vermenigvuldigen.
men kan aan variabelen (hier a) een tekst toekennen  (een = teken!!!) , dat gedaan hebbende kan men
laten zien waarvoor de variabele staat via en print_opdatcht   :)
de laatst is al flink gevorderd aan de variable (hier getallenlijst_1_10) een lijst van getallen
toekennen (komt later nauwkeuriger nog aan de orde)
behalve deze BELANGRIJKE opmerking Python begint het tellen i.h.a bij 0!!!!
en lijsten zijn bijzondere objecten waar we veel mee te maken zullen krijgen!

(opmerking over mijn manier van doen, graag  ;)
Tot binnen kort  Opa Peter
Doei
       Peter

Offline ijp

  • *
  • *
  • Berichten: 3,998
    • Bekijk profiel
    • IJpart
« Reactie #4 Gepost op: 22 april 2020, 23:26:11 pm »
Het eerste lukt bij mij al niet  :o

Offline PKHG

  • Member
  • *
  • Berichten: 554
    • Bekijk profiel
« Reactie #5 Gepost op: 23 april 2020, 06:58:03 am »
Hi Hi, wat precies lukt niet? de addon initializeren?



Deze addon gewoon voor mijn 'kursus' altijd geactiveerd hebben of weer activeren
 
Blender kan men instellen dat wijzigingen in de addons ook voor de volgende keer actief
zijn, even kijken waar dat nog alweer zit ;-) kom zo dit verder editeren ...
volgende plaatje (via edit boven Preferences klikken)
Beneden links die 3 strepen ... snappen en doen desnoods in automatisch ... ; :)

« Laatst bewerkt op: 23 april 2020, 07:10:14 am door PKHG »
Doei
       Peter

Offline PKHG

  • Member
  • *
  • Berichten: 554
    • Bekijk profiel
« Reactie #6 Gepost op: 23 april 2020, 08:10:54 am »
Deel 3a : controle of je de te gebruiken addon automatisch actief hebt.
Dat kun je zo doen:
1. Blender starten en  Scripting klikken
2. in de Python-console type je :  Vector((1.1.1))   (Enter toets)
Als er GEEN foutmelding komt zit het vrij zeker al goed
3. 2 met succes uitgevoerd dan in de onmiddelbaar volgende opdracht dit typen:
S111= _
dan moet in het 3dView dit te zien zijn:



S111 is in het 3D vieuw nu precies in de ruimte op plaats (x,y,z) = (1,1,1) te zien  :D
Ruimtelijke plaatsen hebben (zeker in Blender) 3 getallen nodig voor x , voor y, en voor z
die men samengevat zo schrijft (x_waarde, y_waarde_, z_waarde)  tussen ronde haakjes

maak maar wat voorbeelden in de python console (b.v. (34, 5/6, 0.45)) (gelukt toch?)
Overigens dit levert in de Python console een zogenoemd 'tuple' op, iets met ... python objecten tussen RONDE haakjes.
Doe maar dit  : mijnEersteTupel = (1, 'ik was hier', "Ik ook") en dan maar
mijnEersteTupel[1]
en daarna : len(mijnEersteTupel)  (moet een 3 afleveren)
en dan: len((0,1,2,3,4,5))   , det betekent m.b.v. de Python functie "len" kun je het aantal
objecten in een tupel (maar ook alles wat Python als een lengte hebben weet, komt zo een
bijna zelfde voorbeeld)

Nu herhalen wij het vorige voorbeeld maar vervangen ronde haakjes door vierkante haakjes:
mEL = [1, 'ik was hier', "Ik ook"]
mEL  heb ik in plaats van mijnEersteLijst geschreven/gebruikt
Iets tussen 4kante haakjes levert in Python namelijk iets op, dat LIJST wordt genoemd.

lijst en tuple lijken toch eigenlijk veel op elkaar, WAT IS DAN HET VERSCHIL????
als men een tuple of lijst (De python naam is "list") heeft aangemaakt (en b.v. aan een VARIABELE  heeft toegekend)
Dan is een TUPLE niet meer te veranderen, en een LIJST  wel!

Oefeningetje (in de Python-console):
lijst_via_tuple = list(("ik ben het eerste element", "en ik het tweede"))
len(lijst_via_tuple)
lijst_via_tuple[0]
lijst_via_tuple[1]

Raar of niet? Oorzaak Python begin tellen met 0 !!! Moet men aan wennen en dus onthouden!
Herhalen maar nu met een lijst bij het aanmaken
 
lijst_via_list = list(["ik ben het eerste element", "en ik het tweede"])
(zie je het mini verschil?) en voor het afmaken van dit voorbeeld weer
de lengte het 0de en 1ste element (van lijst_via_list opvragen)

En waarvoor heb ik dit te bestuderen geschreven?
De driedimensionale punten in Python zijn wiskundig gezien Vectoren  en daar moet men
helaas een klein aantal dingen weten , en wij doen dat met Python in een console van Blender

Dus als Vector((1,1,1)) of zo in de console niet werkt (de addon waar ik het over heb is NIET geactiveerd) moeten wij aan Blender het benodigde hulpmiddel binnen halen en dat gaat ZO:

from mathutils import Vector   (je ziet in de naam  dat het  met Wiskunde = Mathmatic = Math te maken heeft) , vectoren in de wiskunde zijn dinge waarmee men het een of ander kan doen: optellen van vectoren, aftrekken van vectoren , een vector met een getal vermenigvuldigen.

Goed, dit lange verhaal sluiten we af met deze oefening:
A) Open Blender en klik Scripting
B) in de python console dwing je af dat Python nu weet wat het met iets moet doen dat een Vector met 3 getallen , zeg driedimensionale vector is, kan doen, dus:
from mathutils import Vector
v1 = Vector((1,2,3))
v1Plusv1 = v1 + v1
v1Plusv1

Gesnapt? Overigens als de addon "Math vis" actief is dan zie je er TWEE nieuw (roodachtige) punten in het 3Dvies met er bij de namen v1 (op de plaats van v1) en v1Plusv1 (op de daarbij horende  plaats, waarvan in de console nu Vector((2.0, 4.0, 6.0)) te zien is.
Optellen van vectoren gaat dus ... (vul zelf in, hi hi)

lekker lang  en je moet het allemaal wel onthouden, ja ja, zo is dat nu eenmaal  :)
Doei
       Peter

Offline ijp

  • *
  • *
  • Berichten: 3,998
    • Bekijk profiel
    • IJpart
« Reactie #7 Gepost op: 23 april 2020, 10:29:13 am »
Sorry Peter ik weet het nu weer ik heb dit met jou al eens eerder geprobeerd en toen ben ik ook afgehaakt Zoals nu  :(
Jammer Peter ik kan dit allemaal niet verwerken in mijn hoofd dus ik zal weer moeten afhaken.
Hopelijk zijn er andere leden die deze python cursus gaan volgen.
Sorry mij gaat dit niet lukken. :(

Offline PKHG

  • Member
  • *
  • Berichten: 554
    • Bekijk profiel
« Reactie #8 Gepost op: 23 april 2020, 11:49:35 am »
ijp, heb je een email gestuurd , wat ik bedoel wordt hopelijk met de volgende twee plaatjes
zichtbaar en hopelijk aanmoedigend  ;)




Het eerste is een plaatje hoe het uitziet als ik een aantal vertices van een circel met nr.s
voorzie,
Het tweede min of meer identiek alleen nu (uitgeknipt) voor edges
 :)
Doei
       Peter

Offline PKHG

  • Member
  • *
  • Berichten: 554
    • Bekijk profiel
« Reactie #9 Gepost op: 23 april 2020, 12:17:02 pm »
Kun je dit ophalen?
Reactie van wie dan ook

Ha ha, bij mij met werkt het meteen  ;-)

Helaas foutje, niet de nieuwste ... doe ik na het eten ...
https://pkhg.nl/Apr23_dbc_1109_5._for_dbc.blend

Ok werkt, mini toelichting. Er is een stuk in blauwe achtergrond te zien na openen
die copier je in de python-console (links onder) en afsluiten met Enter
dan typ je
a,b,c = show_   (tab toets word daarmee aangevuld tot
a,b,c = show_indices(     aanvullen met: 0, [2,3 ,4])   en Enter

en als laatste nog dit
for v in c:
    exec(v)

en de gekozen indices 2,3,4 worden zichtbaar ...
« Laatst bewerkt op: 23 april 2020, 13:02:06 pm door PKHG »
Doei
       Peter

Offline koos2

  • Member
  • *
  • Berichten: 2,014
    • Bekijk profiel
« Reactie #10 Gepost op: 25 april 2020, 10:39:29 am »
Wat een voorrecht dat PKHG weer actief is. Ik heb deze topic nog niet gelezen want dat kost me nu te veel tijd, maar ik ga het zeker doen. Ik wil alleen even zeggen dat ik blij ben dat je weer van de partij bent.

Offline PKHG

  • Member
  • *
  • Berichten: 554
    • Bekijk profiel
« Reactie #11 Gepost op: 12 oktober 2020, 15:09:38 pm »
Hi allemaal,
Heb sinds kort
Blender herontdekt en moest verschrikkelijk wennen. Al die verbeteringen, en waar wat  te vinden is ...

Heb cursussen (van mensen die bij Blender foundation werken) gevolgd.
En een ervan was helemaal naar mijn smaak:
hoe maak je een addon uit een werkend iets, en is inmiddels gelukt.
bij blender.chat was er de vraag: hoe kan ik nagaan op alle vertices van een object (een soort NGON, zoals de bodem van een cone )  . Haal je het toppunt van een cone weg, dan blijft er een ngon over en is vlak. maar til je dan een van de vertices een stuk omhoog of zo, dan is het object niet meer vlak,
omhooggetild punt stoort dus.

Ik hoop dat dit duidelijk is. Net een probleem voor mijn :).
het werd in eerste instantie een gewone functie , die ook numpy !!! gebruikt.
omdat men met 3 vectoren een object kan maken dat of vlak of iets voluminues iets (parallellepiped dacht ik) . Dat heb ik dus met een for-loop
gedaan EN hoe krijg je het volume te pakken? Als je weet dat een
determinant (lineaire algebra) van 3 3D-  vectoren dat uitrekent was numpy  met numpy.linalg.det(...) DE makkelijke oplossing EN numpy is in
Blender (nieuwste versies zeker) aanwezig.

Na ja met nog veel vallen en opstaan gelukt :) maar nu eerst de link
https://cloud.blender.org/courses
en dan "Scripting for Artists"  door Dr. Sybren, niet aangemeld kan men zeker de inleiding en een aantal andere tutorial van hem zien (kreeg een 10 van mij)

Goed das was dat dan voor gedag zeggen ...

Zoals jullie misschien nog weten ik sta open voor vragen, zeker wat Python in Blender betreft
Doei
       Peter

Offline koos2

  • Member
  • *
  • Berichten: 2,014
    • Bekijk profiel
« Reactie #12 Gepost op: 14 oktober 2020, 09:30:49 am »
Nog een paar maanden wachten dan ga ik met pensioen. Hopelijk heb ik dan eindelijk tijd om naar Pyton te kijken.

Offline PKHG

  • Member
  • *
  • Berichten: 554
    • Bekijk profiel
« Reactie #13 Gepost op: 14 oktober 2020, 10:46:23 am »
Nog een paar maanden wachten dan ga ik met pensioen. Hopelijk heb ik dan eindelijk tijd om naar Pyton te kijken.

Hi Koos, Python (met h , hi hi) is inmiddels een van de leidende programmeertalen.
Zelfs ingewikkelde rekenpartijen, die men dacht dat die met C of ..  gecompileerde versies van andere talen, veel sneller zouden zijn als een in principe ge├»nterpreteerde taal zoals (voor normale gebruikers) Python is inmiddels achterhaald (als men maar weet hoe dat in Python ook kan, de kenners hebben vergeleken en Python [juist met hulpmiddelen gebruikt] halen die snelheid ook.

Men kan zooo veeel zonder kosten erbijhalen, b.v. numpy, scypy, tensorflow, noem maar op. Dat voor elk wat wils aanwezig  kan zijn.

HIER is dus Python voor Blender interessant! Heb je iets leuks bedacht en moet hetgeen MEER dan zeg 2 keer gedaan worden, dan is programmeren met  Python mijn advies. En zeker als je iets meerder 100 keer nodig hebt!

En leuk is dan, met een beetje knoff hoff (know how) kan men er dan een
add-on voor blender van maken voor jezelf maar daarom dan ook voor vrienden of andere geïnteresseerde .

Heb je al programmeer kennis van welke (andere) programmeetaal, dan is de overgang naar Python vrij eenvoudig (voor de meeste wensen).
Zo niet: dan zei dit gezegd: er zijn boeken: Programmeren voor Kinderen (8-12 j.) met Python.

na ja ... ik wacht dan maar op je pensionering ;-)
Doei
       Peter