Rekomendowane odpowiedzi

Opublikowano

Skrypt miałby działać w taki sposób, że w kodzie miałby wpisane 

stary_napis

nowy_napis

Nie potrzeba "kontaktu" użytkownika z oknem poleceń, wybór zmiany treść napisu miałby się odbywać na poziomie zmiany kodu programu.

Opublikowano

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) ? 

Opublikowano

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

Opublikowano

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)))
 

Opublikowano

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))

 

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