Newsgroup: it.comp.software.cad
Titolo: Autolisp quote testo punti

salve a tutti
in rete ho trovato questo Lisp, dovrebbe servire ad assegnare delle quote 
nel caso in cui si sia in possesso del solo testo quota e con tutte le 
coordinate z=o azzerate ....rimettendo il testo in quota successivamente 
sarebbe possibile leggere le xyz dei testi ....e tramite una lista txt 
ottenibile con altro lisp, riuscire a ricostruire la superfice 
corrispondente con opportuno applicativo.
Il problema è che sembra fatto per una versione precedente ad autocad 2006 e 
non mi rimette in quota il "testo quota"...l'altro lisp che ho quello che mi 
legge tutte le quote mi funziona, qualcuno può aiutarmi ad adattarlo? spero 
di essere stato chiaro
vi ringrazio
(defun c:testi_z ( / ent datent quot_z cont ss)
(setvar "cmdecho" 0 )
        (prompt "\nSelezionare testi a cui cambiare elevazione:")
        (setq ss (ssget (list (cons 0 "TEXT"))))
        (if ss (progn
                (setq lung (sslength ss))
                (setq cont 0)
                (repeat lung
                        (setq ent (ssname ss cont))
                        (setq datent (entget ent))
                        (setq quot_z (atof (cdr (assoc 1 datent))))
                        (command "_move" ent "" "0,0,0" (list 0 0 quot_z ))
                        (setq cont (1+ cont))
                )
        ))
(princ)
) 

Il lisp dovrebbe funzionare per tutte le versioni di AutoCAD.
Prova a verificare che i testi che hai siano TEXT e non MTEXT, perchè il
lisp seleziona solamente le entità TEXT.
Ciao Claudio
"A¤P" <ss@kk> ha scritto nel messaggio
news:47034f65$0$4797$4faf...@reader4.news.tin.it...



grazie per la risposta molto tempestiva :)
...dalla finestra proprietà quando seleziono trovo soltanto testo in alto 
alla finestra
 ciao 


dove l'hai trovato?
Perchè io avrei bisogno proprio di fare una cosa simile, cioè estrarre il valore di un TEXT ed 
applicarlo come coord. Z ad un punto di coord. X,Y,0.
-- 
Ciao


un vecchio thread di diversi anni...speriamo che si riesca a fare...sarebbe 
superbo!
in ogni caso se si trova qualcosa lo postiamo nel ng ciao
http://groups.google.it/group/it.comp.software.cad/browse_thread/thread/9a8c498f31b267c8/9a3db7cc38c1e64d?hl=it&lnk=st&q=autocad+punti+non+quotati&rnum=18#9a3db7cc38c1e64d
 

http://www.cg-cad.com/ttlisp141.htm
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

> 
http://www.cg-cad.com/ttlisp141.htm
bello, ma non funziona.
il primo postato invece funziona egregiamente ma cambia l'elevazione al testo...
Piuttosto che niente.
-- 
Ciao

 in ogni caso se si trova qualcosa lo postiamo nel ng ciao
mi sembrava un codice conosciuto...
:)) 

 bello, ma non funziona.
cosa non funziona ?


Hello, Mario!
You wrote  on Wed, 3 Oct 2007 12:29:29 +0200:
 MS> mi sembrava un codice conosciuto...
 MS> :))
bisogna ringraziarti lo so ...č roba tua :-)))
un piccolo aiuto ti prego...ho delle quote tipo :  (+130)
le parentesi non lo fanno andare....come fare?
ancora grazie ciao

Hello, arri!
You wrote  on Wed, 03 Oct 2007 12:36:19 +0200:
??>>> 
http://www.cg-cad.com/ttlisp141.htm
??>> bello, ma non funziona.
a> cosa non funziona ?
anche io lo sto provando per via delle parentesi tonde presenti nelle
quote...
ho digitato TXT2Z al promt...mi dice seleziona numero...seleziono tutte le
quote...ma rimangono a quota zero... cosa sbaglio?
ringrazio ciao

 ringrazio ciao
