TuttoCAD Forum

TuttoCAD Forum
[ Home | Registrati | Discussioni Attive | Discussioni Recenti | Segnalibro | Msg privati | Sondaggi Attivi | Utenti | Album Fotografico | Download | | Cerca | FAQ ]
Nome Utente:
Password:
Salva Password
Password Dimenticata?

 Tutti i Forum
 1 - TuttoCAD Software
 AutoLISP
 sostituzione blocco
 Nuova Discussione  Rispondi
 Versione Stampabile Bookmark this Topic Aggiungi Segnalibro
I seguenti utenti stanno leggendo questo Forum Qui c'è:
Pagina Successiva
Autore Discussione Precedente Discussione Discussione Successiva
Pagina: di 2

Roberto07
Utente Master



Regione: Lazio
Prov.: Roma
Città: Sabina Italia


1042 Messaggi

Inserito il - 30 marzo 2011 : 22:22:53  Mostra Profilo Invia a Roberto07 un Messaggio Privato  Rispondi Quotando
Ciao a tutti
Tempo fa vi avevo parlato di un "filetto" che mi permette di cambiare un blocco con un altro mantenendo la scala e la rotazione.

Me ne servo tantissimo ma, siccome piano piano ho allungato sempre di più il nome dei files/blocchi, comincio a soffrire un po' per ricordarmi del nome.

Trovato il lisp "Rename Blocco" di GP molto comodo, vi chiedo se è possibile inserire la comodità di estrarre il nome del blocco da sostituire anche qui dando la possibilità di modificarlo per cambiare il blocco.

Questo è il "mio" lisp attuale:

(defun C:BLOCKOP()
(setq vecchioecho (getvar "CMDECHO"))
(setvar "CMDECHO" 0)
(prompt "Seleziona i blocchi da cambiare:")
(setq gruppo (ssget)
numero (sslength gruppo)
contatore (1- numero))
(if (= vecchionome nil)
(progn
(setq nome (getstring "\nNuovo nome per i blocchi:")
vecchionome nome)
)
(progn
(prompt "\nNuovo nome per i blocchi <")
(prompt vecchionome)
(setq nome (getstring ">:")
vecchionome nome)
)
)
(repeat numero
(setq nome_blocco (ssname gruppo contatore)
blocco (entget nome_blocco)
punto (cdr (assoc 10 blocco))
scala_x (cdr (assoc 41 blocco))
scala_y (cdr (assoc 42 blocco))
scala_z (cdr (assoc 43 blocco))
ang_rot_rad (cdr (assoc 50 blocco))
ang_rot (* (/ ang_rot_rad pi) 180))
(command "_erase" nome_blocco "")
(command "_insert" nome punto "xyz" scala_x scala_y scala_z ang_rot)
(setq contatore (1- contatore))
)
(setvar "CMDECHO" vecchioecho)
(terpri)
)

e questa è una immagine eloquente.....

Immagine inserita:

53,31 KB

In pratica io faccio "prospetto a- " che è quello esistente e "prospetto a " che è quello di progetto (nel nome manca il meno)

Quando il nome del file è lungo sarebbe troppo comodo se il comando estraesse il nome del file con il meno (per esempio) e nella sostituzione ti permetta di toglierlo.
Grazzziiiieeeeee

Modificato da - Roberto07 in Data 30 marzo 2011 22:24:23

Roberto07
Utente Master



Regione: Lazio
Prov.: Roma
Città: Sabina Italia


1042 Messaggi

Inserito il - 31 marzo 2011 : 15:57:32  Mostra Profilo Invia a Roberto07 un Messaggio Privato  Rispondi Quotando
Azz...!! Pensavo di aver chiesto una cosetta da niente per i nostri maestri...

Nessuno mi aiuta per integrare il mio sostiuisci blocco con una pre-visualizzazione del nome del blocco cliccato da sostituire?

Mi sarebbe proprio utile.... Ma solo a me? A nessun altro può servire di sostituire una pianta ruotata e con una data scala, con un'altra pianta (diverso blocco)?

Torna all'inizio della Pagina

Roberto07
Utente Master



Regione: Lazio
Prov.: Roma
Città: Sabina Italia


1042 Messaggi

Inserito il - 02 aprile 2011 : 06:38:42  Mostra Profilo Invia a Roberto07 un Messaggio Privato  Rispondi Quotando
Ho trovato questo BlockReplace.vlx che funziona abbastanza bene ma non ti fa cercare il blocco fuori dal disegno.

