• このフォーラムは、www.cad3d.it/forum1 - イタリアのデザインコミュニティの機械翻訳です。いくつかの用語は正しく翻訳されていません。

c.aの装甲針を引用します。

  • Thread starter Thread starter Betoniera
  • Start date Start date
se usi lo spazio carta la lunghezza rimane sempre la stessa, cambia solo il fattore di zoom. se invece ingrandisci fisicamente le entità il discorso cambia.

il 100 è il fattore di ingrandimento gli altri caratteri abilitano il fattore di ingrandimento.
 
appena riesco a trovare del tempo sistemo il lisp con le modifiche auspicate da betoniera e vedo di fugare i dubbi di cristallo.
pazientate... :smile:
 
appena riesco a trovare del tempo sistemo il lisp con le modifiche auspicate da betoniera e vedo di fugare i dubbi di cristallo.
pazientate...


ciao gp, ciao a tutti
mi piace questo forum dove chiedi un programma e c'è qualcuno che te lo sviluppa. e si scusa pure se ci mette troppo tempo.
bene, penso che interverrò ancora con qualche altra richiesta.
non è che poi mi presenti il conto?.
fino alla cena a base di pesce ci arrivo, ma non oltre.
ciao, alla prossima
 
allora sarà conto salato + cena a base di pesce in un locale scelto da gp, ovviamente il più costoso della sua zona.
 
non ho avuto modo di testarlo a fondo, è probabile che salti fuori qualche problemino, fatemi sapere.

qf --> (la routine principale).

qfs --> (setup scale disegno).
se scala disegno generale e scala disegno particolare sono uguali i ferri vengono quotati in base alle lunghezze reali, viceversa in base al rapporto fra le due scale.
quindi, ad esempio, selezionando un particolare ingrandito per un fattore di 2,5 (come nel caso di disegno generale = 1:50 e disegno particolare = 1:20), i valori di "altezza testi" e "lunghezze" verrano scalati di un fattore 0,4

qft --> (setup scala testi e unità).
indicare le unità disegno (m/cm) e i valori delle altezze dei testi in millimetri plottati.
nel dwg i testi avranno altezza rapportata al valore di "scala disegno generale" e direzione parallela al segmento di polilinea selezionato.


tutti i settaggi vengono salvati nel dwg, non è quindi necessario riassegnarli all'apertura, ciò permette di lavorare con più disegni aperti (e settaggi differenti) nella stessa sessione di autocad.
 

Attachments

ciao gp

grazie per il lavoro, ma c'è qualche problema.
questi sotto sono i messaggi di errore che si verificano quando lancio il programma qf

unità = m scala generale 1:50 scala particolari 1:50
selezionare ferro da quotare [Scale/Testi]: s
scala disegno generale 1:<50> 50
scala disegno particolari 1:<50> 20
unità = m scala generale 1:50 scala particolari 1:20
selezionare ferro da quotare [Scale/Testi]:
error: impossibile ottenere objectid: #<vla-object 157d8844>
comando: qf
error: elenco di associazione errato: (nil)


ritengo però, che il lavoro che avevi fatto andava già bene.
occorreva solo avere il controllo dell'altezza dei testi (uguale per le quotature e per il totale).
secondo me questo controllo bisogna farlo solo con una variabile. per esempio con (setq htesto 2).
nei miei programmi, io conosco in ogni momento in che scala sto disegno perchè la variabile dimscale viene risettata ogni volta che cambio scala. se sono in scala 1/20 dimascale è 20, se sono in 1/50 dimscale è 50.
quindi, rapportando la variabile htesto (di stampa) a dimscale io riesco a stabilire l'atezza da dare al testo tale che una volta stampato sia alto 2 mm.
un'altra varibile che dovrebbe essere prevista è il fattore di scala. quando si ingrandisce una sezione di 2,5 volte è sufficiente reimpostare il fattore di scala a 0,4 per avere le quotature giuste e non ingrandite.
qundi il nel tuo programma devi solo prevedere queste 2 variabili, che poi noi utilizziamo prima di lanciare il programma a seconda di ciò che stiamo disegnando. non devi occuparti tu della gestione della scala, perchè non riusciresti a intercettare tutte le situazioni. la gestione della scala la facciamo noi, e in caso di altezza dei testi errati o di quotature non corrette, ci saranno dei programmi lisp di editing che consentiranno la correzione se non si vuole tornare indietro.
in sostanza, meglio un programma semplice e gestibile e snello, rispetto ad un programma complesso che difficilmante coglie tutte le situazioni.
dico questo perchè, praticamente il programma era già fatto. andava solo messo a punto, ripeto, con un variabile che controlla l'altezza dei testi e una per il fattore di scala. null'altro. l'unica cosa in più, (necessaria in qualche caso) è la quotatura di eventuali pezzi curvi della polilinea evidenziata da cristallo (anche se è sempre approssimabile con elementi diritti.
ciao
 
