1 Naposledy upravil: kolin (2007-10-02 14:51:44)

Téma: Izolacni vzdalenost

1) Na kruznice se z neznameho duvodu nevztahuje indikace vzdalenosti pri presleni, ale kontrola pomoci "Check Violations" to zvyrazni.

2) Pokud potrebuji napriklad skupinu spoju (napr.segmenty sbernice) priblizit co nejvice k nejakemu objektu presne na izolacni vzdalenost, hodila by se mi okamzita indikace izol.vzdalenosti i v pripade ze tahnu skupinu objektu. Potreba je to pomerne casto. Nastava ale teoreticky problem s tim, ze se skupina v tu chvili musi vzit jako jeden objekt a kontrolovat hranice tohoto virtualniho objektu se skutecnym objektem, ke kteremu se chci priblizit. Dalo by se to prinejhorsim zjednodusit tak, ze skupinu chytnu za segment nejblizsi k objektu, ke kteremu se chci priblizovat a hlidala by se JEN vzdalenost mezi nevybranymi objekty a segmentem, za ktery skupinu drzim. Tim je ovsem znemoznena indikace vzdalenosti pri pouziti Edit/Window/Move, kdy nelze skupinu vzit za objekt.
Tento bod ale neni tolik dulezity, proto ho, prosim, berte spise jako namet do verze 5.

2

Re: Izolacni vzdalenost

kolin napsal:

1) Na kruznice se z neznameho duvodu nevztahuje indikace vzdalenosti pri kresleni, ale kontrola pomoci "Check Violations" to zvyrazni.

Zastavení na izolační vzdálenosti bylo vytvořeno jako jednoduchá pomůcka -- ostatně ne právě běžná v návrhových systémech kategorie Formiky --, která Vám má usnadnit práci při běžné editaci.  Z toho důvodu se snaží ošetřit především typické situace, ale má různá omezení, která si zde pro pořádek dovolím připomenout:

1) Stará se pouze o polohu ukazatele, ne o vodič, který do této polohy vede.  Ten cestou snadno může být ve zkratu téměř s čímkoliv.
2) Podporuje jen objekty určitých typů, jmenovitě čáry pod úhlem v násobcích 45°, pájecí body a nápisy.  Kruhové oblouky a čáry pod obecným úhlem ignoruje.

Omezení 1 přitom je zásadní (abych jej překonal, musel bych to naprogramovat dost jinak, dokonce natolik, že pak už by se vyplatilo zabudovat ještě další podstatnou funkčnost), omezení 2 by se dalo řešit ošetřením příslušných typů ve stávajícím kódu, jen jsem se tím nezabýval -- u oblouků především proto, že (vzdor tomu, co říká bod 1) smyslem zastavení na izolační vzdálenosti není dostat se na ni v jednom bodě, ale právě v izolační vzdálenosti vést celý segment nebo delší část vodiče.

Systémy vyšších kategorií ovšem v tomto ohledu umějí kvalitativně více (např. odtlačovat před sebou objekty).  To ale nejsou nijak jednoduché funkce.  Když jsem hledal způsob, jak vyhovět přáním uživatelů, vyšlo mi omezení z bodu 1 jako dobrý kompromis mezi složitostí programu a užitnou hodnotou.

3

Re: Izolacni vzdalenost

kolin napsal:

... Dalo by se to prinejhorsim zjednodusit tak, ze skupinu chytnu za segment nejblizsi k objektu, ke kteremu se chci priblizovat a hlidala by se JEN vzdalenost mezi nevybranymi objekty a segmentem, za ktery skupinu drzim. Tim je ovsem znemoznena indikace vzdalenosti pri pouziti Edit/Window/Move, kdy nelze skupinu vzit za objekt...

Ze systémového pohledu se režim Move Window liší od Move Group mj. v tom, že jednak naláme segmenty na hranici okna, jednak dovolí uchopit skupinu za libovolný bod.  Je právě toto lámání segmentů důvod, proč neužijete Move Group?  V takovém případě by se do budoucna dalo uvažovat o nějakém přechodu mezi oběma režimy -- např. při umísování druhého rohu okna by nějaká speciální klávesa (můj oblíbený Ctrl-Enter je zde již bohužel obsazen) mohla způsobit přechod do režimu Move Group (Pick).

4 Naposledy upravil: kolin (2007-10-03 09:34:57)

Re: Izolacni vzdalenost

Petr Horský napsal:

Stará se pouze o polohu ukazatele, ne o vodič, který do této polohy vede.  Ten cestou snadno může být ve zkratu téměř s čímkoliv.

Ano, to muze, to neni ten problem, tento problem se odhali pri rucni kontrole izolacnich vzdalenosti. Jde jen o pripad, kdy potrebuji vodic priblizit co nejvic to jde, behem kresleni vodice. To, ze v jinem miste je vzdalenost kratsi, je videt na prvni pohled, nebo mi to kontrola potom vyhlasi - o to tak nejde.
Spise mi slo o toto:
Vnejsi oblouk: kdyz mam vest spoj podel montazniho otvoru, tak nestaci, abych vedl spoj na izolacni vzdalenost od otvoru, ale musim vest mnohem dal od nej, protoze na desku bude tlacit jeste hlavicka sroubu. Takze si nulovou carou kolem padu v medi nakreslim kruh.
vnitrni oblouk:Dalsi pripad vznika pri kresleni desek atypickeho tvaru: kruhova deska a timpadem vedeni spoje po obvodu nebo v jeho blizkosti - tam muze za jistych okolnosti dojit na jinem miste ke kratsi izol.vzdalenosti, ale opet je to na uzivateli.