l'autore spiega che i testi devono essere stringhe numeriche (ad esempio
"10.20") 



----
L'ho trovato!
Ti inserisce un nuovo punto a quota giusta (valore di TEXT) *sul punto di inserimento del testo*,
che non è esattamente quello di cui si parlava ma è un altro passo avanti.
Quel che serviva era di "muovere" un punto in posizione arbitraria (X,Y,0) di (valore di TEXT) 
sulla Z
-- 
Ciao

 Quel che serviva era di "muovere" un punto in posizione arbitraria (X,Y,0)
da selezionare (logicamente)


Hello, 
fabio.it
!
You wrote  on Wed, 03 Oct 2007 14:03:46 +0200:
 fi> ----
 fi> L'ho trovato!
 fi> Ti inserisce un nuovo punto a quota giusta (valore di TEXT) *sul punto
 fi> di inserimento del testo*, che non è esattamente quello di cui si
 fi> parlava ma è un altro passo avanti.
 fi> Quel che serviva era di "muovere" un punto in posizione arbitraria
 fi> (X,Y,0) di (valore di TEXT) sulla Z
purtroppo resta il problema che se hai quote del tipo (+ 165) le parentesi 
non fanno andare nulla!...come fare per eliminare le parentesi se hai 3 4 
mila quote? 

 nulla!...come fare per eliminare le parentesi se hai 3 4 mila quote?
sei messo peggio di me,
Tu devi trovare il modo di sistemare anche la stringa di testo prima, e se hai anche il segno 
staccato dal numero credo sia ancora peggio.
Purtroppo io sono quasi 20 anni che non scrivo più in lisp e ricordo poco o nulla  :-(
-- 
Ciao

 mila quote?
Comando: _FIND
trova e sostituisci


Se a t1 assegni "(+" e a t2 assegni ")" (senza virgolette) potrebbe andare
bene la seguente modifica:
;;;-----------------------------
(defun c:testi_z ( / ent datent quot_z cont ss)
(setvar "cmdecho" 0 )
(setq t1(getstring T "\nPrima parte del testo da togliere: "))
(setq t2(getstring T "\nSeconda parte del testo da togliere: "))
        (prompt "\nSelezionare testi a cui cambiare elevazione:")
        (setq ss (ssget (list (cons 0 "TEXT"))))
        (if ss (progn
                (setq lung (sslength ss))
                (setq cont 0)
                (repeat lung
                        (setq ent (ssname ss cont))
                        (setq datent (entget ent))
(setq quota(vl-string-subst "" t1 (vl-string-subst "" t2 (cdr (assoc 1
datent)))))
                        (setq quot_z (atof quota))
                        (command "_move" ent "" "0,0,0" (list 0 0 quot_z ))
                        (setq cont (1+ cont))
                )
        ))
(princ)
)
;;;-----------------------------
Ciao Claudio
"A?P" <ss@kk> ha scritto nel messaggio
news:4703894c$0$17944$4faf...@reader1.news.tin.it...


Hello, arri!
You wrote  on Wed, 03 Oct 2007 14:47:15 +0200:
 a> !...come fare per eliminare le parentesi se hai 3 4
 ??>> mila quote?
 a> Comando: _FIND
 a> trova e sostituisci
non so come ringraziare ----graaaazieeeeeeeeeee  Arri :-)))) funziona alla 
grande!
grazie ciao 

prego ;)



wrote:

suppongo tu sia il Mario Scavroni moderatore della sezione lisp di
Cadlandia
infatti mi chiedevo dove erano finiti i Mod di quel forum.
di te c'è solo il nome nella sezione o lo frequenti anche tu?
non me ne volere ma sembra che ci sia solo Aniello ogni tanto, per il
resto deserto.......

 2D Parametric for 2000-2008 <
(strcat "I like " (substr (ver) 8 4) "!")
--

 resto deserto.......
non credo sapremo mai il motivo di questo ammutinamento


Credo che Aniello abbia dimenticato lì il mio nome, un paio di anni fà 
avevamo pensato che mi potessi occupare della cosa ma purtroppo gli impegni 
di lavoro non me lo hanno reso possibile. 