ciao gp
ho modificato io il tuo programma.
pur non conoscendo bene le istruzioni che hai usato, ho capito comunque dove mettere le mani.
ho introdotto la variabile htesto per controllare l'altezza dei testi e la variabile fs per moltiplicare tutte le quote per un fattore di scala. queste due variabili verranno settate prima del lancio del programma a seconda delle esigenze.
ho poi azzerato le variabili orthomode e osmode perchè per punti vicini si ottine una quota 0 (prende i punti sbagliati).
il programma funziona egregiamente e metto a disposizione anche quello modificato.
al solito, io non uso da definizione di funzione defun c:, pertanto per lanciare il programma occorre digitare (load "qf2").
ciao e grazie, alla prossima
 

Attachments

al solito, io non uso da definizione di funzione defun c:, pertanto per lanciare il programma occorre digitare (load "qf2").
e perche mai non usi il defun c: ? ogni volta ricarichi il lisp? ad ogni lancio del programma?
 
x betoniera
cristallo ha ragione, perché non usi il defun?
come già detto in un post precedente basta che associ al tasto questa macro. se non è presente, il programma viene caricato solo la prima volta:
^c^c(if (null c:qf2)(load "qf2"));qf2

con il defun puoi anche usarlo da tastiera digitando direttamente qf2 senza eseguire ogni volta la pappardella del load.
 
e perche mai non usi il defun c: ? ogni volta ricarichi il lisp? ad ogni lancio del programma?

ciao cristallo, confutatis e gp

non uso defun c: semplicemente perchè associo i programmi alle tools personalizzate di autocad.
queste sotto sono alcune tools del mio applicativo
c’è la tolls cementi armati, utilità, retini, disegno 3d e altre

programma_ca.jpg


pertanto, per eseguire un programma, non devo digitare ogni volta (load “programma”) perché il comando è associato al tasto. inoltre, così non ho l’onere di caricare preventivamente i programmi.
io ho concepito così gli applicativi, voi che ne pensate? e’ meglio fare in altro modo?.

un’altra domanda vole fare agli esperti lisp
probabilmente io ho studiato il lisp vecchio e non conosco le funzioni avanzate che usate voi.
dove posso trovare le spiegazioni dulle funzioni avanzate tipo:

(setq st (vlax-ename->vla-object (car st)))
(vl-position (vlax-get st 'objectname) '("acdbpolyline" "acdb2dpolyline"))

ad esempio dove trovo la spiegazione di vlax?
cosa significa (vl-load-com)?

ciao e grazie per le eventuali risposte
 
ciao gp
suggeriso di aggiungere dopo la riga 104
Code:
(vla-put-textinside dim1 1)
perchè il testo delle quote, nei tratti corti delle polilinee, resti vicino alla polilinea. un esempio può essere nei ganci delle staffe.
setta la variabile dimtix (testo interno on)

per rispondere a betomiera: "dove posso trovare le spiegazioni dulle funzioni avanzate"
ti suggerisco "visuallisp_functions_refchart" e "the visual lisp developers bible 2003 edition (v2)"
se non li trovi in rete, posso eventualmente allegarli nel forum.
per un manuale in italiano su autolisp suggerisco "il mio lisp" di roberto rossi http://www.redchar.net/
 
in rete c'è molto materiale sull'argomento, ma uno dei migliori siti è www.afralisp.net che spiega molto chiaramente sia autolisp che vlisp. (vl-load-com) è la funzione che abilita tutte le funzioni vla, vlax, ecc... che per qualche oscuro motivo non sono precaricate da autocad all'avvio ma bisogna farlo manualmente. certo è che basta inserirla in acad.lsp. io uso autocad 2012 ed anche qui per oscuri motivi (ma che cavolo fanno quelli dell'autodesk?) la sezione di autolisp e vlisp non è compresa nella guida per sviluppatori. dal momento che ormai tutte le guide sono on-line ed anche estremamente scomode, io avevo bisogno di una guida che non richieda la connessione ad internet e per questo motivo ho preso la guida in .chm dell'autocad 2007. i comandi vlisp sono rimasti gli stessi dalla versione 2000 ad oggi.
 
alcune note a margine della discussione.
1) per chi cerca supporto per le nuove funzioni vlax-vla- ecc, esistono 2 file (acad_aag.chm, acadauto.chm)
presenti nell'help di autocad, quando non era ancora solo online (io li ho presi dall'help della vers.2009-ita,
chi lavora con la vers.inglese deve estrarli dall'help corrispondente).
il secondo di questi files, nato come reference per il linguaggio vba, in realtà riporta, finalmente, la
trasposizione degli esempi vba nel linguaggio visuallisp, permettendo il confronto diretto fra i 2
linguaggi.

