Program automatycznie aktualizujący treść napisów na danej warstwie.-proszę o pomoc [rozwiązany]


Rekomendowane odpowiedzi

Sorry jestem kompletnym laikiem jeśli chodzi o Lispa i w ogóle ciężko mi wymysleć na jakiej zasadzie ma działać ten program. Po dłuższym zastanowieniu do głowy przyszły mi dwa warianty programu: 

WARIANT I:

Program zamieniający dane obiekty ( w tym przypadku byłyby to obiekty tekstowe) opierałby się na funkcji "subst". 

WARIANT II:

Program opierający się na funkcji "(command "EDTEKST")

Czy mógłby ktoś doradzić, który z tych wariantów będzie prostszy do zastosowania ( o ile w ogóle da się napisać program opierając się na tych funkcjach) ? 

Odnośnik do komentarza
Udostępnij na innych stronach

Ok, dziękuję między czasie będe starał się samodzielnie robić program. Przepraszam za wprowadzenie w błąd ,ale jednak dane: warstwa, stary napis, nowy napis muszą być wpisywane z okna poleceń. Zrobiłem już kawałek programu, który ma za zadanie pobrać ze zbioru wskazań podane przeze mnie elementy, lecz autocad ciągle informuje mnie o błędnej podanej wartości w ssget. 

(defun c:aa ()
(setq warstwa (getstring "Podaj nazwe warstwy: "))
(setq stary_napis (getstring "Podaj stary napis: "))
(setq sel1 (ssget "X" (list (cons 0 TEXT)(cons 1 stary_napis)(cons 8 warstwa)))))

O ile się nie mylę cyfry w  oznaczają dany parametr szukanego elementu, miałem problem ,aby znaleść identyfikator do parametru treści napisu, czy na pewno jest to "1"?

Odnośnik do komentarza
Udostępnij na innych stronach

Przepraszam za spam ,alezdołałem (chyba) poradzić sobie z poprzednim problemem i udało mi się napisać cos takiego, niestety w dwóch ostatnich linijkach pokazuje mi błąd i nie mam pojęcia co jest nie tak. Byłbym wdzięczny jakby ktoś rzucił na to okiem.

(defun c:aa ()
(setq warstwa (getstring "Podaj nazwe warstwy: "))
(setq stary_napis (getstring "Podaj stary napis: "))
(setq napis (ssget "X" (list (cons 1 stary_napis)(cons 8 warstwa))))
(setq nazwa_napisu (ssname napis 1))
(setq zmiana (entget nazwa_napisu))
(setq nowy_napis (getstring "Podaj nowy napis: "))
(setq nowy_napis2 (subst(cons 1 nowy_napis)(cons 1 napis)zmiana))
(setq koniec (entmod nowy_napis2)))
 

Odnośnik do komentarza
Udostępnij na innych stronach

Poszczególne kody DXF może Pan znaleźć np tutaj:

http://www.autodesk.com/techpubs/autocad/acad2000/dxf/

Błędna wartość w linii:

 (setq sel1 (ssget "X" (list (cons 0 TEXT)(cons 1 stary_napis)(cons 8 warstwa)))))

to TEXT. Użyte w ten sposób znaczy że TEXT to zmienna. Powinno być "TEXT"

 (setq nazwa_napisu (ssname napis 1))  ; Informole liczą od 0 a nie od 1. prosze uważać.

podmiana wartości tekstu powinna wyglądać tak:

(setq nowy_napis2 (subst (cons 1 nowy_napis) (assoc 1 zmiana) zmiana))

 

Odnośnik do komentarza
Udostępnij na innych stronach

  • dmatusz3 zmienił(a) tytuł na Program automatycznie aktualizujący treść napisów na danej warstwie.-proszę o pomoc [rozwiązany]
  • dmatusz3 zablokował(a) ten temat
Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.