Portál AbcLinuxu, 30. dubna 2025 15:28
Čumákuju, že jsem tu dost možná minulým blogpostem spustil lavinu, což je jedině dobře. Takže k věci: blog bude mít tři díly. V tomto budu řešit parametry, v druhé části ukážu draft gui, jehož potřebu dokonalého vzhledu jsem zmínil minule. V třetím bych rád navrhnul první část uživatelské interakce a princip práce a konstruování v programu.
Předpokládám, že společným cílem je PARAMETRICKÝ cad. To slovo jsem vykřičel, protože je naprosto zásadní a parametry jsou v cadu naprosto dokonalá věc. V zásadě a velmi zjednodušeně v parametrickém cadu nemáme kvádr 50x60x70 milimetrů, ale kvádr, jež je určen parametry AxBxC, jejichž velikost si můžeme určit při vytváření na těch 50x60x70 a poté je neomezeně měnit. Změna parametru má vliv na vše, co je k němu navázáno.
Vezměme si jekl 60x40 z vobrázku. Vše je na něm parametrické. Mohu kliknout na jakoukoliv míru a přepsat ji.
Zatím ty parametry vypadají jako nic moc, ale pokračujme dále. Udělejme si do jeklu díru pro vosmičku šroub. Pozici zvolíme 20 mm zepředu a 10 mm od stěny.
Kvůli tomu, že díra má parametr „hele vole buď 10 mm vod stěny“ se nám díra bude držet 10 mm od stěny. I v případě, že z prvního kroku změníme parametr šířky jeklu třeba na 60 mm. Když do díry vložíme šroub, který bude mít parametr, že bude souose s dírou, tak se po změně šířky jeklu přesune i díra a s ní i šroub.
Tento příklad je sranda srandoucí, ale ve velkých sestavách je to krutopřísně velemocné. Řekněme, že chceme zkonstruovat kadibudku a vystřelit na gumovém lanu. Začneme zvolením hlavních parametrů - půdorysem a výškou. Načrtneme tedy čtvereček 1000x1000 mm. Uděláme jeho kopii a nastavíme jí parametr, aby byla dva metry nad ním. Tím máme stanoveny hlavní rozměry a začneme umísťovat jekly, jejichž délka bude určena parametricky čtverečky. Na jekly plácneme boční plechy, které budou určeny velikostí jeklů. Dále přidáme dřevěnou placku se serdírou a stříšku. A nyní další geniální přínos parametrů: všem dílům nastavíme parametr hustoty. Tím se nám při každé změně přepočítá i těžiště. Nahoru přivaříme jekl, jež v jedné ose nebude umístěn vůbec k současným dílů, ale k celkovému těžišti sestavy. Na stejný jekl přivaříme oko, které bude mít parametr na střed jeklu v jedné ose a těžiště v ose druhé. Takže budeme mít boudu vždy pěkně svisle :) Nyní máme parametrickou sestavu, takže když budeme chtít kadibudku pro dva lidi, tak jen změníme základní čtvereček na 2000x1000 mm a změní se nám vše, od jeklů, bočních stěn, těžiště, polohy horního oka, šířky serdíry....
V dobře udělaném a inteligentně navrženém parametrickém modelu třeba formulky tak jde na jedno kliknutí změnit třeba rozvor a změní se nám kompletně všechno, včetně výrobních výkresů, kusovníků materiálů, naprogramovaných cnc drah atd atd.
Doufám, že parametry byly pochopeny, takže jdu spinkat, pokračování příště.
P.S. Nechoděj emaily z cadus org, po registraci vypisuje drupal chybu.
Tiskni
Sdílej:
Ale už se začaly kreslit nějaké ty obrázky.Sarkasmus?
Vždyť píšu o iteracích.Rikej si tomu jak chces, ale pokud neuvedes, co ta iterace ma obsahovat nebo jak dlouho ma trvat, ma to informacni hodnotu nulovou.
Ale tohle je větší systém, ne nějaký skript, kde by člověk prostě sedl a hned začal psát.Prave ze uz jsem videl spoustu projektu, ktere dojely na tom, ze se vic ,,schuzovalo'' a ,,malovalo'' nez programovalo. Nechci syckovat, ale nejak tu zatim postradam cloveka, ktery by mel jasno v tom, co chce delat, jak to delat a na mesic si sednul a naprogramoval prototyp. Aktualni pristup, kdy se vymysli CAD-pro-vsechno, mi notne pripada jako design by committee, coz moc casto dobre nekonci.
Rikej si tomu jak chces, ale pokud neuvedes, co ta iterace ma obsahovat nebo jak dlouho ma trvat, ma to informacni hodnotu nulovouViz iterace v RUP/OpenUP metodice, žádné pětiletky
Aktualni pristup, kdy se vymysli CAD-pro-vsechno, mi notne pripada jako design by committee, coz moc casto dobre nekonci.Nic se nesmí přehánět… ale zase kdyby se začalo hned programovat, tak můžou být v návrhu chyby, které to znemožní použít pro některé účely… mohl by to být příliš jednostranně zaměřený software, který bude vyhovovat tomu, na co si programátor zrovna vzpomněl, ale na spoustu věcí, které uživatelé potřebují, nebude stavěný a bude se to tam muset dobastlit.
ale zase kdyby se začalo hned programovat, tak můžou být v návrhu chyby, které to znemožní použít pro některé účelyja se priznam, ze jsem spis ten zdrzenlivy typ a proto mam problemy se tak sebejiste k vsemu moznemu vyjadrovat. Ale kdyz to predrecnik nacal, tak se osmelim. Predne mi neni jasne, jak to ma formalne fungovat. Na tom tracu jsou jakesi podlkady, ktere jsou ted jako nejaky uz hotovy navrh? A nebo se ma k tomu diskutovat. Treba priklad. Pan Kufner tam pise , ze vsechno bude komunikovat pres slot/signal. Ja si myslim, ze to je volovina , ale kde se to ma napsat. Tady? A nebo jsem nikde nenasel , co pana Kufnera k tomu 'velkemuObrazku' vedlo. To si ma ted clovek domejslet, co ho k tomu vedlo a nebo to bude nekde popsano. Pak je tam velka cast textu, kde jsou utrzkovite popsany jakesi vlastnosti nejakch CAD systemu. Smysl toho mi skutecne unika. Ne ze by to bylo uplne zbytecne, ale postradam takovou zakladni diskuzi o tom, co skutecne delat. Ocekaval bych, ze tam nekdo napise, ze bezne CAD free systemy jsou ve fazi prototypu nejdrive po 7 letech (gcad3d) , vetsinou po 10 letech a to jeste porad nic neumi. Jako prvni bych vedl diskuzi o tom, jake cesty vedou k tomu to urychlit. V cem udelaly vsechny ty projekty chybu, ze to trva tak dlouho. To, ze nejaky MegaCAD ma peknou ficurku v tomhle a onom je irelevantni malickost. Ja bych proste na zacatku spis potreboval nejake schema toho, jak funguji minimalne 'uvnitr' ty stavajici systemy. A to bych podrobil kritice a na tom stavel.
Na tom tracu jsou jakesi podlkady, ktere jsou ted jako nejaky uz hotovy navrh? A nebo se ma k tomu diskutovat.Je to k diskusi. Koukni na historii v tracu, já jsem tam kreslil trochu jiný obrázek, pořád se to vyvíjí a ujasňuje… Jestli myslíš, že je něco blbost a napadá tě, jak to udělat líp, tak si to nenechávej pro sebe a napiš to do tracu nebo sem.
To si ma ted clovek domejslet, co ho k tomu vedlo a nebo to bude nekde popsano.To je právě ta analýza a návrh, která teď probíhá – a proto je mj. blbost teď hned začít programovat, než se rozmyslí některé věci.
Pak je tam velka cast textu, kde jsou utrzkovite popsany jakesi vlastnosti nejakch CAD systemu. Smysl toho mi skutecne unika.Musíme vědět, v jakém prostředí se pohybujeme, mít přehled, co nabízí konkurence, inspirovat se a taky vymyslet, v čem budeme lepší (vyřešit nedostatky stávajících CADů). Zatím je to tam v pár bodech, ale chtělo by to podrobnější rozbor a posbírat víc zkušeností od uživatelů.
Ocekaval bych, ze tam nekdo napise, ze bezne CAD free systemy jsou ve fazi prototypu nejdrive po 7 letech (gcad3d) , vetsinou po 10 letech a to jeste porad nic neumi. Jako prvni bych vedl diskuzi o tom, jake cesty vedou k tomu to urychlit.Řešení je prosté: pracovat na tom intenzivněji, ne jen sem tam, když má někdo volnou chvíli a nemá nic lepšího na práci. Otázka je, kde na to vzít.
To, ze nejaky MegaCAD ma peknou ficurku v tomhle a onom je irelevantni malickost.Funkcionalitu, která se bude implementovat, je potřeba vhodně nakombinovat – musíme dát uživatelům to, co nezbytně potřebují k práci + něco navíc, třeba nějakou jednu vybranou vlastnost o řád dražšího CADu, než teď používají, nebo něco úplně nového.
A to je NM oproti tomu, na co se chystáte vy, velice jednoduchý systém.No právě.
vzhledem k tomu, že součástí návrhu je, že se různé části systému překlopí/přizpůsobí jiným částem podle potřebyStrašně záleží na konkrétní realizaci – jak jsou sdílené společné struktury/třídy/rozhraní, co se např. stane, když na jednom konci systému něco změním – selže kompilace, začne to nečekaně padat při běhu programu, nějak se to s chybou vyrovná a ošetří ji to… Pokud to chceš udělat pořádně, stejně potřebuješ mít definovaná rozhraní. U rozhraní definovaných jádrem je to celkem jednoduché – každý modul závisí na jádře. Složitější je to u rozhraní, která jsou definovaná v modulech – jeden modul závisí na druhém a musí spolu nějak sdílet část kódu.
vsechno bude komunikovat pres slot/signal. Ja si myslim, ze to je volovinaSignály/sloty jsou akorát syntaktický cukr (neříkám, že nejsou fajn) a totéž jde obstarat pomocí posluchačů událostí. Ale to není až tak podstatné – důležité je:
Signály/sloty jsou akorát syntaktický cukr (neříkám, že nejsou fajn) a totéž jde obstarat pomocí posluchačů událostí.Asi hloupý dotaz, ale… V tom je nějaký rozdíl?
Kdo bude zodpovědný za propojení signálů/slotů (nebo za registraci posluchačů událostí)V Tracu teď je:
Modules does not connect themself, they are connected together by the glue (script engine).jak se ale zařídí napojení nového modulu k tomu zbytku? Dejme tomu, že si napíšu vlastní modul nebo stáhnu nějaký z Iternetu. Pak je potřeba upravit i to „lepidlo“. To bude dělat uživatel ručně? Neměl by pak být modulární i ten skript/lepidlo? Resp. každý modul by přinášel dynamickou knihovnu + kód, který zajistí napojení na zbytek.
Asi nejlepší bude dodat spolu s modulem i kousek dodatečného lepidla, který bude použit lepidlem aplikace k napojení modulu.Může být (i když stále mi nesedí skript jako centrální bod aplikace). Ale je potřeba vyřešit sdílení kódu/rozhraní mezi moduly, které na sobě závisí. Např. modul A produktuje objekt X a modul B ho chce používat.
ale zase kdyby se začalo hned programovat, tak můžou být v návrhu chyby, které to znemožní použít pro některé účely…no co, tak by byly v navrhu chyby, ... ze kterych by se dalo poucit, ted nemate nic... hezky to vystihuje Paul Graham: Good design is redesign. osobne se mi vic libi pristup toho cloveka, co tu programuje ten 3D engine/programovaci jazyk, ... taky to neni jednoducha vec, presto nediskutuje a programuje a projekt se hybe kupredu, ...
no co, tak by byly v navrhu chyby, ... ze kterych by se dalo poucit, ted nemate nic... hezky to vystihuje Paul Graham: Good design is redesign.Čím později se chyba odhalí, tím je její oprava dražší – analýza, vývoj, testování, produkční nasazení. Jistě že chybu můžeš opravit i v pozdějších fázích, ale spotřebuješ na to víc zdrojů – které se mohly využít k něčemu užitečnému, kdyby se díky správné metodice nevyplýtvaly. Ve výsledku pak při bezmyšlenkovité živelné implementaci dodáš méně funkcionality nebo méně kvalitní produkt při využití stejných zdrojů.
taky to neni jednoducha vec, presto nediskutuje a programuje a projekt se hybe kupredu, ...Třeba o tom nediskutuje veřejně, ale věřím, že o tom sám dost přemýšlel, než začal psát kód.
kdyby se díky správné metodice nevyplýtvalyKdyz si myslis, ze je mozne nahradit zkusenosti metodikou, budiz.
Ve výsledku pak při bezmyšlenkovité živelné implementaci dodáš méně funkcionality nebo méně kvalitní produkt při využití stejných zdrojů.Ale ja nerikam, ze se to ma implementovat bezmyslenkovite. Jak uz jsem psal nekde jinde, tak dle meho projektu chybi clovek, ktery uz nekdy CAD programoval (byt treba neuspesne) a mel by schopnost ten projekt vest aspon v prvni fazi a mel by zaroven schopnost navrhnout a naprogramovat zaklad.
Fandim obema projektum (a i vsem ostatnim), ale v tomto pripade by opravdu bylo dobre najit si nekoho, kdo to tedy bude programovat.Vidim to stejne.
Jentak mimochodem k týmové spolupráci (původně se říkalo BitTorrent), co tak založit to na protokolu XMPP/Jabber? Stejným způsobem to mělo fungovat u Inkscape, bohužel to ale mělo chyby a už na tom nikdo nepracuje
Netuším teda jak na to (nejsem programátor), možná by se to dalo používat v režimu MUC (inspirace u IRC), ale příjde mi to jako dobře dostupná komunikační cesta. Jestli by se posílaly změny jako zprávy nebo jako patch soubory v base64 už je jedno.
Pokud by se použil MUC, tak by se z "historie chatu" dal zpětně postavit model a zdokumentovat průběh tvorby Když se připojí další tvůrce, tak si Cadus stáhne historii chatu a dál sleduje chat.
(snad jsem nenapsal nějakou kolosální blbost)
Já to vidím tak, že by se Cadus připojil na MUC, z historie si vytáhnul co se událo od založení chatu (podobně jako import souboru) a potom by jen sledoval chat.
Například když uživatel abc udělá díru do traverzy, tak jeho Cadus pošle do MUC popis akce (udělej takovou a takovou díru na tom a tom místě). Pokud se zpráva během určité doby (třeba sekunda) neobjeví v MUC, pokusí se ji poslat znovu. Jakmile se zpráva objeví v MUC, tak Cadus ostatních uživatelů provede danou akci, například tedy vytvoří díru v traverze. V případě duplikátních záznamů se duplikátní data ignorují (aby nevznikly tři stejné díry na stejném místě).
Je to asynchronní (na nikoho se nečeká), programy jednotlivých uživatelů si hlídají, že se jejich změny opravdu dostaly do chatu a osobně si myslím, že by to mohlo fungovat.
V případě ideální sítě (nulová prodleva, žádné ztracené pakety) by se to dalo teoreticky udělat následovně:
- jakýkoli Cadus pošle do MUC popis akce k vykonání, sám neudělá nic
- jakýkoli Cadus si akci v MUC přečte a vykoná ji - tedy i ten, který akci zadal
Samozřejmě v reálném světě by to nefungovalo dostatečně rychle a při ztrátě paketů by se nevykonalo nic Ideálně tedy program uživatele vykoná akci okamžitě (aby uživatele nezdržoval) a ostatní ji vykonají hned jak se objeví v MUC.
Bohužel asynchronní přenos má svoje chyby - co když se v chatu objeví nejdříve díra a teprve potom traverza? Byla by možnost vytvořit "díru" ve volném prostoru tak, aby po vytvoření traverzy byla na místě, kde má být? Napadá mě něco jako objekt s atributem "díra"
---
Nasdílení existujícího souboru na začátku sezení by se udělalo tak, že by se jeho obsah uložil do historie MUC.
Pokud by historie MUC nebyla k dispozici, tak by si nějakým příkazem nechal od náhodného člena poslat kompletní model do chatu, nebo jako běžná zpráva (chat s jedním uživatelem). Samozřejmě předpokládáme, že všichni pracují na jednom modelu a ne, že si někdo udělá nezávislý klon a potom jeho nasdílením zničí práci zbytku zkupiny
To vypadá moc hezky
Byl to jen návrh, nic lepšího mě na zadání "dostaň všechny změny ke všem účastníkům" nenapadlo
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.