Stejne tak neni resene napriklad pokud tahnu spoj krizem pres jiny a snazim se o indikaci izol.vzdal.na druhe strane jiz nakresneneho objektu - tak sice vznikne krizeni obou spoju, ale v miste kurozru je iz.vzd.dodrzena.

Petr Horský napsal:

2) Podporuje jen objekty určitých typů, .........Kruhové oblouky a čáry pod obecným úhlem ignoruje.

Je to kvuli programove narocnosti? Vzdyt kdyz se vyleva med, tak se izolacni vzdalenost kolem quadrantu resi..
Stejne tak ignorovani segmetu v jinych uhlech je potrebna vec. (viz.nedavny prispevek ohledne vylevani medi).

Petr Horský napsal:

Systémy vyšších kategorií ovšem v tomto ohledu umějí kvalitativně více (např. odtlačovat před sebou objekty).  To ale nejsou nijak jednoduché funkce.  Když jsem hledal způsob, jak vyhovět přáním uživatelů, vyšlo mi omezení z bodu 1 jako dobrý kompromis mezi složitostí programu a užitnou hodnotou.

Tak to uz je opravdu jina cenova hladina, tlaceni objektu pred sebou je hezka vec ale neni tak potreba.
Myslim ze tak jak je delana detekce nyni, je velmi vyhovujici, problemem je prave jen detekce u quadrantu a segmetu v uhlech mimo nasobky 45st. (Mel jsem za to, ze detekce resite tak, ze si z jednotlivych bodu, definujicich pozice a druh segmentu, spocitate kde vsude v poli lezi telo segmentu a timpadem muzete hlidat kazde misto styku s pozici kurzoru nebo jinym segmentem.)

5

Re: Izolacni vzdalenost

kolin napsal:

Vnejsi oblouk: kdyz mam vest spoj podel montazniho otvoru, tak nestaci, abych vedl spoj na izolacni vzdalenost od otvoru, ale musim vest mnohem dal od nej, protoze na desku bude tlacit jeste hlavicka sroubu. Takze si nulovou carou kolem padu v medi nakreslim kruh.

Včera jsem odpovídal v rychlosti, takže jsem nezmínil jednu podstatnou vlastnost, kterou jste mi teď připomenul.  Jde totiž o to, že objekty, od nichž se izolační vzdálenost počítá, jsou vždy aproximovány (opsaným) osmiúhelníkem.  Jedna věc je, jak pevně je tato vlastnost zabudována do algoritmů; to teď neumím posoudit, ale je to jistě řešitelné.  Druhou potíž však hezky ilustruje Vámi uvedený příklad:

Předpokládejme, že co nejblíže kolem kružnice chcete vést svislý segment.  Jenže smyslem zastavování na isolační vzdálenosti je podpořit práci bez gridu, a proto musíme ještě předpokládat, že i střed kružnice leží mimo rastr.  Abyste se dostal do správné vzdálenosti od kružnice, musel by se ukazatel zastavit "ve výši rovníku".  To ale není možné, protože jeho svislá souřadnice není v rastru -- program by sice správně nastavil vodorovnou polohu ukazatele na izolační vzdálenost, jenže jakmile by se segment přiblížil ke svislé souřadnici "rovníku", izolační vzdálenost by byla porušena.  (Podobně u diagonálních segmentů.) 

Z toho důvodu by nestačilo kruhové oblouky zahrnout do výpočtů stejným způsobem jako výše uvedené objekty, které zastavování na izolační vzdálenosti nyní respektuje.  Muselo by se hledat nějaké speciální řešení; myslím si však, že pak už by optimální kompromis mezi funkčností a pracností ležel o hodně dále, možná poblíž kontroly izolačních vzdáleností pro celý umísovaný segment.

6 Naposledy upravil: kolin (2007-10-03 14:42:45)

Re: Izolacni vzdalenost

Petr Horský napsal:

.Muselo by se hledat nějaké speciální řešení; myslím si však, že pak už by optimální kompromis mezi funkčností a pracností ležel o hodně dále, možná poblíž kontroly izolačních vzdáleností pro celý umísovaný segment.

O tom jsem taky pred casem uvazoval, kdyz jsem premyslel o uskalich s akceptovanim izolacnich vzdalnosti na libovolnem uhlu libovolneho objektu. V podstate by tu byl mozny kompromis: u rovnych segmentu tedy neni problem, ovsem v pripade oblouku by se pouzival alespon vami zminovany osmiuhelnikovy system. Ale je to kompromis a nevim jestli zadouci. na druhou stranu ted se nepouziva nic... Kazdopadne nechavam ke zvazeni nebo pokud jeste nekoho neco napadne.

7

Re: Izolacni vzdalenost

Jestliže toto vlákno po téměř půldruhém roce opět vyplynulo na povrch díky odkazu kolina v jiném vlákně, poznamenal bych zde, že kružnice byly mezitím ošetřeny v pokusné verzi, již někteří mají k disposici.  Až zas budu vystavovat nějakou testovací verzi (viz též http://www.formica.cz/forum/viewtopic.php?id=159), úprava se tam objeví.

Paradoxně je to právě (zde poměrně hrubá) aproximace kvadrantu osmiúhelníkem, která pomáhá ošetřit situace, v nichž např. potřebujete vést svislý (a stejně tak i diagonální) vodič co nejblíže kolem kružnice, jejíž střed může v jedné či obou osách ležet mimo rastr (tedy právě ty, na něž jsem poukazoval o dva příspěvky výše).  Prakticky vzato se tím problém vyřešil sám od sebe, zatímco veškerá snaha o vyšší přesnost by jej zde naopak odhalila v celé šíři.