Zobrazit plnou verzi příspěvku: chyba délky při etitaci 3D křivky pomocí Vlastnoti

alfred
07.10.2011, 14:03


Normal
0


21


false
false
false

CS
X-NONE
X-NONE













MicrosoftInternetExplorer4



























































































































































/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Normální tabulka";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-qformat:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Calibri","sans-serif";
mso-bidi-font-family:"Times New Roman";}



Mám problém s 3D křivkou a myslím si, že se jedná o BUG. Zkoušeno
v AutoCad MAP3D 2011.

Přikládám výkres: uploads/20111007_135954_3D_polyline.dwg

Mám 3D křivku (POLYLINE) – označena je jako A. Z-tové souřadnice
vrcholů jsou =0. Délka je po nakreslení 60. To je správně (v přiloženém souboru
je hodnota 60). Hodnotu ukáže shodně příkaz [CMD]DÉLKA[/CMD] (_LENGTHEN), dialog Vlastnosti i LISP
příkaz:

(vlax-curve-getDistAtParam (car (entsel "Vyber krivku: ")) 2)


Poznámka: Příkaz ukazuje délku křivky ve třetím uzlu (tedy zde celá
křivka). Před spuštěním příkazu je nutno spustit (vl-load-com)

Pak křivku zkopíruji příkazem [CMD]KOPIE[/CMD] (_COPY). U nové křivky ve Vlastnostech
změním Z-souřadnici některého z vrcholových bodů. Logicky se tím změní
délka 3D křivky. V dialogu Vlastnosti ale stále zůstává původní délka
(tedy v tomto případě 60). Hodnotu 60 změří i LISP příkaz. Pouze příkaz
[CMD]DÉLKA[/CMD] (_LENGTHEN)ukáže hodnotu správnou (pokud jsem změnil Z o 1000, tedy je tedy správná
délka 1030.45). Nepomůže regenerace ani překreslit. Pomůže pouze uložení a
znovuotevření výkresu a nebo příkaz [CMD]DIAG[/CMD] (_AUDIT).

Pokud neměním Z souřadnici ve Vlastnostech, ale použiji příkaz [CMD]PROTÁHNI[/CMD] (_STRETCH), tak je vše jak má být.

Není nutné křivku kopírovat – lze to provést i jen s jedním objektem.
Kopii křivky jsem přidal jen pro názornost.

Postup lze ještě zjednodušit:

-         
(command "_3Dpoly" '(0 0)'(4
0))(command)   ; nakreslí 4jednotky
dlouhou 3D křivku. Délka je 4.

-         
editace jednoho vrcholu v panelu Vlastnosti – změna souřadnice Z na 3

-         
délka ve Vlastnostech je stále 4 a ne 5 jak ukáže
příkaz [CMD]DÉLKA[/CMD] (_LENGTHEN) (a jak by měla být správně – rozměry viz Pythagorova věta)

Mohl by prosím někdo postup vyzkoušet a potvrdit zda se jedná o BUG?

Vladimír Michl
07.10.2011, 15:21
Ano, verze 2011 neaktualizuje údaj ve Vlastnostech, verze 2012 ano.
 
Ten (vlax-curve....) podle mne čeká ID objektu, ne entity (ale nezkoušel jsem to)

alfred
07.10.2011, 15:44

[QUOTE=Vladimír Michl]


Ano, verze 2011 neaktualizuje údaj ve Vlastnostech, verze 2012 ano.
[/QUOTE]Je to tedy BUG v 2011 ?[QUOTE]
Ten (vlax-curve....) podle mne čeká ID objektu, ne entity (ale nezkoušel jsem to)[/QUOTE]To nevím přesně co ID objekt je. Myslíte jako ID entity: Příkaz: (car (entsel "Vyber krivku: "))Vyber krivku: <Název entity: 7fffee35f00>ID objektuPříkaz: (vlax-ename->vla-object (car (entsel "Vyber krivku: ")))Vyber krivku: #<VLA-OBJECT IAcad3DPolyline2 0000000076bcb1b8>(vlax-curve-getDistAtParam )funguje na oba vstupy a oba se v 2011 chovají stejně - tedy vrací neaktualizovanou délku.