2) sulla quotatura delle staffe.
io credo che il programma dovrebbe gestire solo la quotatura dei singoli tratti delle staffe e dei ferri
piegati, supponendo che l'utente abbia già scelto, prima del lancio del file lisp, sia lo stile di testo sia
lo stile di quota opportuno (p.es. nel mio caso "staffe"), creato esternamente, caricato e reso corrente con:
(setq newdimstyle (vla-add (vla-get-dimstyles docobj) "staffe"))
(vla-put-activedimstyle docobj newdimstyle)

tralascerei l'opzione aperta/chiusa per la staffa perchè, anche se graficamente si presenta chiusa, nella
realtà ha solo tratti sovrapposti (anche nel caso fosse saldata).
riterrei inoltre non vincolante avere i testi di quota sempre esterni o esterni, ma accetterei l'opzione di
default che pone i testi sempre sopra (o sotto) rispetto al tratto di barra, supponendo di leggere i testi
secondo le convenzioni generali del disegno (evitando così anche il caso di avere testi capovolti o di
confondere il 6 con il 9).
il punto critico (quotatura dei ganci), in cui sicuramente esiste sovrapposizione fra barra e testo, in
genere una soltanto, non mi preoccuperei più di tanto, purchè il testo sia leggibile dall'operatore in
cantiere o in stabilimento; costa meno tempo una traslazione locale del testo rispetto al tentativo di non avere alcuna
sovrapposizione.

3) tra i vari interventi era stata data una risposta parziale alla richiesta di g.p.: "a tal proposito ti
sarei grato se potessi allegare un dwg con dei "ferri tipo", mi incuriosisce il discorso "arco" e la
posizione automatica del testo.
"
esiste in realtà la funzione vla-adddimarc che fornisce la lunghezza di un arco, ma richiede 3 punti dell'arco (che posso ricavare con vlax-curve-getpointatparam), e il centro dell'arco: questo dato inizialmente è sconosciuto, ma posso ricavarlo con una funzione presa in prestito, che mi fornisce, tra l'altro, anche il raggio.
per cui, individuato sulla polilinea il tratto in cui la curvatura non è nulla (bulge /= 0), su questo tratto applico la funzione vla-adddimarc, mentre nei tratti rettilinei applico vla-adddimaligned, come voi avete già indicato.
come vedete, il codice è molto essenziale, lo stile di quota "staffe" dovrà per forza essere sostituito dal vostro, mentre tutto il resto è già stato risolto da voi in modo esauriente; ho solo voluto aggiungere un tassello alla discussione; lascio ai veri programmatori inserire questo codice nel file complessivo, se dovesse rivelarsi utile.
 

Attachments

ciao gp

...questi sotto sono i messaggi di errore che si verificano quando lancio il programma qf...
error: impossibile ottenere objectid: #<vla-object 157d8844>
comando: qf
error: elenco di associazione errato: (nil)[/I]
non riesco a replicare l'errore, credo sia legato alla versione del sistema operativo (32/64 bit), tu quale usi?
a qualcun'altro è successo?



nei miei programmi, io conosco in ogni momento in che scala sto disegno perchè la variabile dimscale viene risettata ogni volta che cambio scala.
se visualizzi la tabella proprietà di dieci quote aventi diverse altezze del testo in quanto disegnate con valori diversi di dimscale osservi che tutte hanno gli stessi valori di "altezza testo", "offset testo", ecc.
per la carità, ognuno ha le sue preferenze, ma personalmente preferisco sapere i valori "reali" degli oggetti che seleziono.



...un'altra varibile che dovrebbe essere prevista è il fattore di scala. quando si ingrandisce una sezione di 2,5 volte è sufficiente reimpostare il fattore di scala a 0,4 per avere le quotature giuste e non ingrandite.
qundi il nel tuo programma devi solo prevedere queste 2 variabili, che poi noi utilizziamo prima di lanciare il programma a seconda di ciò che stiamo disegnando. non devi occuparti tu della gestione della scala, perchè non riusciresti a intercettare tutte le situazioni. la gestione della scala la facciamo noi, e in caso di altezza dei testi errati o di quotature non corrette, ci saranno dei programmi lisp di editing che consentiranno la correzione se non si vuole tornare indietro.
ho visto che hai già risolto...
anche qui è questione di gusti, onestamente devo dire che ho concepito il programma per un probabile mio utilizzo, preferisco automatizzare e rispondere ad alcune richieste di meno.
in qf ad ogni lancio vengono riproposti (visualizzati) i valori correnti, se vanno bene non c'è bisogno di impostare nulla, modificando un valore l'altezza viene rimodulata e mantenuta anche nei lanci successivi fino al modificarsi delle esigenze.