Credo che Aniello abbia dimenticato lì il mio nome, un paio di anni fà
avevamo pensato che mi potessi occupare della cosa ma purtroppo gli impegni
di lavoro non me lo hanno reso possibile.
(ho risposto con gattaccio...ghghgh)


ho pensato a qualcosa del genere,
ma ho voluto stuzzicarti!! magari essere irritabile (me lo dicono in
molti)
difficile trovare un buon programmaotre lisp che dia il suo tempo al
prossimo.
vi sono stati arklisp e pgrigio, ma il primo dava soluzioni lisp
blindate in vlisp anche se alcuni per la verità erano dei
rimaneggiamenti e piccole modifiche aportate, il secondo bravo ma una
faccia da copertone, soleva dire che sono 4 righe di programmazione,
ma oltre ai lavori di programmazione nelle proprie pagine entrambi non
erano disponibili.
in sintesi guardando le pagine di questo ng e andando in remoto, posso
vedere che più o meno eravate una comunella, che poi ha dato vita a 3
forum, cadlandia, cad3dit, e 3dsmile, ma solo in cad3dit vi è un
programmatore disponibile, in cadlandia, è mezza morta la sezione, in
3dsmile è lì solo per far sezione, ma è morta prima della sua nascita,
è li a far numero.
oltre a questo lisp, ho visto anche altro tuo lavoro, e visto che ci
sei perchè ogni tanto non pubblichi qualche routine, visto che ci sei,
il tuo nome è ancora li', anche se tu non ci sei stato, il tempo qui
lo hai trovato per dedicartici, e dunque ogni tanto qualche tue expluà
non sarebbe male.. no??

 ancora grazie ciao
Ho fatto una piccola aggiunta con il visual lisp, ora elimina le parentesi 
prima del testo. l'ho provato...mi sembra che così funzioni. Se hai qualche 
necessità che non mi impegna troppo te la risolvo volentieri.
Ciao e buon lavoro.
M.
(defun c:testi_z ( / ent datent quot_z cont ss txt)
(vl-load-com)
(setvar "cmdecho" 0 )
        (prompt "\nSelezionare testi a cui cambiare elevazione:")
        (setq ss (ssget (list (cons 0 "TEXT"))))
        (if ss (progn
                (setq lung (sslength ss))
                (setq cont 0)
                (repeat lung
                        (setq ent (ssname ss cont))
                        (setq datent (entget ent))
   (setq txt (cdr (assoc 1 datent)))
   (setq txt (vl-string-left-trim "(" txt))
   (setq txt (vl-string-right-trim ")" txt))
                        (setq quot_z (atof txt))


Ho messo più sù una variante che non considera le parentesi.
Buon Lavoro
M. 

Hai ragione, potrei scrivere qualcosa ogni tanto...magari postarlo qui.
A volte più che per la mancanza di tempo è che non ci penso...proverò a 
rimediare :)
Questo programmuccio chiede di selezionare dei testi che potete 
"acchiappare" tramite una finestra: salterà altre entità "(ssget (list (cons 
0 "TEXT")))" e testi che non rappresentano un valore numerico ("numberp"), 
poi ne calcola la somma e vi chiede di selezionare un testo ( o più) sul 
disegno che verrà modificato tipo "L="totale".
Questi programmi di modifica o ricerca sono estremamente simili tra loro: Si 
selezionano le entità ("ssget") si apre un ciclo con "repeat" per ogni 
entità selezionata e all'interno del ciclo si imposta cosa vogliamo che il 
programma svolga.
Spero vi possa essere utile.
Buon Lavoro
M.
(defun c:text_somma ( / ss lung cont somm datent txt txtnew txtold datent1)
(setvar "cmdecho" 0)
 (prompt "\nSelezionare testi di cui calcolare la somma o <>: ")
 (setq ss (ssget (list (cons 0 "TEXT"))))
 (if ss
 (progn
  (setq lung (sslength ss))
  (setq cont 0)
  (setq somm 0.0)
  (repeat lung
   (setq datent (entget (ssname ss cont )))
   (setq txt (assoc 1 datent))
   (if (numberp (atof (cdr txt)))
    (progn (setq somm (+ somm (atof (cdr txt))))
   ))
   (setq cont (1+ cont))
  )
  (setq txt (strcat "L=" (rtos somm)))
 ))
 (prompt "\nSelezionare testi a cui scrivere la somma:")
 (setq ss (ssget (list (cons 0 "TEXT"))))
 (if ss
 (progn
  (setq lung (sslength ss))
  (setq cont 0)
  (repeat lung
   (setq datent (entget (ssname ss cont )))
   (setq txtold (assoc 1 datent))
   (setq txtnew (cons (car txtold) txt))
   (setq datent1 (subst txtnew txtold datent))
   (entmod datent1)
   (setq cont (1+ cont))
  )
 ))
(princ)
)
;;;------------- end of files

