Problema cambio layer

carmelo81

Utente poco attivo
Professione: Ingegnere libero professionista
Software: nanoCAD
Regione: Sicilia
Ciao a tutti,
utilizzo il codice lisp qui sotto (non mio) per fare un doppio offset, solo che alla fine le nuove linee sono spostate automaticamente nel layer 0 e non capisco come mai.
Potreste aiutarmi a risolvere?
Grazie mille
Codice:
(defun c:k (/ ent dist obj kwrd)
  (setq dist (* 0.5 (getdist "\nEnter offset distance:  ")))
  (while (not ent)
    (if    (eq (setq ent (car (entsel "\nSelect line to offset:  ")))
        nil
    )
      (princ "\nThat was not a line.  Please select again:  ")
    )
  )
  (initget (+ 1 2 4 64))

  (setq obj (vlax-ename->vla-object ent))
  (vla-offset obj dist)
  (vla-offset obj (* dist -1))

    (vla-erase obj)

  (princ)
)
 

rpor66

Utente Standard
Professione: Programmatore
Software: AutoCad, CadWorx, Lisp, VBA. YouTube: roberto portuese
Regione: Sicilia
Lo spostamento su layer 0 non viene eseguito da questa routine, il comando vla-offset utilizza il layer della linea sorgente.
 

Cristallo

Utente Standard
Professione: Leggo e confronto
Software: Lettura critica
Regione: Fuori dalla cerchia
Appunto.
Non c'è una sola istruzione che cambia il layer corrente o delle nuove entità.
E provato il listato l'offset avviene correttamente.

Verifica se hai settato il comando offset con l'opzione Current invece che Source
 

Joblayer

Utente poco attivo
Professione: disegnatore
Software: Autocad
Regione: Piemonte
Come giustamente rpor66 scrive, non c'e' uno spostamento di layer, e su autocad funziona perfettamente, posso pensare che dipenda dal Software che usi, potresti provare ad usare questo codice modificato che forza l'assegnazione del layer alle due linee create, prelevandolo da quella selezionata.
 

Allegati

  • 1 KB Visualizzazioni: 5

carmelo81

Utente poco attivo
Professione: Ingegnere libero professionista
Software: nanoCAD
Regione: Sicilia
Grazie raga per le risposte..

Verifica se hai settato il comando offset con l'opzione Current invece che Source
Infatti il comando funziona correttamente ma mi cambia layer, bo...Confermo che l'opzione è in Source.

Come giustamente rpor66 scrive, non c'e' uno spostamento di layer, e su autocad funziona perfettamente, posso pensare che dipenda dal Software che usi, potresti provare ad usare questo codice modificato che forza l'assegnazione del layer alle due linee create, prelevandolo da quella selezionata.
Grazie mille, alla fine userò il tuo codice perché perfettamente funzionante.
 

carmelo81

Utente poco attivo
Professione: Ingegnere libero professionista
Software: nanoCAD
Regione: Sicilia
Come giustamente rpor66 scrive, non c'e' uno spostamento di layer, e su autocad funziona perfettamente, posso pensare che dipenda dal Software che usi, potresti provare ad usare questo codice modificato che forza l'assegnazione del layer alle due linee create, prelevandolo da quella selezionata.
Scusami Joblayer ho ancora due domande sul tuo codice:
1: il ciclo while mi consente di fare tanti offset senza chiudere il comando? perchè se cosi fosse, non funziona.
2: Come faccio a memorizzare il valore della variabile dist in modo da avere lo stesso valore quando richiamo il comando?

grazie ancora
 

Joblayer

Utente poco attivo
Professione: disegnatore
Software: Autocad
Regione: Piemonte
Scusami Joblayer ho ancora due domande sul tuo codice:
1: il ciclo while mi consente di fare tanti offset senza chiudere il comando? perchè se cosi fosse, non funziona.
2: Come faccio a memorizzare il valore della variabile dist in modo da avere lo stesso valore quando richiamo il comando?

grazie ancora
Il ciclo while in questione, non ti consente di fare tanti offset, ma ha lo scopo di continuare a chiederti di selezionare una linea, fino a quando selezioni nel nulla. Una soluzione a quello di cui hai bisogno puo' essere questa modifica, che ti ripete il comando per 100 volte, potendo selezionare linee a ripetizione, senza cambiare la variabile dist, e premendo "esc" quando vuoi terminare, verra' mostrato un messaggio d'errore, il che non e' molto pulito, ma a quel punto avrai gia' raggiunto lo scopo.
 

