Line Type com DCL


Vou postar uma rotina que fiz uns tempos atrás, não tem lá muita utilidade, mas serve para demonstrar como usar o SLIDER de um DCL e como usar alguns métodos de activex...
ver...

Salve o código abaixo em "ltsc.lsp":
(defun c:ltsc  (/ ss ent dcl actsld actref ref lst n
;carrega as vls.... : 
  (vl-load-com
  (
setq 
;subrotina que processa a seleção: 
        actsld (lambda (val /
                  (
setq n 0
                 (
set_tile "prc" (strcat val "%")) 
                  (
repeat (sslength ss
                   (
setq ent (vlax-ename->vla-object 
                               (ssname ss n))) 
                   ;altera a ltscale: 
                   (vla-put-LinetypeScale ent 
                     (* 0.01 (atoi val) ref)) 
                    ;atualiza a entidade: 
                   (vla-update ent
                   (
setq n (1+ n)))) 
;subrotina da ação do edit_box: 
        actref (lambda (val)  (setq ref (atof  val)) 
                 (
actsld (get_tile "sld"))) 
;ltscale de ref erencia inicia em 50% deste valor: 
        ref    2.0

  (
if (setq ss (ssget)) ;se for selecionado algo  
    (progn 
 ;convem ver onde será salva a dcl: 
      (setq dcl (load_dialog "ltscale.dcl"
             lst nil ;ltscale atuais, será preenchido abaixo  
            n   0
;salva as escala atuais, 
;caso pressione o cancel, elas serão restauradas  
      (repeat (sslength ss
        (
setq lst (cons (vla-get-LinetypeScale 
                          (vlax-ename->vla-object (ssname ss n))) 
                        lst
              n   (1+ n))) 
      (
setq lst (reverse lst)) 
;carrega o dialogo: 
      (new_dialog "ltscale" dcl
;inicializa as ações e valores das tiles: 
      (set_tile "ref" (rtos ref 2)) 
      (
action_tile "sld" "(actsld $value)"
      (
action_tile "ref" "(actref $value)"
;inicializa o valor do slider: 
      (actsld (set_tile "sld" "50")) 
; inicia o dialogo  
      (if (= (start_dialog) 0);cancel pressionado:  
;restaura as escala originais: 
        (repeat (sslength ss
          (
setq ent (ssname ss 0)) 
          (
vla-put-LinetypeScale 
            (vlax-ename->vla-object ent
            (
car lst)) 
          (
ssdel ent ss
          (
setq lst (cdr lst)))) 
;descarrega o dcl: 
       (unload_dialog dcl
      )))


e isto com o nome "ltscale.dcl":

ltscale dialog {label "ltscale"
:
edit_box{key="ref"label "ref";
:slider {key "sld" min_value"0" max_value=100small_increment=1;big_increment=10;
:text {key="prc";
ok_cancel
}

para usar, certifique-se de que a rotina e o dcl estão numa pasta da "support file search path" do autocad

LinkWithin

Related Posts Plugin for WordPress, Blogger...