2P Posted February 3, 2017 Report Share Posted February 3, 2017 Trafiłem na poważny błąd w działaniu vlax-ldata-put / get. Poważny dla mnie bo totalnie rozwalił mi działanie mojej nakładeczki i nie mam pomysłu jak to obejść. Proponuję wykonać taki kod na v2015 i potem v2017 (vlax-ldata-put "TEST" "T" (list "String1 String2")) (setq s (vlax-ldata-get "TEST" "T")) (print s) (print (car s)) (print (type (car s))) Efekt działania v2017 poniżej: Cytuj (STRING1 STRING2) STRING1 SYM Efekt działania v2015 poniżej: Cytuj ("String1 String2") "String1 String2" STR Problem w tym, że w starej wersji gdy zapisywaliśmy listę złożoną ze stringów do rysunku za pomocą vlax-ldata-put i potem odczytywaliśmy dane za pomocą vlax-ldata-get to otrzymywaliśmy taką samą listę stringów. W v2017 po odczytaniu, ZWcad zmienia typ danych w liście i stringi przerabia na symbole. Mało tego jeśli w stringu jest spacja, to otrzymamy dwa elementy listy (dwa symbole). I do tego zmienia wielkość liter na duże! Dane odczytane z rysunku nie mają za dużo wspólnego z tym co zapisaliśmy :( Problem dotyczy tylko sytuacji gdy zapisujemy listę ze stringami, bo gdy zapisujemy same stringi to jest wszystko OK. Czy jest jakaś szansa że to zostanie naprawione szybko, bo bez tego nakładka nie działa i nie ma jak tego za bardzo obejść. Tym bardziej, że wersją 2017 nie mogę odczytać poprawnie danych zapisanych wcześniej w rysunku za pomocą wersji 2015.... :( :( Quote Link to comment Share on other sites More sharing options...
kojacek Posted February 3, 2017 Report Share Posted February 3, 2017 Trzeba sprawdzić czy błąd występuje przy zapisie czy przy odczycie LDATA. Zróbmy tak: odczytamy zapisane dane nie mechanizmem LDATA, tylko zwykłym dostępem do obiektów niegraficznych. Dla uproszczenia warto wykorzystać CADPL-Pack'a, dostępnego tutaj: http://forum.cad.pl/cadpl-pack-v1-lsp-t78161.html . O Packu, możesz też poczytać tutaj: https://kojacek.wordpress.com/2015/11/04/cadpl-pack/ . LDATA to nic innego jak dane zgromadzone w obiekcie VLO_VL, w zadanym słowniku. Zatem: Wykorzystamy funkcję o nazwie cd:DCT_GetDict. Zatem: Ściągnij CADPL-Pack'a i go załaduj. Wywołaj: (cdr (assoc 300 (entget (cd:DCT_GetDict (cd:DCT_GetDict (namedobjdict) "TEST") "T")))) oczywiście dla wcześniej zapisanych danych. Podaj (zacytuj) co zwróciło. Wtedy zobaczymy co się da zrobić (jeśli błąd jest przy odczycie, da się to obejść, jeśli przy zapisie... to raczej nie) Quote Link to comment Share on other sites More sharing options...
2P Posted February 3, 2017 Author Report Share Posted February 3, 2017 Zrobiłem test zapis - odczyt, ale bez CADPL-Pack'a. 1. Na początek w v2015 zapisałem dane LDATA. Potem ten plik otworzyłem w v2017 i odczytałem LDATA - wynik prawidłowy, dane nie zmienione. 2. W v2017 zapisałem dane LDATA, a potem ten plik otworzyłem w v2015 i odczytałem dane LDATA - wynik błędny, dane zmienione.... Jednym słowem niestety błąd jest przy zapisie :( nie odczycie danych. A nakładka działająca pod v2017 wręcz może uszkodzić bezpowrotnie dane!! Quote Link to comment Share on other sites More sharing options...
kojacek Posted February 3, 2017 Report Share Posted February 3, 2017 a wywołaj (w 15 / 17): (vlax-ldata-list "TEST") jakie są różnice? Quote Link to comment Share on other sites More sharing options...
2P Posted February 4, 2017 Author Report Share Posted February 4, 2017 Plik_1 - dane LDATA zapisane w v2017 Plik_2 - dane LDATA zapisane w v2015 Efekt działania (vlax-ldata-list "TEST") w obu wersjach ZW: v2017, Plik_1: Cytuj (("T" STRING1 STRING2)) v2017, Plik_2: Cytuj (("T" "String1 String2")) v2015, Plik_1: Cytuj (("T" STRING1 STRING2)) v2015, Plik_2: Cytuj (("T" "String1 String2")) Jak widać błąd tkwi w procedurze zapisu LDATA w v2017. Quote Link to comment Share on other sites More sharing options...
kojacek Posted February 4, 2017 Report Share Posted February 4, 2017 Spróbujmy jednak to naprawić - nieco naokolo. Zrób teraz tak: Załaduj CADPL-Pack'a Zapisz w 2017 LDATA - tak aby były zapisane źle Wywołaj: (cd:ENT_SetDXF (cd:DCT_GetDict (cd:DCT_GetDict (namedobjdict) "TEST") "T") 300 "(\"Abc Xyz\")") i następnie odczytaj dane. Jeżeli będzie ok, to w ten sposób będziesz mógl obejść ten problem, do czasu gdy żółte rączki go nie naprawią... Quote Link to comment Share on other sites More sharing options...
2P Posted February 4, 2017 Author Report Share Posted February 4, 2017 (edited) Chylę przed Tobą czoła kojacek! WIELKIE DZIĘKI! " do czasu gdy żółte rączki go nie naprawią" jest to rozwiązanie problemu i to bez konieczności grzebania w całym kodzie nakładki. Dołączyłem CADPL-Pack'a i dopisałem taką definicję funkcji, co załatwiło ten problem. (defun vlax-ldata-put (dict key data) (cd:ENT_SetDXF (cd:DCT_GetDict (cd:DCT_GetDict (namedobjdict) dict) key) 300 (vl-prin1-to-string data)) ) Załatwiło ten problem, ale oczywiście już znalazłem kolejne niekompatybilności v2017 (nie tylko w LISPie)... o czym w innych wątkach... Pozdrawiam Edit: Niestety rozwiązanie powyższe nie działa z listami typ pary "kropkowe" :( Edited February 4, 2017 by 2P Quote Link to comment Share on other sites More sharing options...
kojacek Posted February 4, 2017 Report Share Posted February 4, 2017 Dzięki . Cieszę się że mogłem pomóc. Podaj teraz jakie pary kropkowe zapisujesz i jak wygląda błąd. Może da się też coś zaradzić? Quote Link to comment Share on other sites More sharing options...
2P Posted February 7, 2017 Author Report Share Posted February 7, 2017 Już sobie jakoś poradziłem. Przy okazji oczyściłem trochę kodu ze zbędnych rzeczy. Przechodzę do analizy dalszych funkcji, które nie chcą działać z v2017 Quote Link to comment Share on other sites More sharing options...
kojacek Posted February 7, 2017 Report Share Posted February 7, 2017 Jak coś ciekawego to wrzucaj. Jeśli się uda będziem prostować ;) Quote Link to comment Share on other sites More sharing options...
kruszynski Posted April 6, 2017 Report Share Posted April 6, 2017 W wersji SP3 problem został rozwiązany. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.