_

[LISP] Field w atrybutach

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".

[LISP] Field w atrybutach

Postprzez Jerry » sty 26, 2018 09:19

Witam

Kopiuję blok zawierający atrybut i chcę zmienić zawartość pierwszego atrybutu.

Co należy wpisać w kodzie poniżej aby, atrybut po zmianie nie był w formie "###" tylko jawnej?

Kod: Zaznacz cały
(defun WeryfikujKoniecKomendy () 
  (if (= *KoniecKomendyReaktor* nil)
    (setq *KoniecKomendyReaktor* (vlr-editor-reactor nil '((:vlr-commandEnded . KoniecKomendyReaktor)))))
  )
; ==**==**==**==**
(WeryfikujKoniecKomendy)
; ==**==**==**==**
(defun KoniecKomendyReaktor (A B / vla-el nrk-vla linia nowaWart)   
  (if (= "COPY" (nth 0 B))
    (progn
      (setq vla-el (vlax-ename->vla-object (entlast)))
      (setq nrk-vla (nth 0 (vlax-safearray->list (vlax-variant-value (vla-getattributes vla-el)))))
      (setq linia (vlax-ename->vla-object (car (entsel "\nWskaż obiekt"))))
      (setq nowaWart (strcat "%<\\AcObjProp Object(%<\\_ObjId " (itoa (vla-get-ObjectId linia)) ">%).Layer>%"))
      (vla-put-TextString nrk-vla nowaWart)
      ;(vla-Update nrk-vla)
      ;(vl-cmdf "_.updatefield" (vlax-vla-object->ename vla-el) "")
      )
    ) 
  )
; ==**==**==**==**
Jerry
 
Posty: 208
Dołączył(a): paź 02, 2005 18:35
Lokalizacja: Gdańsk

Re: [LISP] Field w atrybutach

Postprzez kojacek » sty 26, 2018 10:15

Jerry napisał(a):Witam

Kopiuję blok zawierający atrybut i chcę zmienić zawartość pierwszego atrybutu.

Co należy wpisać w kodzie poniżej aby, atrybut po zmianie nie był w formie "###" tylko jawnej?

Kod: Zaznacz cały
(defun WeryfikujKoniecKomendy () 
  (if (= *KoniecKomendyReaktor* nil)
    (setq *KoniecKomendyReaktor* (vlr-editor-reactor nil '((:vlr-commandEnded . KoniecKomendyReaktor)))))
  )
; ==**==**==**==**
(WeryfikujKoniecKomendy)
; ==**==**==**==**
(defun KoniecKomendyReaktor (A B / vla-el nrk-vla linia nowaWart)   
  (if (= "COPY" (nth 0 B))
    (progn
      (setq vla-el (vlax-ename->vla-object (entlast)))
      (setq nrk-vla (nth 0 (vlax-safearray->list (vlax-variant-value (vla-getattributes vla-el)))))
      (setq linia (vlax-ename->vla-object (car (entsel "\nWskaż obiekt"))))
      (setq nowaWart (strcat "%<\\AcObjProp Object(%<\\_ObjId " (itoa (vla-get-ObjectId linia)) ">%).Layer>%"))
      (vla-put-TextString nrk-vla nowaWart)
      ;(vla-Update nrk-vla)
      ;(vl-cmdf "_.updatefield" (vlax-vla-object->ename vla-el) "")
      )
    ) 
  )
; ==**==**==**==**


Nie wiemy o co chodzi. Dałeś fragment reaktora, ale właściwie nie wiemy czego dotyczy. Wartość #### fielda, świadczy o błędnej formule / zerwaniu połączenia itp. a nie o jego jawności lub nie.
Avatar użytkownika
kojacek
 
Posty: 5430
Dołączył(a): paź 03, 2005 20:17

Re: [LISP] Field w atrybutach

Postprzez Jerry » sty 26, 2018 10:41

Po kopiowaniu bloku z atrybutem i wskazaniu jakiegokolwiek elementu, w atrybucie powinna pojawić się informacja, na jakiej warstwie był wskazany element.
### likwiduje poprzez odświeżenie rysunku i tego chciałbym uniknąć
Jerry
 
Posty: 208
Dołączył(a): paź 02, 2005 18:35
Lokalizacja: Gdańsk

Re: [LISP] Field w atrybutach

Postprzez kojacek » sty 26, 2018 10:58

Jerry napisał(a):Po kopiowaniu bloku z atrybutem i wskazaniu jakiegokolwiek elementu, w atrybucie powinna pojawić się informacja, na jakiej warstwie był wskazany element.
### likwiduje poprzez odświeżenie rysunku i tego chciałbym uniknąć


Sorry, ale nadal nie rozumiem. Masz blok z atrybutem, którego wartością jest field z warstwą jakiegoś obiektu (nazwijmy go A), tak? Teraz kopiujesz blok, i co dalej?
Avatar użytkownika
kojacek
 
Posty: 5430
Dołączył(a): paź 03, 2005 20:17

Re: [LISP] Field w atrybutach

Postprzez Jerry » sty 26, 2018 11:06

Mam jakikolwiek blok (A), który zawiera atrybuty (z jakąkolwiek zawartością).
Następnie kopiuje ten blok (mam nowy blok B) i po zakończonym poleceniu kopiowania wskazuje element (C) , z którego pobieram nazwę warstwy i wstawiam ją jako wartość atrybut bloku B (skopiowanego przed chwilą).
Jerry
 
Posty: 208
Dołączył(a): paź 02, 2005 18:35
Lokalizacja: Gdańsk

Re: [LISP] Field w atrybutach

Postprzez kruuger » sty 26, 2018 11:09

Jerry napisał(a):Mam jakikolwiek blok (A), który zawiera atrybuty (z jakąkolwiek zawartością).
Następnie kopiuje ten blok (mam nowy blok B) i po zakończonym poleceniu kopiowania wskazuje element (C) , z którego pobieram nazwę warstwy i wstawiam ją jako wartość atrybut bloku B (skopiowanego przed chwilą).

dajrze jakie bloki i sample w cadzie.
k.
Avatar użytkownika
kruuger
 
Posty: 4826
Dołączył(a): paź 27, 2005 20:14
Lokalizacja: Kraków

Re: [LISP] Field w atrybutach

Postprzez kojacek » sty 26, 2018 11:10

Jerry napisał(a):Mam jakikolwiek blok (A), który zawiera atrybuty (z jakąkolwiek zawartością).
Następnie kopiuje ten blok (mam nowy blok B) i po zakończonym poleceniu kopiowania wskazuje element (C) , z którego pobieram nazwę warstwy i wstawiam ją jako wartość atrybut bloku B (skopiowanego przed chwilą).


Ale to pobieranie nazwy warstwy i wstawianie do atrybutu, robisz poleceniem _FIELD?
Avatar użytkownika
kojacek
 
Posty: 5430
Dołączył(a): paź 03, 2005 20:17

Re: [LISP] Field w atrybutach

Postprzez Jerry » sty 26, 2018 11:17

Nowa wartość atrybutu to
Kod: Zaznacz cały
(setq nowaWart (strcat "%<\\AcObjProp Object(%<\\_ObjId " (itoa (vla-get-ObjectId linia)) ">%).Layer>%"))
Załączniki
klops.dwg
(84.82 KiB) Pobrane 5 razy
Jerry
 
Posty: 208
Dołączył(a): paź 02, 2005 18:35
Lokalizacja: Gdańsk

Re: [LISP] Field w atrybutach

Postprzez kojacek » sty 26, 2018 11:19

Jerry napisał(a):Nowa wartość atrybutu to
Kod: Zaznacz cały
(setq nowaWart (strcat "%<\\AcObjProp Object(%<\\_ObjId " (itoa (vla-get-ObjectId linia)) ">%).Layer>%"))


Jeżeli LISP-em to robisz, zapuść:
Kod: Zaznacz cały
(vla-regen (cd:ACX_ADoc) acActiveViewport)
Avatar użytkownika
kojacek
 
Posty: 5430
Dołączył(a): paź 03, 2005 20:17

Re: [LISP] Field w atrybutach

Postprzez Jerry » sty 26, 2018 11:25

Własnie chciałbym zrezygnować z regen-a, gdyż zdarza mi się to na dużych plikach i regen za dużo trwa.
Próbowałem za pomocą
Kod: Zaznacz cały
(vl-cmdf "_.updatefield" (vlax-vla-object->ename vla-el) "")

ale to, działa tylko przy wstawianiu nowego bloku, a nie przy jego kopiowaniu.
Jerry
 
Posty: 208
Dołączył(a): paź 02, 2005 18:35
Lokalizacja: Gdańsk

Następna strona

Powrót do AutoCAD

Kto przegląda forum

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