-
Postów
252 -
Dołączył
-
Ostatnia wizyta
-
Wygrane w rankingu
35
Odpowiedzi opublikowane przez kojacek
-
-
Link jest już poprawiony
-
Ładowanie ustawień zmiennych z pliku na żądanie: https://kojacek.wordpress.com/2015/11/24/setvar-z-pliku/
-
Godzinę temu, Chris napisał:
Dzień dobry,
przetestowałem Pana skrypt i dokładnie o taką funkcję mi chodziło. Zdziwiony jestem, że wcześniej nie była powszechna...Kilka uwag, które mogłyby pomóc rozwinąć funkcję.
Po wywołaniu komendy i wybraniu wymiaru program prosi o wskazanie punktu. Mógłby Pan dodać możliwość wskazania kierunku i wpisania wartości przesunięcia (chyba, że działa w przypadku aktywnego DYNINPUT, tego nie testowałem). Gdy wskazałem kierunek i wpisałem wartość program przesuwał wymiar ale o inną wartość.
Kolejna sprawa to przerywanie komendy - po przerwaniu komendy ESC lub PPM (PPM działa jako powtórz/enter) ciąg wymiarowy jest ciągle podświetlony, tak jakby komenda nie została przerwana. Pomaga REGEN lub ponowne wybranie wymiaru i anulowanie wyboru.
W moim przypadku (korzystam w wymiarów w nakładce BIK), gripy (punkty pomocnicze linii wymiarowych) powinny przesuwać się z ciągiem wymiarowym. Dla takiego przypadku, albo raczej dla tego konkretnego stylu wymiarowania producent BIKa dodał już taką funkcję do nakładki (zgodnie z informacją kilka postów powyżej).
Niemniej jednak dziękuję wszystkim za zainteresowanie tematem i szybką pomoc.
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ć.
-
-
-
-
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... 😉
-
Dnia 7.01.2019 o 21:30, dmatusz3 napisał:
Tak.
Czy to jest etyczne? Masz pewność że autor wyraża zgodę na przerabianie swojego programu?
-
Czy to legalne?
-
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.
-
3 godziny temu, JasW napisał:
(...) DRAWORDER i wiele funkcji właściwie wywodzi się z próby rozwiązania problemu kolejności rysowania obiektów w czasach gdzie ACAD'a nie mógł w ogole (ew. lub w sposób naciagany) pracować w 3D tzn. obiekty miały tylko współrzedne X,Y ew. odległośc od plany OXY (...)
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.)
-
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.
-
18 minut temu, dmatusz3 napisał:
Pod warunkiem, że chcemy przesunąć okrąg, do którego rysujemy styczną.
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).
-
A dla istniejących obiektów - w programach obsługujących parametryczność:
-
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/
-
A czy można też w atrybucie bloku jako FIELD-y ustawić wartości parametrów bloku dynamicznego. Tak jak poniżej (w AC)?
-
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ść.
-
-
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źć".
-
Ja tam jestem zwolennikiem minimalizmu w kodzie:
(ssget "_x" '((0 . "hatch")(-4 . "/=")(62 . 1)(-4 . "/=")(62 . 105)))
😉
-
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:
-
Godzinę temu, jacnightingale napisał:
Z tego co rozumiem, LISP mierzy odległość X pomiędzy punktem A i B. W moim przypadku znam lokalizację punktu A i odległość X. Pytanie tylko, jak wyznaczyć na polilinii gdzie jest ten punkt B położony.
Mam nadzieję, że nie niamieszałem za bardzo 🙈
No to ja trochę namieszałem. Ale to co chcesz też się da zrobić LISP-em. W wolnej chwili wrzucę w jaki sposób.
-
-
Lustro i kreskowanie
w ZWCAD Standard i Professional
Opublikowano
W AutoCAD jest zmienna o nazwie MIRRHATCH