_

[Lisp] zmiana koloru obiektów w bloku na ByBlock

Forum poświęcone flagowemu produktowi oraz aplikacjom pochodnym Autodesku. To jedyne forum mające w tytule nazwę programu, a to ze względu na jego olbrzymią popularność w Polsce. Można tutaj umieszczać również posty z ogólnie pojętej tematyki "Kreślarskie 2D".

Re: [Lisp] zmiana koloru obiektów w bloku na ByBlock

Postprzez Lukaszs85 » mar 02, 2017 20:08

Być może pomogę coś w tym temacie. Jeśli wstawiamy bloki i dokonujemy w nich zmiany to te zmiany widoczne są dopiero po zresetowaniu bloku bądź po usunięciu go i wstawieniu ponownie. Polecenie REGEN nie działa na to. Niedogodność ta jest szczególnie widoczna przy blokach z atrybutami. Po dodaniu atrybutów są one widoczne dopiero po resecie bloku lub wstawieniu nowego z biblioteki.
Jak to rozwiązać za pomocą Autolispa ? Niestety nie wiem.
Lukaszs85
 
Posty: 21
Dołączył(a): lut 24, 2017 00:24

Re: [Lisp] zmiana koloru obiektów w bloku na ByBlock

Postprzez Lukaszs85 » mar 02, 2017 20:28

Dziwne to. wynikające raczej z jakiegoś błędu Autocada. Blok działa odzyskuje swoje docelowe cechy dopiero po wejściu i wyjściu w edytor bloku lokalnie. Dziwne tym bardziej, że wejście i wyjście w edytor bloku do funkcji parametrycznych i geometrycznych nie przynosi żadnego rezultatu.
Może brakuje jakiejś funkcji odświeżającej definicję bloku?
Lukaszs85
 
Posty: 21
Dołączył(a): lut 24, 2017 00:24

Re: [Lisp] zmiana koloru obiektów w bloku na ByBlock

Postprzez kojacek » mar 02, 2017 21:54

Lukaszs85 napisał(a):Być może pomogę coś w tym temacie. Jeśli wstawiamy bloki i dokonujemy w nich zmiany to te zmiany widoczne są dopiero po zresetowaniu bloku bądź po usunięciu go i wstawieniu ponownie. Polecenie REGEN nie działa na to. Niedogodność ta jest szczególnie widoczna przy blokach z atrybutami. Po dodaniu atrybutów są one widoczne dopiero po resecie bloku lub wstawieniu nowego z biblioteki.
Jak to rozwiązać za pomocą Autolispa ? Niestety nie wiem.


Chyba nie wszyscy rozumiemy jak działają bloki z atrybutami. Zmiana definicji bloku ma natychmiastowy wpływ na obiekty graficzne (nie atrybuty) istniejących wstawień bloku. Zmiany (z atrybutami) odnoszą do nowych wstawień.
Avatar użytkownika
kojacek
 
Posty: 5263
Dołączył(a): paź 03, 2005 20:17

Re: [Lisp] zmiana koloru obiektów w bloku na ByBlock

Postprzez ziele_o2k » mar 03, 2017 00:34

kojacek napisał(a):Chyba nie wszyscy rozumiemy jak działają bloki z atrybutami. Zmiana definicji bloku ma natychmiastowy wpływ na obiekty graficzne (nie atrybuty) istniejących wstawień bloku. Zmiany (z atrybutami) odnoszą do nowych wstawień.

Nie no, tyle to ja wiem. Zastanowiło mnie, czemu ten lisp (z pierwszego mojego posta) nie wpływa na wymiary.
To co tutaj niżej wrzucam działa na wszystkie elementy w rysunku i chciałem coś podobnego dla wskazanych bloków już wstawionych w bloku. Coś jednak nie do końca działa, bo miałem teraz taką sytuację, że po zastosowaniu lispa z pierwszego posta, nie mogłem go usunąć z bazy rysunku i ogólnie dziwnie się zachowywał.

