KiCAD - plocha/procento medi na PCB

ruzne programy,konverze dat, digitalizace, atd...
lapa
medaile za lepsi forum
Příspěvky: 2909
Registrován: 6. 5. 2009, 7:18
Bydliště: Praha

13. 3. 2025, 9:17

pifko:

Tak stridave uspechy:
* Nejdriv jsem bojoval se slash/backslash v ceste k programu/skriptu cu.py (nazval jsem ho stejne jako ty v tom prikladu) - ač jede ve Win, chce Unix like path - to mi nedošlo :) - ty slash v příkladu máš, ale myslel jsem, že jedeš v Unix/Linux prostředí.
* Pak se podarilo spustit, ale boj s kodovanim v odsud zkopirovanem skriptu - vyreseno kompletnim zrusenim diakritiky (nez abych bojoval s umistenim definice kodovani do skriptu)
* pak drobna syntakticka chyba (asi preklep) ve skriptu: print(f"...

No a pak prvni problem s tim, ze nejaky popisek, co jsem chtel vyleptat na spodni desku PCB, jsem oznacil jako vrstvu B.Cu misto DwgsUser a z toho chyba TEXTE... nema atribut item.GetArea.
Text jsem zmenil do vrstvy DwgsUser a poposlo to dal :) .

Ted jsem se zariznul na chybe
if item.GetLayer() in layers:
AttributeError: 'BOARD' object has no attribute 'GetFootprints'

a s tim si momentalne nevim rady.
Koukam do objektoveho modelu KiCADu (BOARD jako nejvyšší objekt a jeho metody), ale chce to hlubsi studium nebo upravit nejak skript, aby BOARD ignoroval.
Ale toho se nebojim, alespon si obcerstvim objektove programovani.
Python se mi libi cim dal vic :lol:.

Budu bojovat :).

Moc diky za pomoc s konzoli a ten skript.
Kostka těžko vysvětlí úsečce, natož bodu, že život má i jiné dimenze než má ten jejich ...
Uživatelský avatar
Thomeeque
Příspěvky: 9340
Registrován: 30. 1. 2012, 10:20
Bydliště: Mimo ČR

14. 3. 2025, 8:18

Tu mojí poznámku ohledně nepřesnosti jsi přehlédl nebo k tomu jen nic nemáš?

Pokud přesuneš text do jiného layeru, nezapočítá se ti (další nepřesnost).

Na boardu mohou být i další prvky, například zóny (alá ground plate). Nicméně s těmi to bude ještě nepřesnější, zřejmě ti vyjde více mědi, než kolik na desce bude před leptáním. Taky by se u nich musel zohledňovat fill mode a další legrácky.

Pokud chceš spolehlivou rozumně přesnou hodnotu pro všechny možné scénáře, troufám si tvrdit, že tímto stylem nemáš šanci. Spolehlivá cesta je přes render do bitmapy (primitivní, ale účinná). Nenašel jsem možnost exportu do bitmapy, ale generuje to SVG, s tím už by se dalo pracovat..

GetArea chybu můžeš řešit pomocí hasattr (ve smyslu, že nespadne program, plocha prvku se samozřejmě nezapočte).

Kód: Vybrat vše

import pcbnew

def calculate_copper_area():
    pcb = pcbnew.GetBoard()
    layers = [pcbnew.F_Cu, pcbnew.B_Cu]
    total_area = {layer: 0 for layer in layers}

    for item in pcb.GetDrawings():
        if item.GetLayer() in layers:
            if hasattr(item, "GetArea"):
                total_area[item.GetLayer()] += item.GetArea()
            else:
                print(f"Ignored item: {item.GetClass()}")

    for zone in pcb.Zones():
        if zone.GetLayer() in layers:
            total_area[zone.GetLayer()] += zone.GetBoundingBox().GetArea()

    for module in pcb.GetFootprints():
        for pad in module.Pads():
            if pad.GetLayer() in layers:
                total_area[pad.GetLayer()] += pad.GetBoundingBox().GetArea()

    for track in pcb.GetTracks():
        if track.GetLayer() in layers:
            total_area[track.GetLayer()] += track.GetWidth() * track.GetLength()

    nm2_to_mm2 = 1e-12

    print("\n**Celkova plocha Cu na PCB:**")
    for layer, area in total_area.items():
        print(f"- {pcbnew.LayerName(layer)}: {area * nm2_to_mm2:.2f} mm2")

if __name__ == "__main__":
    calculate_copper_area()
Jinak:
- print(f" není překlep, asi jsi tam měl jinou chybu
- na problém 'BOARD' object has no attribute 'GetFootprints' jsem nenarazil (projel jsem několik dem)
- program pouštím v KiPython konzoli takto:

Kód: Vybrat vše

exec(open("/Users/thmq/IdeaProjects/MiscUtils/KiCAD/chat.py").read())
mimooborová naplavenina • kolowratský zázrak™ • NPS • GCU • HirthCalc • ncDP.ino
lapa
medaile za lepsi forum
Příspěvky: 2909
Registrován: 6. 5. 2009, 7:18
Bydliště: Praha

14. 3. 2025, 9:11

Tomiiik:
Vsechno respektuji, ale zjistil jsem dost zasadni problem - ze mam verzi 5.1.12 a moc vyssich asi nepujde do Win7 64bit spustit ... :lol:.

Ta 'BOARD' object has no attribute 'GetFootprints' prave souvisi s verzi - jedno forum/web to presne popsal ...

Jestli se ty tebou popsane chyby v plochach nascitaji, tak do bude asi v nizsich desitkach procent - coz je i tak pokrok vuci dosavadni skoro uplne neznalosti/nesledovani vzhledem k cili - odhad vycerpanosti chloridu :).

