2P Opublikowano 3 Lutego 2017 Zgłoś Udostępnij Opublikowano 3 Lutego 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.... :( :( Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
kojacek Opublikowano 3 Lutego 2017 Zgłoś Udostępnij Opublikowano 3 Lutego 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) Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
2P Opublikowano 3 Lutego 2017 Autor Zgłoś Udostępnij Opublikowano 3 Lutego 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!! Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
kojacek Opublikowano 3 Lutego 2017 Zgłoś Udostępnij Opublikowano 3 Lutego 2017 a wywołaj (w 15 / 17): (vlax-ldata-list "TEST") jakie są różnice? Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
2P Opublikowano 4 Lutego 2017 Autor Zgłoś Udostępnij Opublikowano 4 Lutego 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. Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
kojacek Opublikowano 4 Lutego 2017 Zgłoś Udostępnij Opublikowano 4 Lutego 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ą... Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
2P Opublikowano 4 Lutego 2017 Autor Zgłoś Udostępnij Opublikowano 4 Lutego 2017 (edytowane) 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" :( Edytowane 4 Lutego 2017 przez 2P Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
kojacek Opublikowano 4 Lutego 2017 Zgłoś Udostępnij Opublikowano 4 Lutego 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ć? Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
2P Opublikowano 7 Lutego 2017 Autor Zgłoś Udostępnij Opublikowano 7 Lutego 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 Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
kojacek Opublikowano 7 Lutego 2017 Zgłoś Udostępnij Opublikowano 7 Lutego 2017 Jak coś ciekawego to wrzucaj. Jeśli się uda będziem prostować ;) Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
kruszynski Opublikowano 6 Kwietnia 2017 Zgłoś Udostępnij Opublikowano 6 Kwietnia 2017 W wersji SP3 problem został rozwiązany. Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Dołącz do dyskusji
Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.