Betoniera
Guest
ho fatto un piccolo programma denominato "descrizione staffe.lsp" che semplicemente tira una riga e scrive una etichetta.
l'utilità sta nel fatto che l'etichetta è editabile in un riquadro di dialogo ed è quindi sempre disponibile in memoria, senza doverla digitare ogni volta.
molto comoda per etichette ripetitive.
per questo lisp devo ringraziare il forum perchè mi ha indicato le modalità di utilizzo del riquadro di dialogo.
per 3 anni ha sempre funzionato.
ora mi dà questo errore:
comando: ; errore: il server activex ha restituito un errore: errore durante il caricamento della libreria dll dei tipi
sapreste indicarmi come risolvere il problema?
penso che non dipenda dal lisp perchè su altri computer funziona.
in ogni modo trasmetto il listato del lisp e del riquadro dcl
programma lisp
;descrizione staffe.lsp
;autocad 2014 04-10-2013
(setq snp (getvar "snapmode")
ort (getvar "orthomode")
sc (getvar "dimscale")
)
(setvar "orthomode" 0)
(setvar "snapmode" 0)
(setq dcl_id (load_dialog "inputbox.dcl"))
(if (not (new_dialog "inputbox" dcl_id))
;;;(vl-exit-with-error (alert "riquadro di dialogo non trovato!"))
(exit)
)
(if (equal (type hdesc) 'real)
(setq hdesc(rtos hdesc))
)
(if (not hdesc);;; imposto nella dcl il valore dell'altezza testo
(set_tile "htesto" (setq hdesc "2.00"))
(set_tile "htesto" hdesc)
)
(if (not txt);;; imposto nella dcl il valore della stringa
(set_tile "testo" (setq txt "st %%c8/20"))
(set_tile "testo" txt)
)
(action_tile "testo" "(setq txt $value)");;; recupero il valore della stringa
(action_tile "htesto" "(setq hdesc $value)");;; recupero il valore dell'altezza del testo
(action_tile "accept" "(done_dialog 1)")
(setq risposta (start_dialog))
(unload_dialog dcl_id)
(if (= risposta 1)
(progn
(while (setq p1 (getpoint "\nimmetti punto iniziale "));;; primo punto iniziale
(setq p2 (getpoint p1 "\nimmetti punto etichetta "));;; secondo punto etichetta
(command "_color" 3)
(command "_line" p1 p2 "")(vla-put-color (vlax-ename->vla-object (entlast)) 3)
(setvar "textsize" (* (atof hdesc) 0.1 sc))
(if (< (car p2) (car p1))
(command "_text" "md" p2 "" 0 (strcat " " txt " "));;; scrive a sinistra
(command "_text" "ms" p2 "" 0 (strcat " " txt " "));;; scrive a destra
)
);while
)
(alert "comanado annullato");;; basta commentare questa riga per evitare il messaggio
)
(setvar "snapmode" snp)
(setvar "orthomode" ort)
(princ)
riquadro dcl
inputbox: dialog {
label="descrizione staffe";
spacer_1;
: edit_box {
label = "descrizione";
height = 1;
is_bold = true;
key = "testo";
edit_width =40;
edit_limit = 256;
allow_accept = true;
}
: edit_box {
label = "h testo";
is_bold = true;
key = "htesto";
edit_width =40;
edit_limit = 256;
allow_accept = true;
}
spacer_1;
ok_cancel;
}
ringrazio anticipatamente quanti vorranno esaminare il problema.
grazie
ciao a tutti
l'utilità sta nel fatto che l'etichetta è editabile in un riquadro di dialogo ed è quindi sempre disponibile in memoria, senza doverla digitare ogni volta.
molto comoda per etichette ripetitive.
per questo lisp devo ringraziare il forum perchè mi ha indicato le modalità di utilizzo del riquadro di dialogo.
per 3 anni ha sempre funzionato.
ora mi dà questo errore:
comando: ; errore: il server activex ha restituito un errore: errore durante il caricamento della libreria dll dei tipi
sapreste indicarmi come risolvere il problema?
penso che non dipenda dal lisp perchè su altri computer funziona.
in ogni modo trasmetto il listato del lisp e del riquadro dcl
programma lisp
;descrizione staffe.lsp
;autocad 2014 04-10-2013
(setq snp (getvar "snapmode")
ort (getvar "orthomode")
sc (getvar "dimscale")
)
(setvar "orthomode" 0)
(setvar "snapmode" 0)
(setq dcl_id (load_dialog "inputbox.dcl"))
(if (not (new_dialog "inputbox" dcl_id))
;;;(vl-exit-with-error (alert "riquadro di dialogo non trovato!"))
(exit)
)
(if (equal (type hdesc) 'real)
(setq hdesc(rtos hdesc))
)
(if (not hdesc);;; imposto nella dcl il valore dell'altezza testo
(set_tile "htesto" (setq hdesc "2.00"))
(set_tile "htesto" hdesc)
)
(if (not txt);;; imposto nella dcl il valore della stringa
(set_tile "testo" (setq txt "st %%c8/20"))
(set_tile "testo" txt)
)
(action_tile "testo" "(setq txt $value)");;; recupero il valore della stringa
(action_tile "htesto" "(setq hdesc $value)");;; recupero il valore dell'altezza del testo
(action_tile "accept" "(done_dialog 1)")
(setq risposta (start_dialog))
(unload_dialog dcl_id)
(if (= risposta 1)
(progn
(while (setq p1 (getpoint "\nimmetti punto iniziale "));;; primo punto iniziale
(setq p2 (getpoint p1 "\nimmetti punto etichetta "));;; secondo punto etichetta
(command "_color" 3)
(command "_line" p1 p2 "")(vla-put-color (vlax-ename->vla-object (entlast)) 3)
(setvar "textsize" (* (atof hdesc) 0.1 sc))
(if (< (car p2) (car p1))
(command "_text" "md" p2 "" 0 (strcat " " txt " "));;; scrive a sinistra
(command "_text" "ms" p2 "" 0 (strcat " " txt " "));;; scrive a destra
)
);while
)
(alert "comanado annullato");;; basta commentare questa riga per evitare il messaggio
)
(setvar "snapmode" snp)
(setvar "orthomode" ort)
(princ)
riquadro dcl
inputbox: dialog {
label="descrizione staffe";
spacer_1;
: edit_box {
label = "descrizione";
height = 1;
is_bold = true;
key = "testo";
edit_width =40;
edit_limit = 256;
allow_accept = true;
}
: edit_box {
label = "h testo";
is_bold = true;
key = "htesto";
edit_width =40;
edit_limit = 256;
allow_accept = true;
}
spacer_1;
ok_cancel;
}
ringrazio anticipatamente quanti vorranno esaminare il problema.
grazie
ciao a tutti