Hello, Mario!
You wrote  on Thu, 4 Oct 2007 16:07:34 +0200:
 MS> Ho messo più sù una variante che non considera le parentesi.
 MS> Buon Lavoro
 MS> M.
avevo risolto con il comando _find ...ma proverò anche l'aggiunta
ringrazio davvero per la disponibilità
grazie e buon lavoro anche a te :-) 

Hello, Mario!
You wrote  on Thu, 4 Oct 2007 16:07:34 +0200:
 MS> Ho messo più sù una variante che non considera le parentesi.
 MS> Buon Lavoro
 MS> M.
...va che è una meraviglia....3 4 mila quote in un attimo sono al loro posto 
:-)
ciao 


comprendo, ottima soluzione!!

 necessità che non mi impegna troppo te la risolvo volentieri.
<clip>
Non vorrei essere pignolo ma se il segno + o - è staccato dal testo
(come nella richiesta) il risultato non è corretto:
(setq txt "(- 165)")
==> "(- 165)"
(setq txt (vl-string-left-trim "(" txt))
==> "- 165)"
(setq txt (vl-string-right-trim ")" txt))
==> "- 165"
(setq quot_z (atof txt))
==> 0.0
%%
Forse questa è una soluzione più universale:
(distof (vl-string-trim "()" "(- 165)"))
==> -165.0
(distof (vl-string-trim "()" "- 165"))
==> -165.0
(distof (vl-string-trim "()" "-165"))
==> -165.0
(distof (vl-string-trim "()" "165"))
==> 165.0


insuperabile !!


 insuperabile !!
----
preciso, direi. Anche se, da un punto di vista pratico, se sono quote ortometriche il problema è 
raro che si presenti perchè le negative, se riferite al geoide, sarebbero sotto il livello medio 
del mare...
-- 
Ciao

a me non interessa sopra o sotto il livello del mare, guardo la sostanza,
Marco_AA ha eliminato ogni possibilità di errore !!


 Marco_AA ha eliminato ogni possibilità di errore !!
-- 
Ciao

> insuperabile !!
Grazie.
Ma non è mai detto...