Kod: Zaznacz cały
(defun C:abb ; = All to Color Bylayer
  (/ cb ent obj blk subent)
  (defun cb () ; = force Color(s) to Bylayer
    (setq obj (vlax-ename->vla-object ent))
    (vla-put-color obj 0); ByBlock
    (if (wcmatch (vla-get-ObjectName obj) "*Dimension,*Leader")
      (foreach prop '(DimensionLineColor ExtensionLineColor TextColor)
        ;; not all such entity types have all 3 properties, but all have at least one
        (if (vlax-property-available-p obj prop)
          (vlax-put obj prop 0); ByVlock
        ); if
      ); foreach
    ); if
  ); defun -- cb
;;  Top-level entities:
  (setq ent (entnext))
  (while ent
    (cb)
    (setq ent (entnext ent))
  ); while
;;  Nested entities in this drawing's Block definitions:
  (setq blk (tblnext "block" t))
  (while blk
    (if (= (logand 20 (cdr (assoc 70 blk))) 0); not an Xref [4] or Xref-dependent [16]
      (progn
        (setq ent (cdr (assoc -2 blk)))
        (while ent
          (cb)
          (setq ent (entnext ent))
        ); while
      ); progn
    ); if
    (setq blk (tblnext "block"))
  ); while
  (command "_.regenall")
  (princ)
); defun
Ziele
Avatar użytkownika
ziele_o2k
 
Posty: 504
Dołączył(a): mar 18, 2014 11:33
Lokalizacja: Poznań

Re: [Lisp] zmiana koloru obiektów w bloku na ByBlock

Postprzez kojacek » mar 03, 2017 07:19

ziele_o2k napisał(a):
kojacek napisał(a):Chyba nie wszyscy rozumiemy jak działają bloki z atrybutami. Zmiana definicji bloku ma natychmiastowy wpływ na obiekty graficzne (nie atrybuty) istniejących wstawień bloku. Zmiany (z atrybutami) odnoszą do nowych wstawień.

Nie no, tyle to ja wiem. Zastanowiło mnie, czemu ten lisp (z pierwszego mojego posta) nie wpływa na wymiary.
To co tutaj niżej wrzucam działa na wszystkie elementy w rysunku i chciałem coś podobnego dla wskazanych bloków już wstawionych w bloku. Coś jednak nie do końca działa, bo miałem teraz taką sytuację, że po zastosowaniu lispa z pierwszego posta, nie mogłem go usunąć z bazy rysunku i ogólnie dziwnie się zachowywał.

Kod: Zaznacz cały
(defun C:abb ; = All to Color Bylayer
  (/ cb ent obj blk subent)
  (defun cb () ; = force Color(s) to Bylayer
    (setq obj (vlax-ename->vla-object ent))
    (vla-put-color obj 0); ByBlock
    (if (wcmatch (vla-get-ObjectName obj) "*Dimension,*Leader")
      (foreach prop '(DimensionLineColor ExtensionLineColor TextColor)
        ;; not all such entity types have all 3 properties, but all have at least one
        (if (vlax-property-available-p obj prop)
          (vlax-put obj prop 0); ByVlock
        ); if
      ); foreach
    ); if
  ); defun -- cb
;;  Top-level entities:
  (setq ent (entnext))
  (while ent
    (cb)
    (setq ent (entnext ent))
  ); while
;;  Nested entities in this drawing's Block definitions:
  (setq blk (tblnext "block" t))
  (while blk
    (if (= (logand 20 (cdr (assoc 70 blk))) 0); not an Xref [4] or Xref-dependent [16]
      (progn
        (setq ent (cdr (assoc -2 blk)))
        (while ent
          (cb)
          (setq ent (entnext ent))
        ); while
      ); progn
    ); if
    (setq blk (tblnext "block"))
  ); while
  (command "_.regenall")
  (princ)
); defun



Zapodaj plik jakiś. Nie próbowałem, ale ogólnie jest tak: Grafiką wymiarów jest blok anonimowy. Jeśli go nadpiszesz zmieni się wygląd. Jakaś tam zmiana bazy rysunkowej, powoduje przywrócenie cech wymiaru zgodnie ze stylem (i/lub) cechami indywidualnymi. Przetestuj coś takiego: weź wymiar, pobierz jego blok anno, z-entmoduj mu jakąś linię na przerywaną. Powinno się zmienić. potem rusz wymiar - powinno wrócić.
Avatar użytkownika
kojacek
 
Posty: 5263
Dołączył(a): paź 03, 2005 20:17

Poprzednia strona

Powrót do AutoCAD

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników