Newsgroup: it.comp.software.cad
Titolo: DATI ESTESI

>>Inserito da 
http://www.forumsforyou.com/p/it.comp.software.cad/
Buongiono a tutti, chiedo un piccolo aiuto a voi esperti  sui dati estesi.
Uso autocad 2006 con un pacchetto applicatico, per creare schemi elettrici.
Questo programma, una vlta inserito nello schema un blocco simbolo, aggiunge dei dati estesi che servono poi per le elaborazioni dello schema.
Questa è la xdlist del simolo
Applicazioni      Codice   valore
XXXX               1000      INS_DAT
                       1002     {
                       1070     0
                       1040     0
                       1000     IEC  (libreria di riferimento)
                       1002     }
Questo applicativo ha la possibilità di sostituire il simbolo da una libreria ad un'altra senza però modificare i dati estesi.
Chiedo se già in autocad esiste la possibilità di cambiare la stringa 1000 IEC con 1000 BLK oppuere se è possibile avere una piccola lsp.
Rigraziandovi anticipatamente cordiali saluti
----------------------------------------
Inviato dal servizio gratuito 
http://www.forumsforyou.com
RSS e notizie associate.Provalo anche tu
Segnala gli abusi ad 
ab...@forumsforyou.com
----------------------------------------

 con 1000 BLK
No, non esiste. Devi fare una piccola funzione che modifichi i dati estesi,
ad esempio, usando "entmod".
Ora non ho tempo.
Ciao.

>>Inserito da 
http://www.forumsforyou.com/p/it.comp.software.cad/
Marco_AA Scritto:

ok, ti ringrazio.
Usare il comando "entmod" assieme ai comadi "entget" "cons" "subst" e qualche altro non è un problema, il problema è come arrivare ad estrapolare dal blocco la lista "1000 BLK".
Se mi dai l'input poi la lisp posso crearla da solo.
Ciao e grazie..


 ha scritto nel messaggio
news:e4rljb$70p$1...@springfield.roa.cc...


 Ciao e grazie..
Come ti ha risposto Claudio, l'importante è usare entget:
(entget <ename> '("NomeApplicazione")))
per avere anche i dati estesi dell'applicazione.
-- 
----------------------------------------------------------
Marc'Antonio Alessi - 
http://xoomer.virgilio.it/alessi
----------------------------------------------------------

>>Inserito da 
http://www.forumsforyou.com/p/it.comp.software.cad/
Grazie, ora me la studio un pň.


>>Inserito da 
http://www.forumsforyou.com/p/it.comp.software.cad/
Dopo aver scoperto la chiave di accesso " (setq datiEstesi(entget nome-poli '("FOGNATURA")))".
Questa è la mia lisp, anche se il metodo di programmazione è molto elementare, ma si adatta benissimo al mio scopo.
(defun c:AA (/ count blk nl ent de1 de2 a1 a2 a3 newlist newlist1 newlist2 newlisttot)
  (SETQ X t)
  (setq COUNT 0) 
  (setq BLK (ssget))
  (setq nl (strcase (getstring "\nNuova libreria....:")))
  (while x
    (setq ent (ssname BLK COUNT))
    (if (/= ent nil)
      (progn  
        (setq de1 (entget ent'("SPAC")))
        (setq de2 (assoc -3 de1))
        (SETQ A1 (CDR DE2))
        (SETQ A2 (CAR A1))
        (setq a3 (nth 6 a2))
        (setq newlist (cons 1000 nl))
        (setq newlist1 (subst newlist a3 a2))
        (setq newlist2 (list -3 newlist1))
        (setq newlisttot (subst newlist2 de2 de1))
        (entmod newlisttot)
        (setq count (1+ count))
      )
      (progn
        (setq x nil)
      )
    )
  )
)
Ancora un grazie a Claudio e Marco
 
SePrAm.com Scritto:


 ;;;-------------------------------------

hai un lisp per eliminare tutti i dati estesi ?
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 ha scritto nel messaggio
news:e5h4jv$i50$1...@news.newsland.it...


> hai un lisp per eliminare tutti i dati estesi ?
; Marc'Antonio Alessi - 
http://xoomer.virgilio.it/alessi
; Function: ALE_DelXdataSs
;
; Version 1.01 - 08/04/2003
;
; Description:
;   delete XData of specified APPID(s)
;
; Arguments:
;   BitFlg = 1 prompts ON
;   BitFlg = 2 erase Xdata on all objects
;
; Use:
;   (ALE_DelXdataSs '("MyApp1" "MyApp2") 1)
;   delete by AppID's and by selection
;   or
;   (ALE_DelXdataSs '("*") 3)
;   delete all AppID's from all objects
;
; Comments:
;   The filter in ssget is not useful, because in case of a block with
;   Attribute Xdata only, it doesn't work.
;   The argument of the function should be a list. This allows you to
;   delete Xdata's with different AppID's.
;
(defun ALE_DelXdataSs (ApsLst BitFlg / SsXdat ApsStr EntNam Countr)
  (setq ApsStr "")
  (foreach AppNam ApsLst
    (setq ApsStr (strcat ApsStr "," AppNam))
  )
  (if (= 2 (logand 2 BitFlg))
    (setq SsXdat (ssget "_X" (list (list -3 (list (substr ApsStr 2))))))
    (setq SsXdat (ssget      (list (list -3 (list (substr ApsStr 2))))))
  )
  (cond
    ( SsXdat
      (repeat (setq Countr (sslength SsXdat))
        (setq Countr (1- Countr)  EntNam (ssname SsXdat Countr))
        (ALE_DelXdataEnt EntNam ApsLst BitFlg)
        (and
          (= "INSERT" (DXF 0 (entget EntNam)))
          (while (= "ATTRIB" (DXF 0 (entget (setq EntNam (entnext EntNam)))))
            (ALE_DelXdataEnt EntNam ApsLst BitFlg)
          )
        )
      );repeat
      (and (= 1 (logand 1 BitFlg)) (princ "\nEliminazione Xdata eseguita.  "))
    )
    ( (= 1 (logand 1 BitFlg)) (princ "\nNon è stato trovato nessun oggetto con 
Xdata.  ") )
  )
)
;
; BitFlg is only for my special use
; Use:
; (ALE_DelXdataEnt ename '("MyApp1" "MyApp2") 0)
;
; In AutoCAD 14 Xdata on dimension entities will be not erased if they are 
substituted
; with an empty list when there are no Xdata of another application, see AND 
condition
;
(defun ALE_DelXdataEnt (EntNam ApsLst BitFlg / EntDat TmpLst)
  (setq EntDat (entget EntNam ApsLst))
; (and
;   (= 14 (atoi (getvar "ACADVER")))
;   (eq "DIMENSION" (DXF 0 EntDat))
;   (not (DXF -3 (entget EntNam '("ACAD"))))
;   (entmod (list (cons -1 EntNam) '(-3 ("ACAD" (1000 . "DSTYLE")))))
; )
  (foreach AppDat (DXF -3 EntDat)
    (setq TmpLst (cons (list (car AppDat)) TmpLst))
  )
  (entmod (list (cons -1 EntNam) (cons -3 TmpLst)))
)
; For single AppName (Doug B.) - Use: (ALE_DelXdata1AppEnt ename "MyApp1")
(defun ALE_DelXdata1AppEnt (EntNam AppNam)
  (entmod (list (cons -1 EntNam) (list -3 (list AppNam))))
)

 Ciao Claudio
grazie per la risposta Claudio,
non potresti per cortesia postare un esempio di ricostruzione


Marco_AA ha scritto:


grazie Marco per il vlisp,
purtropp non riesco a farlo funzionare, mi da degli errori,
ad esempio
 errore: gruppo DXF errato: (-1)
ma sono soddisfatto ugualmente


 ha scritto nel messaggio
news:e5hbjc$j7c$1...@news.newsland.it...


 Ciao Claudio
siete due grandi !!!!!!!!!!!!!
di nuovo grazie a entrambi 


 ma sono soddisfatto ugualmente
Chiedo scusa ho dimenticato la solita funzione:
(defun Dxf (DxfCod EntDat)
  (cdr (assoc DxfCod EntDat))
)

Marco_AA ha scritto:



grazie Marco
sei il mago del Vlisp 


ciao Marco_AA,
perchè non li inserisci tutti nel tuo sito questi interessanti lisp ?
aumenteresti notevolmente la pubblicità al tuo link ...



Grazie arri,
1) non ho molta dimestichezza con queste cose, infatti il mio sito
   l'ho fatto molto tempo fa e non l'ho più aggiornato
2) quello str... di Tronchetti Provera non vuole portare l'ASDL
   nel mio paese (che non è per niente sperduto ed è circondato
   da linee ASDL) perciò rimando sempre operazioni di questo tipo
Ciao.
Marco 

Leggermente migliorato:
; Marc'Antonio Alessi - 
http://xoomer.virgilio.it/alessi
; Function: ALE_DelXdataSs
;
; Version 1.01 - 08/04/2003
; Version 1.02 - 31/05/2006

          EntDat (entget EntNam ApsLst)
        )
        (ALE_DelXdataEnt EntNam EntDat)
        (and
          (= "INSERT" (DXF 0 EntDat))
          (= 1 (DXF 66 EntDat))
          (while
            (=
              "ATTRIB"
              (DXF 0
                (setq EntDat (entget (setq EntNam (entnext EntNam)) ApsLst))
              )
            )
            (ALE_DelXdataEnt EntNam EntDat)
          )
        )
      );repeat
      (and (= 1 (logand 1 BitFlg)) (princ "\nEliminazione Xdata eseguita.  "))
    )
    ( (= 1 (logand 1 BitFlg)) (princ "\nNon è stato trovato nessun oggetto con 
Xdata.  ") )
  )
)
;
; Use:
; (ALE_DelXdataEnt ename '("MyApp1" "MyApp2"))
;
(defun ALE_DelXdataEnt (EntNam EntDat / EntDat TmpLst)
  (foreach ForElm (DXF -3 EntDat)
    (setq TmpLst (cons (list (car ForElm)) TmpLst))
  )
  (entmod (list (cons -1 EntNam) (cons -3 TmpLst)))
)
; DXF    Funzione di ricerca codici dxf.
;


    l'ho fatto molto tempo fa e non l'ho più aggiornato
ma intendevo una cosa semplice, inserire solo il file con una micro
spiegazione
ad esempio in questo caso : cancellare dati estesi
pensaci
ciao


 Marco_AA ha scritto:


ciao Marco
non si potrebbe aggiungere la pulizia anche nelle entità nidificate nei
blocchi ?
anche se non è nello stesso vlisp va bene ugualmente
grazie


 blocchi ?
Si può fare, ma dovrei pubblicare altre funzioni complesse che, al
momento, non ho l'ispirazione rendere note.
Ciao.
Marco 

 Marco
ci tengo ad avere i dwg puliti,
ti ho chiesto troppo,
non si può avere tutto,
grazie ugualmente Marco


> grazie ugualmente Marco
Prego.