Se si vuole coprire un numero maggiore di casi, ad esempio
con un testo dopo il numero:
Comando: (ALE_EvalToNumber (ALE_String_ReadSafe "(- 12 Abc)"))
-12
Comando: (ALE_EvalToNumber (ALE_String_ReadSafe "(-12 Abc)"))
-12
Comando: (ALE_EvalToNumber (ALE_String_ReadSafe "(12 Abc)"))
12
Comando: (ALE_EvalToNumber (ALE_String_ReadSafe "- 12 Abc"))
nil  <<<
Comando: (ALE_EvalToNumber (ALE_String_ReadSafe "-12 Abc"))
-12
Comando: (ALE_EvalToNumber (ALE_String_ReadSafe "12 Abc"))
12
Comando: (ALE_EvalToNumber (ALE_String_ReadSafe "(- 12)"))
-12
Comando: (ALE_EvalToNumber (ALE_String_ReadSafe "(-12)"))
-12
Comando: (ALE_EvalToNumber (ALE_String_ReadSafe "(12)"))
12
Comando: (ALE_EvalToNumber (ALE_String_ReadSafe "- 12"))
-12
Comando: (ALE_EvalToNumber (ALE_String_ReadSafe "-12"))
-12
Comando: (ALE_EvalToNumber (ALE_String_ReadSafe "12"))
12
; Marc'Antonio Alessi - 09/10/2007
;
(defun ALE_EvalToNumber (In_Itm / CarVal)
  (cond
    ( (numberp In_Itm)
      In_Itm
    )
    ( (not (listp In_Itm))
      nil
    )
    ( (numberp (setq CarVal (car In_Itm)))
      CarVal
    )
    ( (and (= 'SYM (type CarVal)) (numberp (cadr In_Itm)))
      (eval (list (car In_Itm) (cadr In_Itm)))
    )
  )
)
; Marc'Antonio Alessi, Italy - 
http://xoomer.alice.it/alessi
;
; Function: ALE_String_ReadSafe
;
; Version 1.11 - 27/04/2005
; Version 1.12 - 16/03/2007 - old name ALE_ReadString
; Version 1.13 - 26/04/2007 - old name ALE_ReadString_Safe
;
; Description:
;   verify if the string can be converted in a real or integer
;   and return a real or integer
;   otherwise verify if the string is valid for read function
;   and return the read of string, otherwise return nil
;
; Arguments:
;   StrVal = string [STR]
;
; Examples:
;   (ALE_String_ReadSafe "\"Abc\"")       => "Abc"
;   (ALE_String_ReadSafe ".99")           => 0.99
;   (ALE_String_ReadSafe "1.0")           => 1.0
;   (ALE_String_ReadSafe "1")             => 1
;   (ALE_String_ReadSafe "Xyz")           => XYZ
;   (ALE_String_ReadSafe ",")             => ,
;   (ALE_String_ReadSafe "(1 2 \"Abc\")") => (1 2 "Abc")
;   (ALE_String_ReadSafe "(1 . 2)")       => (1 . 2)
;   (ALE_String_ReadSafe "(1/2\"Abc)")    => nil
;   (ALE_String_ReadSafe ".")             => nil
;   (ALE_String_ReadSafe "(")             => nil
;   (ALE_String_ReadSafe ")")             => nil
;   (ALE_String_ReadSafe nil)             => nil
;   (ALE_String_ReadSafe 0)               => nil
;
;   (ALE_String_ReadSafe "\\\\server\\Test (test).dwg")
;                     =>  \\\\SERVER\\TEST
;
;   (ALE_String_ReadSafe "\"\\\\server\\Test (test).dwg\"")
;                     =>  "\\serverTest (test).dwg"
;
;   (ALE_String_ReadSafe "//server/Test (test).dwg")
;                     =>  //SERVER/TEST
;
;   (ALE_String_ReadSafe "\"//server/Test (test).dwg\"")
;                     =>  "//server/Test (test).dwg"
;
; Return Values:
;   [STRING,REAL,INT,SYM,LIST] or nil on error
;
(defun ALE_String_ReadSafe (StrVal / TmpVal)
  (if
    (not
      (vl-catch-all-error-p 
        (setq TmpVal (vl-catch-all-apply 'distof (list StrVal)))
      )
    )
    (cond
      ( TmpVal
        (if (= 'REAL (type (read (strcat "0" StrVal))))
          (atof StrVal)
          (atoi StrVal)
        )
      )  
      ( (not 
          (vl-catch-all-error-p 
            (setq TmpVal (vl-catch-all-apply 'read (list StrVal)))
          )
        )
        TmpVal
      )
    )
  )
)

 con un testo dopo il numero:
salvato nelle utilità "speciali"
grazie Marco ;)


(come nella richiesta) il risultato non č corretto:
Si, cosě funziona meglio. Non l'ho preso in considerazione perchč le mie 
quote non hanno mai il segno staccato che trovo brutto graficamente.
Ciao ciao
M. 

 un vecchio thread di diversi anni...speriamo che si riesca a fare...sarebbe superbo!
-----
é superbo.
e lo trovi qui:
http://groups.google.it/group/it.discussioni.geometri/msg/7d5503a34b721081
-- 
Ciao