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


Recommended Posts

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

 

Link to comment
Share on other sites

  • dmatusz3 changed the title to Program automatycznie aktualizujący treść napisów na danej warstwie.-proszę o pomoc [rozwiązany]
  • dmatusz3 locked this topic
Guest
This topic is now closed to further replies.