La funzione degli express tools invece mi fa un po' di casino.....

Per ora mi accontento.
Torna all'inizio della Pagina

Terminator
Utente Master



725 Messaggi

Inserito il - 02 aprile 2011 : 06:59:52  Mostra Profilo Invia a Terminator un Messaggio Privato  Rispondi Quotando
Per farlo cercare fuori dal disegno potrebbe bastare inserirlo nei percorsi di AutoCAD, o sbaglio?

Mi sono perso qualcosa?
Torna all'inizio della Pagina

Roberto07
Utente Master



Regione: Lazio
Prov.: Roma
Città: Sabina Italia


1042 Messaggi

Inserito il - 02 aprile 2011 : 08:50:05  Mostra Profilo Invia a Roberto07 un Messaggio Privato  Rispondi Quotando

Non mi sembra che sia un problema di percorso...

Immagine inserita:

39,15 KB

Poi, stranamente, ti costringe a cliccare 2 volte il blocco da sostituire.

Però per i nomi complessi che si fa fatica a ricordare è comunque un buon aiuto. Il problema è che prima devi inserire nel disegno tutti quelli che possono servire.
Torna all'inizio della Pagina

Terminator
Utente Master



725 Messaggi

Inserito il - 02 aprile 2011 : 08:54:38  Mostra Profilo Invia a Terminator un Messaggio Privato  Rispondi Quotando
Mi sembra così strano che un programma, a mio giudizio, non da poco, non abbia la possibilità di comprendere anche i blocchi che si trovano nei percorsi specificati da AutoCAD. Se fosse stato di estensione lsp si poteva tentare di cambiarlo, ma così bisognerebbe fare tutto ex-novo, mantenendo magari la stessa finestra di dialogo.
Torna all'inizio della Pagina

Roberto07
Utente Master



Regione: Lazio
Prov.: Roma
Città: Sabina Italia


1042 Messaggi

Inserito il - 02 aprile 2011 : 09:09:52  Mostra Profilo Invia a Roberto07 un Messaggio Privato  Rispondi Quotando
Che lavoro e corrispondente spesa potrebbe comportare? Io non ho idea, di programmazione, ma solo di quella , non ci capisco niente.

Torna all'inizio della Pagina

Terminator
Utente Master



725 Messaggi

Inserito il - 02 aprile 2011 : 10:09:38  Mostra Profilo Invia a Terminator un Messaggio Privato  Rispondi Quotando
Un tentativo potrebbe essere questo:

