kojacek

Użytkownik forum
  • Postów

    236
  • Dołączył

  • Ostatnia wizyta

  • Wygrane w rankingu

    26

Treść opublikowana przez kojacek

  1. LISP-em, najprościej użyć funkcji startapp. Zobacz tutaj: https://kojacek.wordpress.com/2016/07/31/pliki-szybki-dostep/
  2. Może tak (czując się wywołanym linkiem): Uproszczony kod: ; -------------------------------------------------------------------------------------- ; ; 2021 by kojacek (defun C:LPOLY (/ GetObjectID getObj l b v i) (defun GetObjectID (obj doc) ;; Lee Mac (if (eq "64" (strcase (getenv "PROCESSOR_ARCHITECTURE"))) (vlax-invoke-method (vla-get-Utility doc) 'GetObjectIdString obj :vlax-false) (itoa (vla-get-Objectid obj)) ) ) (defun getObj (/ e) (if (setq e (car (entsel "\nWybierz obiekt do zmierzenia: "))) (if (member (cdr (assoc 0 (entget e))) (list "LINE" "ARC" "LWPOLYLINE") ) e ) ) ) (defun GetBlk (BlkList Att / e d a) (if (setq e (car (entsel "\nWybierz blok opisuący: "))) (if (and (setq d (entget e)) (setq a (mapcar '(lambda (%)(cdr (assoc 2 (entget %)))) (cd:BLK_GetAttEntity e) ) ) (= "INSERT" (cdr (assoc 0 d))) (member (cdr (assoc 2 d)) BlkList ) (member Att a) ) e ) ) ) (if (and (setq l (getObj)) (setq b (GetBlk (list "KABEL" "OBIEKT_OCHRONNY") "MEASURED_LENGTH" ) ) ) (progn (setq v (GetObjectID (vlax-ename->vla-object l) (cd:ACX_ADoc) ) i (strcat "%<\\AcObjProp Object(%<\\_ObjId " v ">%).Length \\f \"%lu2%pr2\">%" ) ) (cd:SYS_UndoBegin) (cd:BLK_SetAttValueVLA b "MEASURED_LENGTH" i ) (vla-Regen (cd:ACX_ADoc) acActiveViewport) (cd:SYS_UndoEnd) ) (princ "\nZły wybór") ) (princ) ) ; -------------------------------------------------------------------------------------------- ; Wymagane jest załadowanie CADPL-Pack'a: https://kojacek.wordpress.com/2015/11/04/cadpl-pack/ Nazwy bloków, tagi atrybutów i format Field-a, trezba sobie "podkręcić" po swojemu.
  3. Najprostszym rozwiązaniem byłoby wstawianie bloku (w formie owego prostokata) w modelu, który byłby na podstawie jego punktu wstawienia, obrotu (+ informacji o skali) reprezentowany (rzutnią) w osobnym Layoucie. To bylo juz klepane na cad.pl parę lat temu.
  4. Tak nieco inaczej podchodząc do tematu: https://kojacek.wordpress.com/2021/01/30/lisp-a-klawisze/
  5. Przyznam że nie rozumiem idei tegoż, jak też i zamysłu całości. Po co tak obrac bloki? Ale się nie znam pewnie.
  6. Po paru nawiasach? Nie zniechęcaj się... jeszcze za wcześnie... ;) Są gorsze języki programowania... :)
  7. Byłoby dziwne gdyby wpółpracował. Lista z tblsearch nie jest poprawną listą dla entmod. Użyj tu formy entget + tblobjname. Zobacz: (setq e (tblobjname "layer" "zbrojenie_linie" )) (setq d (entget e)) (entmod (subst (cons 62 -8)(assoc 62 d) d)) a to prowadzić może do bardziej ogólnej funkcji: (defun LayOnOff (Lay / e d) (if (setq e (tblobjname "LAYER" Lay)) (progn (setq d (entget e)) (setq d (subst (cons 62 (* -1 (cdr (assoc 62 d))) ) (assoc 62 d) d) ) (entmod d) ) ) ) Funkcja steruje widocznością warstwy podanej jako jej argument tak jak przełącznik, wywołaj kolejno: (LayOnOff "zbrojenie_linie")
  8. 1) Sugerowałbym próbę wpisywania tekstu ze spacjami.
  9. W AutoCAD jest zmienna o nazwie MIRRHATCH
  10. Ładowanie ustawień zmiennych z pliku na żądanie: https://kojacek.wordpress.com/2015/11/24/setvar-z-pliku/
  11. 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ć.
  12. Tutaj: https://kojacek.wordpress.com/2020/04/16/dim-mo/ już jest.
  13. https://kojacek.wordpress.com/2017/09/22/edycja-multilinii/
  14. 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... 😉
  15. Czy to jest etyczne? Masz pewność że autor wyraża zgodę na przerabianie swojego programu?
  16. 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.
  17. 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.)
  18. 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.
  19. 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).
  20. A dla istniejących obiektów - w programach obsługujących parametryczność: