-
Postów
252 -
Dołączył
-
Ostatnia wizyta
-
Wygrane w rankingu
35
Ostatnia wygrana kojacek w dniu 28 Października
Użytkownicy przyznają kojacek punkty reputacji!
Profile Information
-
Gender
Male
Ostatnie wizyty
Osiągnięcia kojacek
Nowicjusz (2/6)
63
Reputacja
-
W AC działa w dwie strony. Bez zarzutu. Jak przełącznik radiowy. Albo 0 albo 1.
-
Zatem... Załaduj poniższych parę nieci innych nawiasów. Polecenie L-ANNO2 . Pack musi być. Przetestuj proszę. ; -------------------------------------------------------------------------------------------- ; ; Polecenie C:L-ANNO2 zmienia zmienna ANNOALLVISIBLE dla kazdego layoutu na wartosc przeciwna ; ; operujac na XDATA ; ; by kojacek 2024 ; ; -------------------------------------------------------------------------------------------- ; (defun C:L-ANNO2 (/ %n %i %l) (setq %n "AcadAnnoAV") (foreach % (layoutlist) (setq %i (vlax-vla-object->ename (vla-item (cd:ACX_Layouts) %) ) ) (setq %l (length (if (not (cd:XDT_GetXData %i %n) ) (cd:XDT_PutXData %i %n '((1070 . 1))) (cd:XDT_RemoveXData %i %n) ) ) ) (princ (strcat "\nDla układu " % " zmieniono ustawienie ANNOALLVISIBLE na " (if (< 10 %l) "1" "0") ) ) ) (princ) ) ; -------------------------------------------------------------------------------------------- ;
-
GETPROPERTYVALUE, SETPROPERTYVALUE oraz DUMPALLPROPERTIES są w AC pewnie już z 10 lat. Zatem z rzekomą zgodnością różnie bywa.
-
kojacek obserwuje zawartość Zamykanie obiektów w bloku , ANNOALLVISIBLE , Prostokąt obejmujący MTEXT i transformacje układów współrzędnych i 1 inny
-
Tych parę nawiasów wraz z treścią umieszczoną pomiędzi nimi, zmienia wartosc tej zmiennej dla kazdego layoutu (bez modelu) na przeciwną. Potrzeba CADPL-Pack'a załadowanego wcześniej. ; -------------------------------------------------------------------------------------------- ; ; Polecenie C:L-ANNO zmienia zmienna ANNOALLVISIBLE dla kazdego layoutu na wartosc przeciwna ; ; by kojacek 2024 ; ; -------------------------------------------------------------------------------------------- ; (defun C:L-ANNO (/ %i :a) (defun :a (x)(getpropertyvalue x "AnnoAllVisible")) (foreach % (layoutlist) (setq %i (vlax-vla-object->ename (vla-item (cd:ACX_Layouts) %) ) ) (setpropertyvalue %i "AnnoAllVisible" (abs (1- (:a %i))) ) (princ (strcat "\nDla układu " % " zmieniono ustawienie ANNOALLVISIBLE na " (itoa (:a %i)) ) ) ) (princ) ) ; -------------------------------------------------------------------------------------------- ; W AC działa, nie wiem jak w jemu podobnych. kojacek
-
kruszynski zareagował(a) na odpowiedź w temacie: Prostokąt obejmujący MTEXT i transformacje układów współrzędnych
-
Prostokąt obejmujący MTEXT i transformacje układów współrzędnych
kojacek odpowiedział(a) na perlon temat w Wsparcie programistyczne LISP i VisualLISP
WIdzę teraz, że odsunięcie ramki nie jest wyrażone w jednostkach, tylko jako jako współczynnik wysokości. Wartość 1 daje odsunięcie o wartości Height MTEXT-u. -
perlon zareagował(a) na odpowiedź w temacie: Prostokąt obejmujący MTEXT i transformacje układów współrzędnych
-
swazy zareagował(a) na odpowiedź w temacie: [LISP] Odmrażanie warstw za pomocą kodu.
-
Prostokąt obejmujący MTEXT i transformacje układów współrzędnych
kojacek odpowiedział(a) na perlon temat w Wsparcie programistyczne LISP i VisualLISP
Potrzebujesz: 1) (załadowanego) CADPL-Pack'a (wiadomo) 2) funkcji z Express Tools: acet-geom-mtxtbox (oprócz AutoCAD-a jest w BricsCAD-zie i GStar'ze. Nie wiem jak jest w ZwCAD-ie) 3) Poniższego kawałka kodu: ;;; ramka MTEXTu (2024 by kojacek) (defun C:MTEST (/ %e %d %p %o %z) (if (and (setq %e (car (entsel "\Wybierz MTEXT:"))) (= "MTEXT" (cdr (assoc 0 (setq %d (entget %e))))) ) (progn (setq %p (acet-geom-mtxtbox %d 0.0) %z (cdr (assoc 210 %d)) %p (mapcar '(lambda (%) (trans % 1 %z) ) %p ) ) (setq %o (cd:ACX_AddLWPolyline (cd:ACX_ASpace) %p t)) (vla-TransformBy %o (cd:CON_TransMatrix 0)) ) (princ "\nZły wybór.") ) ) Z tego co na szybko przetestowałem, maluje prostokąt dla wskazanego MTEXT-u, niezależnie od aktywnego układu współrzednych. Funkcja acet-geom-mtxtbox, zwraca współrzędne prostokata opisującego rzeczywisty obszar MTEXT-u (porównaj z ramką MTEXT-u). Swego czasu poruszałem to tu: https://kojacek.wordpress.com/2017/10/08/wielkosc-obszaru-mtext-u/. Drugi argument funkcji (tutaj 0.0), to odsunięcie prostokąta. Pozwala to na rysowanie większego obramowania. -
RobS zareagował(a) na odpowiedź w temacie: [LISP] Odmrażanie warstw za pomocą kodu.
-
dmatusz3 zareagował(a) na odpowiedź w temacie: [LISP] Odmrażanie warstw za pomocą kodu.
-
[LISP] Odmrażanie warstw za pomocą kodu.
kojacek odpowiedział(a) na swazy temat w Wsparcie programistyczne LISP i VisualLISP
Być może przyczyną jest funkcja entmod. Wprawdzie może ona modyfikować obiekty niegraficzne (tutaj LAYER), ale gdzieś czytałem że są wyjątki dla kodu 70 - nie pamiętam jednak czego dotyczyły. W autocadowskich "antycznychch" czasach (przed ActiveX (czyli przed 1999 )), pewnie bym użył command zamiast entmod… ale pewnie dlatego że byłoby łatwiej. Na marginesie - Twoje warunkowanie kodu 70 jest błędne - działa tylko w wyjątkowych sytuacjach. Kod 70 jest wartością bitową, więc na przykład 1 jest prawdziwe nie tylko dla 1, ale też 3 (2+1)... 5 (4+1)... 7 (2+4+1)... 9... etc. Teraz przykład z użyciem ActiveX (i CADPack'a). Krótko (i co ważniejsze) działa: (defun C:ODMROZWAR () (vlax-for % (cd:ACX_Layers) (if (and (= :vlax-true (vla-get-freeze %)) (wcmatch (vla-get-name %) "LS*") ; <- moj testowy filtr ) (vla-put-freeze % :vlax-false) ) ) (vla-regen (cd:ACX_ADoc) 0) (princ) ) -
Pawel.G zareagował(a) na odpowiedź w temacie: Zamykanie obiektów w bloku
-
Zamykanie obiektów w bloku
kojacek odpowiedział(a) na Pawel.G temat w Wsparcie programistyczne LISP i VisualLISP
Jeszcze: 1) sprawdzić czy trzeba cokolwiek robić (bo blok który chcemy stworzyć już istnieje) 2) deklarować zmienne lokalne (zawsze) 3) poznać funkcję initget dla getreal / getint / getangle / getpoint (ilość modułów = 0, a kąt 666...) 4) blok można tworzyć przez command / entmake / activeX (https://kojacek.wordpress.com/2017/11/22/programowe-tworzenie-bloku/) 5) alternatywnie pomysleć o szykach (https://kojacek.wordpress.com/2024/05/26/dostep-do-elementow-szyku/) albo MINSERT (https://kojacek.wordpress.com/2019/06/23/blok-5-rzeczy-o-ktorych-byc-moze-nie-wiesz/) -
kojacek obserwuje zawartość Zaznaczanie obiektów wewnątrz polilinii
-
Zaznaczanie obiektów wewnątrz polilinii
kojacek odpowiedział(a) na dmatusz3 temat w ZWCAD Standard i Professional
Nieco mnie to zmobilizowało... do uporządkowania pewnych rozważań nad zbiorami wskazań. Trochę bardziej rozbudowane tworzenie zbiorów wskazań przez krzywe (LINE/LWPOLYLINE/ARC/ELLIPSE/SPLINE), krawędzią, oknem, oknem przecinającym. Także z filtrami. Więcej: https://kojacek.wordpress.com/2024/09/08/zbior-wskazan-okreslony-krzywa/ -
kruszynski zareagował(a) na odpowiedź w temacie: Program do podmiany wartości atrybutów w tym w liście bloków
-
RobS zareagował(a) na odpowiedź w temacie: Program do podmiany wartości atrybutów w tym w liście bloków
-
Program do podmiany wartości atrybutów w tym w liście bloków
kojacek odpowiedział(a) na Robert11 temat w Wsparcie programistyczne LISP i VisualLISP
(defun %aaa () (foreach % (list "ENE" "DUE" "RABE" "POLKNAL" "CHINCZYK" "NAME") (progn (setq *ATT-LIST* (list % "SYMBOL" "LPS")) (C:ATR-ZMIANA) ) ) )- 11 odpowiedzi
-
- jedna operacja
- wiele bloków
-
(i 3 więcej)
Oznaczone tagami:
-
Program do podmiany wartości atrybutów w tym w liście bloków
kojacek odpowiedział(a) na Robert11 temat w Wsparcie programistyczne LISP i VisualLISP
Można się pokusić o (w istocie drobną) przeróbkę tego kodu, aby pracował w trybie "wsadowym". Kod wygląda teraz tak: ; -------------------------------------------------------------------------- ; ; C:ATR-ZMIANA by kojacek 2024 (http://kojacek.wordpress.com) ; ; -------------------------------------------------------------------------- ; (defun C:ATR-ZMIANA ()(jk:140824_GetBklMask)(princ)) ; -------------------------------------------------------------------------- ; (defun jk:140824_GetBklMask ( / %m %s %l %a %b %r %e %i %o :t) (defun :t (i) (getstring (strcat "\nPodaj " (nth i (list "pierwszy" "drugi")) " tag atrybutu do zamiany: " ) ) ) (if (setq %m (if (not *ATT-LIST*) (getstring "\nPodaj początkowy fragment nazwy bloku: ") (car *ATT-LIST*) ) ) (if (member %m (list "" " ")) (princ "\nBłąd - zła nazwa.") (if (setq %s (ssget "_x" (list (cons 0 "INSERT") (cons 410 (getvar "CTAB")) (cons 2 (strcase (strcat %m "*"))) ) ) ) (progn (setq %l (cd:SSX_Convert %s 0)) (if (and (setq %a (if (not *ATT-LIST*) (strcase (:t 0)) (cadr *ATT-LIST*) ) ) (setq %b (if (not *ATT-LIST*) (strcase (:t 1)) (caddr *ATT-LIST*) ) ) ) (progn (setq %r (mapcar '(lambda (% / %1 %2 %3) (if (setq %1 (cd:BLK_GetAtts %)) (if (and (setq %2 (cdr (assoc %a %1))) (setq %3 (cdr (assoc %b %1))) ) (list % %2 %3) 1 ) 1 ) ) %l ) %e (vl-remove-if-not 'numberp %r) %r (mapcar 'car (vl-remove-if 'numberp %r)) ) (if %r (progn (cd:SYS_UndoBegin) (foreach % %r (setq %i (cd:BLK_GetAtts %) %o (vlax-ename->vla-object %) ) (cd:BLK_SetAttValueVLA %o %a (cdr (assoc %b %i)) ) (cd:BLK_SetAttValueVLA %o %b (cdr (assoc %a %i)) ) ) (princ (strcat "\nZmieniono atrybuty w " (itoa (length %r)) " blokach." (if %e (strcat " Odrzucono " (itoa (length %e)) " bloków." ) "" ) ) ) (cd:SYS_UndoEnd) ) (princ (strcat "\n" (itoa (length %l)) " bloków nie spełnia wymagań do zmiany atrybutów." ) ) ) ) (princ "\nBłąd. Wymagane nazwy atrybutów.") ) ) (princ "\nNie znaleziono odpowienich bloków.") ) ) (princ "\nBłąd. Brak nazwy") ) ) ; -------------------------------------------------------------------------- ; (princ) Przed wywołaniem polecenia wystarczy teraz zadeklarować zmienną globalną o nazwie *ATT-LIST*. Jest to trzyelementowa lista gdzie pierwszy element to maska (początkowy fragment) nazwy bloku, a dwa kolejne to tagi atrybutów do zamiany. Deklaracja zmiennej: (setq *ATT-LIST* (list "NAME" "SYMBOL" "LPS")) Następnie wywołania polecenia ATR-ZMIANA skutkują jak na animacji poniżej. Gdy zmienna nie jest zadeklarowana polecenie działa jak w poprzednim poście. Nie trzeba tłumaczyć że wartości zmiennej można modyfikować w zależności od potrzeb.- 11 odpowiedzi
-
- jedna operacja
- wiele bloków
-
(i 3 więcej)
Oznaczone tagami:
-
dmatusz3 zareagował(a) na odpowiedź w temacie: Program do podmiany wartości atrybutów w tym w liście bloków
-
kruszynski zareagował(a) na odpowiedź w temacie: Program do podmiany wartości atrybutów w tym w liście bloków
-
Program do podmiany wartości atrybutów w tym w liście bloków
kojacek odpowiedział(a) na Robert11 temat w Wsparcie programistyczne LISP i VisualLISP
Potrzebujesz wykonać następujące czynności: 1) załadować CADPL-Pack'a. Znajdziesz go tutaj: https://kojacek.wordpress.com/2015/11/04/cadpl-pack/ 2) oraz poniższy kod definiujący polecenie ATR-ZMIANA: ; -------------------------------------------------------------------------- ; ; C:ATR-ZMIANA by kojacek 2024 (http://kojacek.wordpress.com) ; ; -------------------------------------------------------------------------- ; (defun C:ATR-ZMIANA ()(jk:140824_GetBklMask)(princ)) ; -------------------------------------------------------------------------- ; (defun jk:140824_GetBklMask ( / %m %s %l %a %b %r %e %i %o :t) (defun :t (i) (getstring (strcat "\nPodaj " (nth i (list "pierwszy" "drugi")) " tag atrybutu do zamiany: " ) ) ) (if (setq %m (getstring "\nPodaj początkowy fragment nazwy bloku: ") ) (if (member %m (list "" " ")) (princ "\nBłąd - zła nazwa.") (if (setq %s (ssget "_x" (list (cons 0 "INSERT") (cons 410 (getvar "CTAB")) (cons 2 (strcase (strcat %m "*"))) ) ) ) (progn (setq %l (cd:SSX_Convert %s 0)) (if (and (setq %a (strcase (:t 0))) (setq %b (strcase (:t 1))) ) (progn (setq %r (mapcar '(lambda (% / %1 %2 %3) (if (setq %1 (cd:BLK_GetAtts %)) (if (and (setq %2 (cdr (assoc %a %1))) (setq %3 (cdr (assoc %b %1))) ) (list % %2 %3) 1 ) 1 ) ) %l ) %e (vl-remove-if-not 'numberp %r) %r (mapcar 'car (vl-remove-if 'numberp %r)) ) (if %r (progn (cd:SYS_UndoBegin) (foreach % %r (setq %i (cd:BLK_GetAtts %) %o (vlax-ename->vla-object %) ) (cd:BLK_SetAttValueVLA %o %a (cdr (assoc %b %i)) ) (cd:BLK_SetAttValueVLA %o %b (cdr (assoc %a %i)) ) ) (princ (strcat "\nZmieniono atrybuty w " (itoa (length %r)) " blokach." (if %e (strcat " Odrzucono " (itoa (length %e)) " bloków." ) "" ) ) ) (cd:SYS_UndoEnd) ) (princ (strcat "\n" (itoa (length %l)) " bloków nie spełnia wymagań do zmiany atrybutów." ) ) ) ) (princ "\nBłąd. Wymagane nazwy atrybutów.") ) ) (princ "\nNie znaleziono odpowienich bloków.") ) ) (princ "\nBłąd. Brak nazwy") ) ) ; -------------------------------------------------------------------------- ; (princ) 3) wywołujesz polecenie ATR-ZMIANA, jak na poniższym ruchomym obrazie:- 11 odpowiedzi
-
- jedna operacja
- wiele bloków
-
(i 3 więcej)
Oznaczone tagami:
-
[LISP] Dostęp do elementów w szyku
kojacek odpowiedział(a) na swazy temat w Wsparcie programistyczne LISP i VisualLISP
Jeżeli: (getpropertyvalue ENAME "ClassName") gdzie ENAME to ename szyku zwróci "AcDbAssociativeRectangularArray" można dać: (setpropertyvalue ENAME "Items" INT) <- ilość kolumn (setpropertyvalue ENAME "ItemSpacing" REAL) <- odległość między kolumnami to samo dla: RowsWithExpression <- Wiersze RowSpacingWithExpression <- Odstępy między wierszami oraz: Levels <- Poziomy LevelSpacing <- Odstęp między poziomami