(defun C:RBLOCCHI ()
  (vl-load-com)
  (setvar "CMDECHO" 0)
  (setq dcl_id (load_dialog "rblocchi.dcl"))

  (if (not (new_dialog "rblocchi" dcl_id))
    (exit)
  )

  (setq	direct
	 "c:\\Documents and Settings\\Utente\\Documenti\\Lavori AutoCAD\\Blocchi\\"
  )
  (setq	listablocchi
	 (vl-directory-files
	   direct
	   "*.dwg"
	   1
	 )
  )
  (start_list "rblocchi")
  (mapcar 'add_list listablocchi)
  (end_list)

  (if nblocchi
    (set_tile "rblocchi" nblocchi)
    (progn
      (set_tile "rblocchi" "0")
      (setq nblocchi "0")
    )
  )

  (setq nblocchi2 nblocchi)

  (mode_tile "rblocchi" 2)

  (action_tile
    "rblocchi"
    "(setq nblocchi(get_tile \"rblocchi\"))"
  )

  (action_tile "accept" "(done_dialog 1)")
  (if (= (start_dialog) 1)
    (progn
      (setq nuovoblocco (nth (atoi nblocchi) listablocchi))
      (command "_INSERT" (strcat direct nuovoblocco) pause 1 1 0)
    )
    (progn
      (set_tile "rblocchi" nblocchi2)
      (setq nblocchi nblocchi2)
    )
  )
  (unload_dialog dcl_id)
  (princ)
)

(princ
  "\nBLOCCHI ...E DINTORNI (provvisorio) - by Terminator"
)
(princ "\nDigitare rblocchi per lanciare il lisp")
(princ)


E relativa finestra di dialogo:

rblocchi : dialog {
    label = "RBLOCCHI";
      : boxed_column {
      label = "Scegli il tuo blocco";
        : list_box {
        key = "rblocchi";
        width = 40;
        value = "0"; 
	//multiple_select = true;
	allow_accept = true;
        }
      }
ok_cancel;    
}


Intendiamoci, questo programma è solo di "controllo" per vedere se ho capito bene il tutto e quello di cui hai bisogno.

NB: ovviamente la riga in rosso la cambi come desideri ed è un percorso che non necessariamente è compreso nei percorsi di AutoCAD

Modificato da - Terminator in data 02 aprile 2011 10:14:19
Torna all'inizio della Pagina

Roberto07
Utente Master



Regione: Lazio
Prov.: Roma
Città: Sabina Italia


1042 Messaggi

Inserito il - 02 aprile 2011 : 11:21:19  Mostra Profilo Invia a Roberto07 un Messaggio Privato  Rispondi Quotando
Comando: _appload replace-blocchi-terminator.lsp caricato.


Comando:
BLOCCHI ...E DINTORNI (provvisorio) - by Terminator
Digitare rblocchi per lanciare il lisp
Comando:
Comando: *Annullato*

Comando: rblocchi
; errore: esci / continua

io ho fatto questo cambiamento:

(setq direct
"c:\\A-Lavori\\blocchi\\"
)


Torna all'inizio della Pagina

Terminator
Utente Master



725 Messaggi

Inserito il - 02 aprile 2011 : 11:30:49  Mostra Profilo Invia a Terminator un Messaggio Privato  Rispondi Quotando
Ddevi inserire il file dcl nello stesso percorso del file lsp.



Scarica allegato:

RBlocchi.zip
726 Bytes

Modificato da - Terminator in data 02 aprile 2011 11:36:48
Torna all'inizio della Pagina

Roberto07
Utente Master



Regione: Lazio
Prov.: Roma
Città: Sabina Italia


1042 Messaggi

Inserito il - 02 aprile 2011 : 12:03:01  Mostra Profilo Invia a Roberto07 un Messaggio Privato  Rispondi Quotando
Fatto. Ma mi fa solo inserire un blocco dalla dir \blocchi....

Torna all'inizio della Pagina

Terminator
Utente Master



725 Messaggi

Inserito il - 02 aprile 2011 : 12:08:49  Mostra Profilo Invia a Terminator un Messaggio Privato  Rispondi Quotando
Però lo scopo del nome del blocco non ricordato e l'inserimento da un percorso non memorizzato da AutoCAD funziona!
Torna all'inizio della Pagina

Roberto07
Utente Master



Regione: Lazio
Prov.: Roma
Città: Sabina Italia


1042 Messaggi

Inserito il - 02 aprile 2011 : 12:11:28  Mostra Profilo Invia a Roberto07 un Messaggio Privato  Rispondi Quotando
Allora. Il box di dialogo mi fa apparire tutti i dwg di quella cartella. Scelto uno me lo inserisce nel disegno. Stop.

Sto facendo qualche casino?
Torna all'inizio della Pagina

Terminator
Utente Master



725 Messaggi

Inserito il - 02 aprile 2011 : 18:48:24  Mostra Profilo Invia a Terminator un Messaggio Privato  Rispondi Quotando
Ecco qua:

Scarica allegato:

RBlocchi.zip
1,5 KB

Modificato da - Terminator in data 02 aprile 2011 18:49:59
Torna all'inizio della Pagina

Roberto07
Utente Master



Regione: Lazio
Prov.: Roma
Città: Sabina Italia


1042 Messaggi

Inserito il - 02 aprile 2011 : 21:53:47  Mostra Profilo Invia a Roberto07 un Messaggio Privato  Rispondi Quotando
OTTIMO TERM!!

Ho modificato la cartella (mi appariva il box senza files) e ora funziona benissimo.

Non ti dice il nome del blocco che devi cambiare, ma il fatto che ti apre una finestra esterna e ti fa scegliere quello che va a sostituire il cliccato è cosa buona e giusta...

Me lo piazzo subito su un bottoncino....

Sono in forte debito con te....
Torna all'inizio della Pagina

Terminator
Utente Master



725 Messaggi

Inserito il - 02 aprile 2011 : 22:11:48  Mostra Profilo Invia a Terminator un Messaggio Privato  Rispondi Quotando
Non ti dice il nome del blocco che devi cambiare perché semplicemente io posso selezionare blocchi di nome diverso e cambiarli contemporaneamente. A pensarci bene forse non servirebbe selezionare più di un blocco con nome diverso e quindi non la selezione con (ssget) ma con (entsel).
Torna all'inizio della Pagina

Roberto07
Utente Master



Regione: Lazio
Prov.: Roma
Città: Sabina Italia


1042 Messaggi

Inserito il - 02 aprile 2011 : 22:33:49  Mostra Profilo Invia a Roberto07 un Messaggio Privato  Rispondi Quotando
E' vero. Se ne cambi uno solo, come faccio al 90%, può essere utile vedere il nome del blocco che hai cliccato, contrariamente non serve molto, a meno che non appaia un elenco di quelli che hai selezionato, ma sinceramente non lo vedo così indispensabile...

Messo il bottoncino riporto un'immagine della situation:


Immagine inserita:

30,25 KB

Ggggrrrrraaaazzzziiiieeeeee
Torna all'inizio della Pagina

Terminator
Utente Master



725 Messaggi

Inserito il - 02 aprile 2011 : 22:40:32  Mostra Profilo Invia a Terminator un Messaggio Privato  Rispondi Quotando
Selezione singola con la scritta in alto del vecchio blocco.
Devi sovrascrivere la dcl sopra la precedente.


Scarica allegato:

RBLOCCHI2.zip
1,5 KB
Torna all'inizio della Pagina

Roberto07
Utente Master



Regione: Lazio
Prov.: Roma
Città: Sabina Italia


1042 Messaggi

Inserito il - 02 aprile 2011 : 23:09:12  Mostra Profilo Invia a Roberto07 un Messaggio Privato  Rispondi Quotando
OTTIMISSIMO!!! Questo è a prova di vecchietti. Però è buono anche l'altro se si devono cambiare più blocchi. Quindi mi tengo anche il primo....

Piccolo quesito: visto che le mani sul box le sai mettere benissimo...volendo aggiungere uno "sfoglia" per andare anche su altre cartelle è molto complicato?

Con uno sfoglia il programma sarebbe da vendere e io comprerei le tue azioni...

Grazie! Grazie veramente...

Torna all'inizio della Pagina

Terminator
Utente Master



725 Messaggi

Inserito il - 02 aprile 2011 : 23:17:46  Mostra Profilo Invia a Terminator un Messaggio Privato  Rispondi Quotando
Volendo si può fare un unico comando avente un riquadro di dialogo con 2 opzioni.

Per quanto riguarda lo sfoglia, si può fare, ma ovviamente la cosa si complica. Di solito, per la manipolazione dei percorsi, io uso le DOSLib aggiuntive

http://www.en.na.mcneel.com/doslib.htm

Chiaramente, se io elaboro il lisp con queste utility, queste le devi avere installate necessariamente anche tu, altrimenti ti arriva un bel messaggio di errore.

Modificato da - Terminator in data 03 aprile 2011 05:40:29
Torna all'inizio della Pagina

Roberto07
Utente Master



Regione: Lazio
Prov.: Roma
Città: Sabina Italia


1042 Messaggi

Inserito il - 03 aprile 2011 : 07:03:26  Mostra Profilo Invia a Roberto07 un Messaggio Privato  Rispondi Quotando
Messaggio inserito da Terminator

Volendo si può fare un unico comando avente un riquadro di dialogo con 2 opzioni.
... se io elaboro il lisp con queste utility, queste le devi avere installate necessariamente anche tu...


Ho scaricato doslib84.exe - come avrò il tuo OK le installerò...

Per il riquadro con le 2 opzioni dovrebbe andare più che bene. Non credo si perda l'immediatezza, in caso contrario si possono mantenere i due comandi separati (scegliendo "a monte"), ma certo avere la possibilità di cambiare cartella, compreso il data-base dei blocchi presenti nel disegno di lavoro, sarebbe ultra comodo.

Io sono ignorante come una capra, quindi solo tu puoi fare "il miracolo"... Comunque già è tantissimo quello che hai fatto!!

Oggi poi dovrò andare ad una classica fiera di paese (la famiglia chiede....), che fanno la prima domenica del mese in un posto storico, se così si può dire, il "punto di ristoro" che fece Mussolini per i romani che andavano a sciare sul Terminillo, la montagna di Roma, come la definì...

Torna all'inizio della Pagina
Pagina: di 2 Discussione Precedente Discussione Discussione Successiva  
Pagina Successiva
 Nuova Discussione  Rispondi
 Versione Stampabile Bookmark this Topic Aggiungi Segnalibro
Vai a:
TuttoCAD Forum © 2001-2010 CADLandia Torna all'inizio della Pagina
Pagina generata in 0,68 secondi.