• This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Leggi altro.

Crea blocco usando come nome il layer

reggio

Utente Senior
Professione: ...
Software: autocad11+swx16 sp4 w7 x64+Ready2W2012
Regione: Emilia - Modena
#1
Ciao, normalmente io uso questa lisp ( http://www.4shared.com/file/55379291/a7df1d33/bl_online.html?dirPwdVerified=16be2a49 ) che mi crea un blocco sostituendo le singole entità
in appunto un blocco e riposizionandolo sopra il profilo esistente, funziona tutto bene solo che ogni volta debbo

- digitare il nome del blocco durante la sua creazione
- selezionare il blocco creato e "portarlo" sul livello appartenente

Chiedevo, siccome il nome blocco potrebbe essere uguale al livello
e siccome le entità che hanno composto il blocco erano già nel livello corretto,
sarebbe possibile modificare la lisp (che non è editabile) o farne una nuova in modo che anche quelle 2 operazioni avvengano in automatico? (sempre "dettandomi" passo-passo quello che debbo fare..)
 

rpor66

Utente Standard
Professione: Programmatore
Software: AutoCad, GstarCAD, CadWorx, Excel, Lisp, VBA
Regione: Sicilia
#2
Al solito, carica il file, guarda il contenuto, non è protetto, ci sono dei commenti che spiegano un pò il funzionamento.

Ciao
 

Allegati

reggio

Utente Senior
Professione: ...
Software: autocad11+swx16 sp4 w7 x64+Ready2W2012
Regione: Emilia - Modena
#3
:D Grazie, lo provo subito :D
 
Ultima modifica:

reggio

Utente Senior
Professione: ...
Software: autocad11+swx16 sp4 w7 x64+Ready2W2012
Regione: Emilia - Modena
#4
Al solito, carica il file, guarda il contenuto, non è protetto, ci sono dei commenti che spiegano un pò il funzionamento.

Ciao
Ciao :D quasi quasi... come faccio a dirgli che non tutti gli elementi del layer debbono essere trasformati in blocco, ma SOLO quelli che ti indicherò io???

(setq Lista (ssget "X" (list (cons 8 Layer)))) ; cre la selezione di tutte le entita del piano contenuto nella variabile Layer

Porta pazienza :p
 

rpor66

Utente Standard
Professione: Programmatore
Software: AutoCad, GstarCAD, CadWorx, Excel, Lisp, VBA
Regione: Sicilia
#5
con (setq Lista (ssget (list (cons 8 Layer)))) selezioni le entita e il comando filtra quelle appartenenti al piano <Layer>

La funzione NewNameLayer, verifica l'esistenza del blocco di nome <Layer>, se esiste aggiunge 1 e ritorna il valore; considerando il nome del piano MURI, diventa MURI1; se esiste MURI1 diventa MURI2 etc., fino a 32767 nomi di blocchi differenti, questo perchè ho usato una variabile intera :D

Buon divertimento
 

Allegati

reggio

Utente Senior
Professione: ...
Software: autocad11+swx16 sp4 w7 x64+Ready2W2012
Regione: Emilia - Modena
#6
Ciao :D è QUASI perfetto!!!

...scusa la pignoleria, ma ho notato che alcuni blocchi li riposiziona correttamente, altri invece li sposta....
Riesci a capire perchè??? :confused:

Nell'altro che ho mi chiede il punto di origine, il massimo invece sarebbe che si prendesse una coordinata dell'oggetto che tocchi x indicarlo e tenesse quella sia per origine che per riposizionarlo... che dici?

...uhmmm e poi e poi... si potrebbe fare in modo che, invece di chiamare il blocco come il livello aggiungendo 1,2,3,... fosse direttamente il livello a diventare da "traverso" a "traverso1" "traverso2" ... e QUINDI creare il blocco? perchè in questo modo mi basta toccare il blocco x sapere (guardando il layer) qual'è il suo nome e in questo modo lo potrei esplodere, modificare e ribloccare modificando tutti i suoi "fratelli" in un colpo solo ^__^ ...però in questo modo mi creerebbe semplicemente un ulteriore blocco e NON sovrascriverebbe quello corretto vero? :( uhmmm.... sono fregato quindi mi rimangio questa parte, a meno che tu non abbia già nel cappello un'idea più geniale :p

Grazie infinite :D
 
Ultima modifica:

rpor66

Utente Standard
Professione: Programmatore
Software: AutoCad, GstarCAD, CadWorx, Excel, Lisp, VBA
Regione: Sicilia
#7
...scusa la pignoleria, ma ho notato che alcuni blocchi li riposiziona correttamente, altri invece li sposta....

credo sia dovuto agli osnap, ho aggiunto del codice per ovviare al problema.

la coordinata del punto di inserimento è, ora, estratta dalla prima entita selezionata.

riguardo alla parte in rosso, sarà il caldo ma fatico a capire cosa ti serve!
se devi modificare un blocco, usa BEDIT (Block Editor), se esplodi un blocco, ricordati di fare il purge
(command "_purge" "_b" "" "_N") prima di usare BL.

Ciao
 

Allegati

reggio

Utente Senior
Professione: ...
Software: autocad11+swx16 sp4 w7 x64+Ready2W2012
Regione: Emilia - Modena
#8
...scusa la pignoleria, ma ho notato che alcuni blocchi li riposiziona correttamente, altri invece li sposta....

credo sia dovuto agli osnap, ho aggiunto del codice per ovviare al problema.

la coordinata del punto di inserimento è, ora, estratta dalla prima entita selezionata.
F I C H I S S I M O ! ! !

riguardo alla parte in rosso, sarà il caldo ma fatico a capire cosa ti serve!
Ciao, non è questione di caldo è che dopo oltre 12anni di autocad uso ancora la ACAD14 al 20% delle possibilità... e scoprendo questo forum scopro che invece lo conosco al 10% :(
Detto questo però, provo a spiegarmi meglio: questa funzione dovrebbe servire a creare rapidamente un blocco di una vista (ne considero creabili al max 3: "vista,pianta,sez o laterale"), nominando il blocco con il nome del livello di appartenenza (e questo ora lo fà),
fatto questo il bello è prendere questi blocchi e usarli in varie parti del disegno (quì mi sorge spontanea un'altra domanda da profano che però farò alla fine).
Normalmente accade però che ad un certo punto mi accorgo che x esempio la pos di un foro vorrebbe spostata più in alto di 10mm (quì entra in gioco la domanda in rosso), quindi dovrei
- esplodere il blocco,
- spostare il foro
- ricreare il blocco con lo stesso nome, posizionato nello stesso modo
così tutti gli altri blocchi sparsi sul disegno verrebbero in automatico aggiornati (vero?)
La difficoltà che trovavo ora, usando il tuo lisp è:
"come si chiamava questo blocco? ... tavolo1, tavolo2 o tavolo3????"

se devi modificare un blocco, usa BEDIT (Block Editor), se esplodi un blocco, ricordati di fare il purge [/COLOR][/COLOR](command "_purge" "_b" "" "_N") prima di usare BL.
e siccome che il comando BEDIT (che nn conoscevo ... :( ) pare nn funzionare con acad14
<Comando: _bedit
Comando sconosciuto "BEDIT">

..la mia idea era quella di:
- prima di creare un blocco "tavolo" + numero progressivo
- creo un nuovo layer + numero progressivo, su cui andrò a mettere tutte le entità che andrò a selezionare, SOLO a questo punto creerò un blocco chiamato (non più "livello" + numero progressivo), come il layer appena creato, che sarà appunto "tavolo2".

Così facendo, quando avrò necessità di sbloccare, modificare e ribloccare il blocco, mi basterà guaradare a che layer appartiene "tavolo2" e ricrearlo, digitando a mano il nome del blocco semplicemente copiando il nome layer...

Spero ora sia + chiaro (e che magari vi siano soluzioni + semplici)
 

rpor66

Utente Standard
Professione: Programmatore
Software: AutoCad, GstarCAD, CadWorx, Excel, Lisp, VBA
Regione: Sicilia
#9
Bedit non c'è in R14.

Prova questo, comincio a capire.

Ciao
 

Allegati