kojacek

Użytkownik forum
  • Postów

    252
  • Dołączył

  • Ostatnia wizyta

  • Wygrane w rankingu

    35

Treść opublikowana przez kojacek

  1. 1) Sugerowałbym próbę wpisywania tekstu ze spacjami.
  2. W AutoCAD jest zmienna o nazwie MIRRHATCH
  3. Link jest już poprawiony
  4. Ładowanie ustawień zmiennych z pliku na żądanie: https://kojacek.wordpress.com/2015/11/24/setvar-z-pliku/
  5. Witam, parę uwag: 1) Wskazanie punktu. To standardowa funkcja LISP-a, getpoint - trzeba wskazać punkt, może być podany jako odległość, ale w formie "przyrostowej" @dist<angle. Pomyślę (w przyszłości) o dodaniu opcji (słowa kluczowego) do odległości. Wtedy dodatnia wartość przesunie linie "na zewnątrz" (od punktów zaczepienia) a ujemna "do wewnątrz". Obecnie (proszę zwrócić uwagę) wskazanie punktu nie wymaga trybu ortogonalnego, punkt można wskazać w dowolnym miejscu, a linie zostaną ustawione w miejsciu przechodzenia przez ten punkt. 2) Poprawię obsługę błędów, 3) Program z założenia "przesuwając" linie wymiarowe, w rzeczywistości modyfikuje wymiary w taki sposób że punkty zaczepienia pozostają w niezmienionym miejscu, czyli tak jakby (wymiary) były rozciągane. Uważam to za zaletę, a nie wadę. Idea przesuwania wymiarów, kłóci się w mojej opinii, z zasadami poprawnego wymiarowania, które powinno być (w miarę możliwości) maksymalnie zespolone z wymiarowanymi obiektami. Przesuwanie wymiaru niszczy to połączenie. Na marginesie: na Pańskim obrazku te "wymiary BIK" mogły by mieć zdefiniowane krótkie linie pomocnicze i (nadal) posiadać zespolenie, czyli gripy w pierwotnych punktach, bez względu na położenie linii wymiarowch. Podsumowując - do przesuwania wymiarów proszę je po prostu przesuwać, bez korzystania z DIM-MO. Raczej tego nie zamierzam zmieniać.
  6. Tutaj: https://kojacek.wordpress.com/2020/04/16/dim-mo/ już jest.
  7. https://kojacek.wordpress.com/2017/09/22/edycja-multilinii/
  8. Jakieś osiem (!) lat temu na innym forum podobne zagadnienie było omawiane: http://forum.cad.pl/prostowanie-polilinii-t77940.html Kody też tam chyba były. Bezpłatnie. No i jawne... 😉
  9. Czy to jest etyczne? Masz pewność że autor wyraża zgodę na przerabianie swojego programu?
  10. Czy to legalne?
  11. 1. Jeśli prośba o elastyczność, to mam nadzieję że zgodzimy się do pewnych faktów: a) AutoCAD obsługuje 3D od 1985 roku. b) Draworder jest dostępny od 1997, ale nie ma nic wspólnego z 3D. 2. Teraz znów o DRAWORDER: Mówiąc cały czas o DRAWORDER, musimy mieć na uwadze że nie ma on nic wspólnego z modelowaniem czy rysowaniem w 3D. Zatem dywagacje na temat współrzędnej Z są bezcelowe - DRAWORDER nie zmienia położenia obiektów w przestrzeni. Mało tego - położenie obiektów w przestrzeni 3D nie determinuje kolejności ich wyświetlania. Można w prosty sposób przekonać się że obiekty o mniejszej wspórzędnej Z "przykrywają" obiekty znajdujące się w przestrzeni "wyżej". I tego rodzaju "problemy" rozwiązuje właśnie DRAWORDER. Powstał na zapotrzebowanie wizualizacji projektu i tworzenia grafiki prezentacyjnej. Steruje porządkiem wyświetlania obiektów, a nie ich położeniem w przestrzeni. 3. Kulą w płot jest argumentacja dotycząca parametru Elevation dla polilinii, mająca wyjaśniać domniemane "wdrażanie 3D drobnymi krokami" i "ciążenia tego do dziś". Proszę o zapoznanie się ze strukturą danych obiektów LWPOLYLINE i POLYLINE. 4. Całkowitym nieporozumieniem zaś jest przytaczanie opisu strony html. Choć pozornie ma również związek z kolejnością wyświetlania, dotyczy jednak zupełnie czegoś innego.
  12. Bzdura. Obsługa obiektów w przestrzeni trójwymiarowej datuje się od wersji AutoCAD 2.1 (Release 6 - maj 1985). Polecenie DRAWORDER jest zaś dostępne od wersji AutoCAD R14 (luty 1997). Zatem nie ma i nie było tu żadnej próby rozwiązywania czegokolwiek w 3D. Powtórzę raz jeszcze. W AutoCAD obiekty wyświetlane są domyślnie w kolejności tworzenia (nowy "przykrywa" stary), chyba że zostanie zastosowany DRAWORDER właśnie. I dotyczy to tylko kolejności wyświetlania, a nie umiejscowienia w przestrzeni. Dotyczy tylko obiektów graficznych, a nie warstw, definicji bloków, słowników, stylów tekstu, wymiarowania itp. To ma i miało od początku zastosowanie do określenia porządku wyświetlania obiektów w rzeczywistości się pokrywających (np. aby obwiednia obiektu "nakładała się" na jego kreskowanie, teksty opisujące były "na wierzchu" linii itp.)
  13. Pomysł w mojej opinii chybiony, wynikający z niezrozumienia działania mechanizmu DRAWORDER. Po pierwsze, DRAWORDER dotyczy entycji, czyli graficznych obiektów rysunkowych, warstwy zaś są obiektami niegraficznymi. Nie można ich mieszać ze względu na różnice ich właściwości. Po drugie, opisywana sytuacja nie bierze pod uwagę konfliktu pomiędzy proponowanym a istniejącym DRAWORDER. To tworzyłoby większy chaos, niż korzystanie ze zwykłego DRAWORDER, czy nawet nie korzystanie z niego. Po trzecie trzeba również rozróżnić pojęcia blok (definicja bloku), a jego odniesienie (wstawienie). To pierwsze jest obiektem niegraficznym, to drugie (INSERT) zaś graficznym. Dla niego normalny DRAWORDER działa tak jak dla innych entycji. Na koniec - DRAWORDER nie tworzy i nie zmienia położenia obiektów. To jedynie ich kolejność wyświetlania.
  14. No pewnie. Piszę "dla istniejących", w znaczeniu zadaję styczność linii do okręgów, nie zmieniając jej kąta. Gdyby to nie miało znaczenia, to wystarczy edycja uchwytami, tak samo jak dla rysowania nowej linii (lokalizacja Styczny).
  15. A dla istniejących obiektów - w programach obsługujących parametryczność:
  16. To pobożne życzenia - skąd wcześniejsza wersja "ma wiedzieć" co przyniesie przyszłość? Inna sprawa że Autodesk, tworzy nowe funkcjonalności w "sprytny" sposób. Przykładowo, graficznie obiekty typu CenterLine czy CenterMark, albo "nowe" szyki (Rectangular / Polar / Path ARRAY), będą widziane w programach ich nie obsługujących, jako bloki anonimowe. To generalnie są odniesienia do bloków, jednak w istotny sposób się różniące między sobą. Poruszyłem to we wpisie: https://kojacek.wordpress.com/2018/04/20/typy-odniesien/
  17. A czy można też w atrybucie bloku jako FIELD-y ustawić wartości parametrów bloku dynamicznego. Tak jak poniżej (w AC)?
  18. 1. LDATA są nieefektywne, nieelastyczne i (czasem) mogą być "gubione", jeśli rysunek wędruje i jest zapisywany w różnych wersjach. Może działać tech mechanizm odwrotny - mogą być "wleczone" do innych rysunków, wtedy i tak tracą powiązania, i są właściwie bezużyteczne. 2. Nie wiem czy ma sens - mówię o tym żeby zastąpić teraźniejsze dane w LDATA, innymi przechowywanymi w np. XRECORD. Czyli wymyślenie nowego sposobu zarządzania tymi danymi do wykorzystania obecnie i w przyszłości, jednocześnie zmigrować stare dane, tak aby ich nie stracić i mieć do nich dostęp w dowolnej chwili. Nie znam twojego modelu tych danych, ale myślę że można to spokojnie zrobić. Przy okazji (być może) rozszerzyć ich funkcjonalność.
  19. Powyższy LISP tworzy odniesienia statyczne, myślę jednak że chodzi raczej o pewnego rodzaju dynamikę, którą zapewnia FIELD (tutaj w atrybutach bloku):
  20. Osobiście odradzam używania LDATA, czy to w samym AutoCAD-zie, czy w programach mu podobnych. Niezależnie, czy jest błąd w ZwCAD, sugerowałbym migrację danych do obiektów niegraficznych typu Dictionary (również Extension Dictionary), oraz do przechowywania dużej ilości danych różnego typu w obiekcie XRECORD. Parokrotnie poruszałem już ten temat tutaj: https://kojacek.wordpress.com/tag/obiekty-niegraficzne/ Dostęp do tego rodzaju struktur rysunkowej bazy danych, zapewnia VisualLISP. W razie czego mogę pomóc, jak to "ugryźć".
  21. Ja tam jestem zwolennikiem minimalizmu w kodzie: (ssget "_x" '((0 . "hatch")(-4 . "/=")(62 . 1)(-4 . "/=")(62 . 105))) 😉
  22. Do wyznaczania punktu na krzywej w zadanej odległości od innego punktu na niej się znajdującego przedstawiam funkcję LISP-a: ; ================================================================== ; ; Zwraca punkt (lub nil) znajdujacy sie na krzywej <Curve> w ; ; odleglosci <Dist> od punktu <FromPt> ; ; Dodatnia wartosc <Dist> wyznacza punkt w kierunku zgodnym z ; ; przebiegiem krzywej, ujemna w kierunku przeciwnym ; ; ------------------------------------------------------------------ ; (defun jk:CAL_GetPointAtDist (Curve FromPt Dist / %) (if (setq % (vlax-curve-getDistAtpoint Curve FromPt)) (vlax-curve-getPointAtDist Curve (+ Dist %)) ) ) ; ------------------------------------------------------------------ ; Wymaga ona trzech argumentów: 1) obiektu 3) punktu na nim i 3) odległości. Zwraca punkt lub nil. Poniżej funkcja ilustrująca testowe działanie - po wskazaniu splajnu, punktu na nim (zielone kółko), rysuje 5 (czerwonych okręgów) w odległości 10 20 30 40 i 50 od niego. Kod: (defun C:TEST-A ( / e p) (if (and (setq e (car (entsel "\nKrzywa:"))) (setq p (getpoint "\nOd punktu:")) ) (foreach % '(10 20 30 40 50) (cd:ACX_AddCircle (cd:ACX_ASpace) (jk:CAL_GetPointAtDist e p %) 1 T ) ) ) ) Funkcja testująca wymaga CADPL-Pack'a (https://kojacek.wordpress.com/2015/11/04/cadpl-pack/) a aziałanie wygląda tak:
  23. No to ja trochę namieszałem. Ale to co chcesz też się da zrobić LISP-em. W wolnej chwili wrzucę w jaki sposób.
  24. A takie coś: https://kojacek.wordpress.com/2018/01/17/pomiar-dlugosci-krzywej/ LISP-em?