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


Offline PKHG

  • Member
  • *
  • Berichten: 539
    • 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,975
    • Bekijk profiel
    • IJpart
« Reactie #1 Gepost op: 22 april 2020, 17:33:07 pm »
Ik ga zeker mee kijken Peter.
 

Offline PKHG

  • Member
  • *
  • Berichten: 539
    • 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: 539
    • 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,975
    • 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: 539
    • 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: 539
    • 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,975
    • 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: 539
    • 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: 539
    • 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: 1,992
    • 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.