Zatim jsem ten skript orezal tak, ze alespon nepada a dava nejake vysledky - bude dalsi badani.

Vzhledem k tomu, ze jsem vubec neznal Python ani objektovy model pcbnew jako takovy, jsem spokojen ...
Beru to cele jako hobby - coz nekomu muze pripadat dost nevazne ...

Jak se da v te konzoli donutit, aby zapomnel posledni importovany skript a nacetl jeho novou verzi?
To jsem neobjevil a nez jsem zjistil, ze z nejakeho duvodu nerefreshuje puvodne importovany skript jeho novym importem, tak jsem se dost vztekal, proc spousti porad tu puvodni verzi?

Zatim vsem dik.
Kostka těžko vysvětlí úsečce, natož bodu, že život má i jiné dimenze než má ten jejich ...
lapa
medaile za lepsi forum
Příspěvky: 2909
Registrován: 6. 5. 2009, 7:18
Bydliště: Praha

14. 3. 2025, 9:32

Tomiiik:
Ten tvuj zpusob spousteni mi vyresil to mnou dotazovane neimportovani aktualizovane verze skriptu.
Dik.
Kostka těžko vysvětlí úsečce, natož bodu, že život má i jiné dimenze než má ten jejich ...
Uživatelský avatar
Thomeeque
Příspěvky: 9340
Registrován: 30. 1. 2012, 10:20
Bydliště: Mimo ČR

14. 3. 2025, 12:42

Bezva 👍

Kdyby sis chtěl výsledky s něčím porovnat: https://thmq.mysteria.cz/pcbCu/

Screenshot 2025-03-14 at 13.40.54.png

:) T.

PS: Umí to i SVG, akorát to zatím výstup z KiCADu otevírá v dost malém rozlišení, to ještě zkoumám..

Screenshot 2025-03-14 at 13.46.01.png
mimooborová naplavenina • kolowratský zázrak™ • NPS • GCU • HirthCalc • ncDP.ino
lapa
medaile za lepsi forum
Příspěvky: 2909
Registrován: 6. 5. 2009, 7:18
Bydliště: Praha

14. 3. 2025, 3:51

Tomiik:
Dik za odkaz, muzu s tim porovnavat.

No napadlo mne te inspirovat, ze bys tam jeste dal hodnotu pixelu copperPixels prevedenou na cm2, mohl bych v tom svem pinozeni na KiCAD.PCBNEW zpomalit.
Pokud bys znal DPI (mozna z obrazku) a/nebo rozmery desky (zadal by uzivatel nebo se da asi spocitat z tvych board udaju a DPI), mozna by to slo.
Je to challenge :) ?
Kostka těžko vysvětlí úsečce, natož bodu, že život má i jiné dimenze než má ten jejich ...
Uživatelský avatar
Thomeeque
Příspěvky: 9340
Registrován: 30. 1. 2012, 10:20
Bydliště: Mimo ČR

14. 3. 2025, 4:04

SVG obrázek, vygenerovaný KiCADem, fyzické rozměry obsahuje, takže by to mělo jít celkem snadno, měl jsem to v plánu, až se popasuju s tím nízkým rozilšením 👍 Jen jsem to už dnes musel nechat být, poladim časem..
mimooborová naplavenina • kolowratský zázrak™ • NPS • GCU • HirthCalc • ncDP.ino
lapa
medaile za lepsi forum
Příspěvky: 2909
Registrován: 6. 5. 2009, 7:18
Bydliště: Praha

14. 3. 2025, 4:53

Thomeeque píše: 14. 3. 2025, 4:04 SVG obrázek, vygenerovaný KiCADem, fyzické rozměry obsahuje, takže by to mělo jít celkem snadno, měl jsem to v plánu, až se popasuju s tím nízkým rozilšením 👍 Jen jsem to už dnes musel nechat být, poladim časem..
Nespecha to, uz tak je to pekne ... :)
Kostka těžko vysvětlí úsečce, natož bodu, že život má i jiné dimenze než má ten jejich ...
Uživatelský avatar
Thomeeque
Příspěvky: 9340
Registrován: 30. 1. 2012, 10:20
Bydliště: Mimo ČR

15. 3. 2025, 7:47

Je to tam :) T.

Screenshot 2025-03-15 at 20.47.20.png
mimooborová naplavenina • kolowratský zázrak™ • NPS • GCU • HirthCalc • ncDP.ino
lapa
medaile za lepsi forum
Příspěvky: 2909
Registrován: 6. 5. 2009, 7:18
Bydliště: Praha

16. 3. 2025, 8:51

Paráda.
Kostka těžko vysvětlí úsečce, natož bodu, že život má i jiné dimenze než má ten jejich ...
Odpovědět

Zpět na „Ostatní software“