Vladimír Michl
07.10.2011, 16:30
Ano, zdá se že to je bug. Ty vlax funkce jsou tím ovlivněny také - zřejmě i objektová vlastnost .Length tedy bude chybně.
 
Přesně tak - žil jsem v domnění že ta funkce potřebuje ObjectID, ale možná to tedy funguje (resp. nefunguje) na oboje.

alfred
07.10.2011, 18:57
VLA-OBJECT, tedy myslim ten objekt ID neznam a protoze fungovala ten klasicky nazev entity, tak jsem se k nemu ani nedopatral. Nemohl by jste prosim nastinit hlavni moznosti co tato nova (aspon pro me) vlastnost skyta navic oproti klasickym vlastnostem?Jinak jeste pokud se zmeni ve vlastnostech Z souradnice u 3D krivky, tak se nejen nezmeni delka, ale ani souradnice dotazovana pomoci funkce vlax-curve-getPointAtParamnapriklad pokud zmenim pocatecni bod tak ve vlastnostech 3D krivky vidim jiny bod nez mi ukaze:

Normal
0
21






MicrosoftInternetExplorer4



/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Normální tabulka";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman";}



(vlax-curve-getPointAtParam (vlax-ename->vla-object (car (entsel)))
0)nebo tohle:

(vlax-curve-getPointAtParam (car (entsel)) 0)

Chyba bude tedy asi rozsahlejsi a cekat, ze by byl jeste nejaky service pack na 2011 je asi marne. Ve 2012 to funguje tak jak ma?.


Vladimír Michl
07.10.2011, 20:00


Na ID objektu není nic složitého - je to identifikace entity určená pro objektové (ActiveX) funkce volané z VisualLISPu. Z ID entity jej získáte tou vámi zmíněnou funkcí (vlax-ename->vla-object). S objektem pak můžete dělat takové oprace jako např.:(vla-get-length objID)(vla-get-layer objID) Service packy na starší verze ještě vydávány jsou, šance je.

alfred
07.10.2011, 20:39

[QUOTE=Vladimír Michl]

Na ID objektu není nic složitého - je to identifikace entity určená pro objektové (ActiveX) funkce volané z VisualLISPu. Z ID entity jej získáte tou vámi zmíněnou funkcí (vlax-ename->vla-object). S objektem pak můžete dělat takové oprace jako např.:(vla-get-length objID)(vla-get-layer objID) [/QUOTE]A nevite proc Autodesk pridal dalsi ID? Proc nestacil ten klasicky? Ma to nejakou vyhodu (vice moznosti, rychlost, pohodlnost prace....).Jaka je kompatibilita pro starsi AutoCady? Myslim jako kompatibilita funkci, ktere vyuzivaji ID.

Vladimír Michl
07.10.2011, 20:48


To není nějaký výmysl Autodesku, ani nic moc nového. Kvůli podpoře ActiveX zavedené s příchodem VisualLISPu bylo jen potřeba předávat ActiveX funkcím jednoznačné identifikace výkresových objektů - ty ale mají jiný formát než je lispovské "entity name". Oba typy identifikace objektu mohou koexistovat společně. Problémy s historickou kompatibilitou nejsou žádné.

alfred
07.10.2011, 21:20

[QUOTE=Vladimír Michl]

To není nějaký výmysl Autodesku, ani nic moc nového. [/QUOTE] Vim, ze je ve VisualLispu dlouho mnoho funkci zacinajicich na "V", ktere v AutoLispu nebyly. Moc jsem je nevyuzival a ani neznal. Zkousim s nimi pracovat v posledni dobe. Zrovna dnes jsem se s nimi trochu trapil nez jsem pochopil, ze jde o BUG...