... per eseguire un programma, non devo digitare ogni volta (load “programma”) perché il comando è associato al tasto. inoltre, così non ho l’onere di caricare preventivamente i programmi.
io ho concepito così gli applicativi, voi che ne pensate? e’ meglio fare in altro modo?.
caricare i programmi prima di lanciarli è assolutamente ininfluente sulle prestazioni dei pc di oggi, è sicuramente meglio assegnare un nome al defun, valuta che oltretutto:

1) si può caricare la funzione solo se non già caricata (confutatis docet) -> ^c^c(if (null c:qf2)(load "qf2")) qf2

2) inserendo le istruzioni per il caricamento nel file acaddoc.lsp, ad esempio (autoload "qf" '("qf")) puoi lanciare il lisp digitando qf da tastiera o assegnare solo ^c^cqf alla macro del pulsante, in ogni caso il lisp verrà caricato, una sola volta, al momento del primo lancio

3) non ho testato, ma premendo invio la routine viene ripetuta o devi di nuovo cercare e cliccare sul pulsante???



...ad esempio dove trovo la spiegazione di vlax?...

oltre ai link che ti hanno già segnalato, se disponi di autocad <2013 puoi trovare l'elenco delle funzioni vlax nell'help: autolisp reference guide\autolisp functions, sotto la lettera v.
viceversa posso magari allegare un vecchio chm della 2008.



....ho poi azzerato le variabili orthomode e osmode perchè per punti vicini si ottine una quota 0 (prende i punti sbagliati)...

e' vero, bisogna settare osmode, ma orthomode è ininfluente.
non mi sono reso conto di eventuali problemi perchè per default ho osnapcoord = 2 e l'errore non mi si è manifestato.
 
ciao gp
suggeriso di aggiungere dopo la riga 104
Code:
(vla-put-textinside dim1 1)
perchè il testo delle quote, nei tratti corti delle polilinee, resti vicino alla polilinea. un esempio può essere nei ganci delle staffe.
setta la variabile dimtix (testo interno on)


ciao angelo, grazie della "dritta", in effetti i miei stili quota hanno già quelle impostazioni e non ho previsto il contrario. :redface:
 
... lo stile di quota "staffe" dovrà per forza essere sostituito dal vostro...

grazie joseph per la condivisione.

per quanto riguarda lo stile di quota ho cercato di fare in modo che la quotatura fosse indipendente da questo, ciò per evitare di doverlo per forza caricare/scaricare ad ogni utilizzo di qf.

ho previsto quindi l'inserimento delle quote con lo stile corrente, qualunque esso sia, poi la modifica con valori consoni in base a unità e scala utilizzati.
 
ciao gp, ciao a tutti
stavo testando il tuo programma.
ho notato che per poliliee di una sola riga non funziona.
e' un problema sistemarlo?.
ormai hai fatto 30 fai anche 31.
ciao e grazie per i suggerimenti.
alla prossima
 
...per poliliee di una sola riga non funziona...

se vuoi aggiornare il tuo lisp modifica questa parte di codice aggiungendo il testo in rosso:
Code:
[B][COLOR="#FF0000"]            (if (> nv 2)[/COLOR][/B]
                (setq tr1 (list
                          (nth (- nv 1) l_v)
                          (nth (- nv 2) l_v)
                          (nth (- nv 3) l_v)
                          (nth (- nv 1) l_v)
                )         )
[COLOR="#FF0000"][B]            )[/B][/COLOR]


per non dover variare osmode e poi ripristinare all'uscita modifica invece questa riga:
Code:
(vl-cmdf "_dimaligned" [COLOR="#FF0000"][B]"_non"[/B][/COLOR] (car l_v) [COLOR="#FF0000"][B]"_non"[/B][/COLOR] (cadr l_v) [COLOR="#FF0000"][B]"_non"[/B][/COLOR] (cadr l_v))



allego in ogni caso il codice completo, comprensivo del suggerimento di smemo per la forzatura del posizionamento "centrale" del testo.
 

Attachments

ciao,
ho cercato di combinare i file "q-st.lsp" di joseph e "quotaferri.lsp" di g.p. cattaneo per poter quotare anche i ferri/staffe curvi.
naturalmente è ancora completare e da migliorare sia in pulizia del listato che scelta delle opzioni.
sono ben accette modifiche e correzioni.
 

Attachments

ripropongo il programma di gp. con le modifiche:
- rielaborazione, per quotatura staffe/ferri curvi, dei file: "q-st.lsp" di joseph e "quotaferri.lsp" di gp.
- linee e archi singoli convertiti in polilinea
- aggiunto passo ferri
 

Attachments

Last edited by a moderator:

Forum statistics

Threads
46,674
Messages
380,976
Members
2
Latest member
loop80
このフォーラムは、www.cad3d.it/forum1 - イタリアのデザインコミュニティの機械翻訳です。いくつかの用語は正しく翻訳されていません。

Members online

No members online now.
Back
Top