Allegati

carmelo81

Utente poco attivo
Professione: Ingegnere libero professionista
Software: nanoCAD
Regione: Sicilia
beh è sempre qualcosa anche se un po rudimentale. Lo userò anche per altro, grazie!

Invece per la seconda domanda, c'è un modo specifico per risolvere?
Grazie ancora
 

Joblayer

Utente poco attivo
Professione: disegnatore
Software: Autocad
Regione: Piemonte
Provo a rispondere alla tua seconda domanda, qualcuno mi corregga se scrivo stupidaggini, quando si esegue un comando lisp le variabili in esso contenute sono attive fino alla fine del comando, dopo di che vengono perse, per tenere traccia della tua variabile "dist" occorre salvarla da qualche parte. Autocad usa le sue numerose variabili di sistema per i propri riferimenti e richiami dei suoi comandi, per tutta la sessione di disegno, ma un comando lisp non ha un suo spazio al di fuori di esso, o almeno io non l'ho trovato. Ricordo di aver letto che esistevano 4 variabili di sistema a disposizione dell'utente, ma non sono riuscito a trovarle (se qualcuno sa qualcosa di più è ben accetto), così ho sfruttato la variabile usata da OFFSET per recuperare la tua variabile "dist", pero' potrebbe essere stravolta se tra due comandi lisp in questione fosse usato offset con distanza diversa. Altra alternativa sarebbe salvare la variabile in un file di testo in una posizione del pc, e recuperarla al bisogno, ma si andrebbe a sporcare in giro, non so se ne valga la pena.
 

Allegati

rpor66

Utente Standard
Professione: Programmatore
Software: AutoCad, CadWorx, Lisp, VBA. YouTube: roberto portuese
Regione: Sicilia
Le variabili in lisp nascono all'apertura di un dwg, muoiono alla chiusura, sempre che non cambi la variabile LISPINIT.
Ci sono 5 variabili di tipo double, USERR1÷5, e 5 di tipo integer, USERI1÷5, valori memorizzati nel dwg.
Nulla vieta di memorizzare il valore della variabile in un file esterno, tipo MioOffset.ini, gestito dalla routine in lisp.
 

Gio_S

Utente poco attivo
Professione: architetto
Software: IntelliCAD, SketchUp, MeshLab, PovRay, AutoLisp, Ruby SkUp, RapidQ, XBLite
Regione: Milano
Ciao,
USERS1, USERS2, USERS3, USERS4, and USERS5 sono variabili a disposizione dell'utente, sul web trovi facilmente dettagli sull'uso.
Le puoi usare facilmente. Io ne ho bisogno di altre e non mi bastano, ad esempio per i parametri di come lanciare un render.
Ho escogitato quidi un sistema semplice anche se rozzo, ma che non ha controindicazioni. In lisp, da menù, mi creo varabili di "ambiente" fisico, creando semplicemente Layers che non contengono oggetti ma sono segnalazioni.
Esempio.... tipo di cielo "Storm... sunset... etc"
E anche la quota per rendering subacquei.. la quota esatta del punto di osservazione. E' rozzo ma funge e non ha limiti.
 

Gio_S

Utente poco attivo
Professione: architetto
Software: IntelliCAD, SketchUp, MeshLab, PovRay, AutoLisp, Ruby SkUp, RapidQ, XBLite
Regione: Milano
scusate ... stavo scrivendo in parallelo a rp ... ho duplicato la rispota
 

Joblayer

Utente poco attivo
Professione: disegnatore
Software: Autocad
Regione: Piemonte
Grazie sia a "rpor66" che a "Gio_S". Ricordavo nomi simili, ma non riuscivo a trovarle, in quando se digito "_setvar" alla riga di comando per vedere l'elenco di tutte le variabili, queste 5 USERS non sono visibili, ma in ogni caso ora se le richiamo direttamente con il suo nome le posso gestire facilmente.
Ancora grazie.
 

Joblayer

Utente poco attivo
Professione: disegnatore
Software: Autocad
Regione: Piemonte
beh è sempre qualcosa anche se un po rudimentale. Lo userò anche per altro, grazie!

Invece per la seconda domanda, c'è un modo specifico per risolvere?
Grazie ancora
Con l'aiuto ricevuto posso allegare l'ultimo aggiornamento del tuo codice.
 

Allegati