Sabe quando você tem as sectionviews em trocentas folhas no model space? Aí vem aquele camarada e diz: Cada folha precisa ter quais estacas estão na folha!!!! E você se vê digitando manualmente cada um dos carimbos, e você tem lá seus 150 carimbos. É, demora pra caramba!! Então que tal fazer com uma lispezinha básica, veja:
;|
CarimboSv, programa para preencher o estaquemamento nos carimbos
autor: Neyton Luiz Dalle Molle
Engenheiro Civil
contato: neyton@yahoo.com
https://tbn2net.com
https://tbn2.blogspot.com
;licença de uso: free
;garantias: nenhuma!!! use por sua propria conta e risco!!!
|;
;variaveis globais para "lembrar" algumas opções
(setq
;nome do bloco a ser filtrado
CarimboSv:nomeBloco "A1"
;nome do atributo a modificar
CarimboSv:nomeAtt "SUBTÍTULO_2_DO_DESENHO"
;template do texto a aplicar no atributo
CarimboSv:template "KM {INICIO} À KM {FIM}")
(defun c:CarimboSv (/ tmp ss ent vla att alin txt pai s2 getStation)
;inicializar o controle de erros
(tbn:error-init nil)
;perguntar na linha de comando pelos valores
(setq tmp (getstring
(strcat "\nQual o nome do bloco da folha? <"
CarimboSv:nomeBloco
">")
t)
CarimboSv:nomeBloco (strcase
(if (= "" tmp)
CarimboSv:nomeBloco tmp))
tmp (getstring
(strcat "\nQual o nome do atributo? <"
CarimboSv:nomeAtt
">")
t)
CarimboSv:nomeAtt (strcase
(if (= "" tmp)
CarimboSv:nomeAtt tmp))
;subrotina para obter o "dono" ou "pai" de um objeto
pai (lambda (v)
(vlax-get-property v "parent"))
;subrotina para criar a estaca como string
getStation (lambda (estaca componente template)
(vl-string-subst
(vlax-invoke-method
alin
"GetStationStringWithEquations"
estaca)
componente
template)))
;pede a seleção dos blocos
;nao filtrar aqui. blocos dinamicos tendem a mudar de nome para
;*Uxxx
(prompt "\nSelecione os blocos")
(setq ss (ssget '(( 0 . "insert"))))
; repita para todos os blocos
(repeat (sslength ss)
;pega o primeiro da lista
(setq ent (ssname ss 0)
vla (vlax-ename->vla-object ent))
;se tem o nome correto (blocos dinamicos mudam para *U...
(if (= CarimboSv:nomeBloco (STRCASE (vla-get-effectivename vla)))
(progn
;faz zoom no bloco
(vla-getboundingbox vla 'minp 'maxp)
(vla-zoomwindow (vlax-get-acad-object) minp maxp)
;seleciona as sectionviews dentro da folha
(setq s2 (ssget "C" (vlax-safearray->list minp)
(vlax-safearray->list maxp)
' ((0 . "AECC_GRAPH_SECTION_VIEW")))
alin (pai (pai (pai (vlax-ename->vla-object
(ssname s2 0)))))
primeiro 1e10
ultimo -1e10)
;calcula a primeira e a ultima seção
(repeat (sslength s2)
(setq e (ssname s2 0)
tmp (vlax-get-property
(pai (vlax-ename->vla-object e)) "station"))
(if (< tmp primeiro) (setq primeiro tmp))
(if (> tmp ultimo) (setq ultimo tmp))
(ssdel e s2))
;formata a string com o template
(setq txt (getStation primeiro "{INICIO}" CarimboSv:template)
txt (getStation ultimo "{FIM}" txt))
;atribui o novo texto a todos os
;atributos com o nome selecionado
(foreach att (vlax-safearray->list
(vlax-variant-value
(vla-GetAttributes vla)))
(if (= CarimboSv:nomeAtt
(strcase (vla-get-tagstring att)))
(vla-put-textstring att txt)))))
;retira o primeiro bloco da lista e recomeça
;o looping
(ssdel ent ss))
;devolve o controle de erros ao autocad
(tbn:error-restore))
(prompt
"
Preenche estacas no carimbo carregado!!
suporte: neyton@yahoo.com
visite: https://tbn2net.com
e também: https://tbn2.blogspot.com
Digite: CarimboSv para usar
")
(princ)
Link(s) da(s) subrotina(s) usada(s): tbn:error-init, tbn:error-restore
É isso. Você será questionado pelo nome do bloco, o nome do atributo e o template a usar. Depois será pedida a seleção dos blocos. Note que se você mudar os valores padrão que a lisp usa para os nomes e template, o programa "lembra" na próxima utilização. Se você sempre usa outros nomes, edite o início da lisp, se souber o que está fazendo Sim, você precisará copiar o código do controle de erro aqui. Sim é preciso colocar o (vl-load-com) no início.
;|
CarimboSv, programa para preencher o estaquemamento nos carimbos
autor: Neyton Luiz Dalle Molle
Engenheiro Civil
contato: neyton@yahoo.com
https://tbn2net.com
https://tbn2.blogspot.com
;licença de uso: free
;garantias: nenhuma!!! use por sua propria conta e risco!!!
|;
;variaveis globais para "lembrar" algumas opções
(setq
;nome do bloco a ser filtrado
CarimboSv:nomeBloco "A1"
;nome do atributo a modificar
CarimboSv:nomeAtt "SUBTÍTULO_2_DO_DESENHO"
;template do texto a aplicar no atributo
CarimboSv:template "KM {INICIO} À KM {FIM}")
(defun c:CarimboSv (/ tmp ss ent vla att alin txt pai s2 getStation)
;inicializar o controle de erros
(tbn:error-init nil)
;perguntar na linha de comando pelos valores
(setq tmp (getstring
(strcat "\nQual o nome do bloco da folha? <"
CarimboSv:nomeBloco
">")
t)
CarimboSv:nomeBloco (strcase
(if (= "" tmp)
CarimboSv:nomeBloco tmp))
tmp (getstring
(strcat "\nQual o nome do atributo? <"
CarimboSv:nomeAtt
">")
t)
CarimboSv:nomeAtt (strcase
(if (= "" tmp)
CarimboSv:nomeAtt tmp))
;subrotina para obter o "dono" ou "pai" de um objeto
pai (lambda (v)
(vlax-get-property v "parent"))
;subrotina para criar a estaca como string
getStation (lambda (estaca componente template)
(vl-string-subst
(vlax-invoke-method
alin
"GetStationStringWithEquations"
estaca)
componente
template)))
;pede a seleção dos blocos
;nao filtrar aqui. blocos dinamicos tendem a mudar de nome para
;*Uxxx
(prompt "\nSelecione os blocos")
(setq ss (ssget '(( 0 . "insert"))))
; repita para todos os blocos
(repeat (sslength ss)
;pega o primeiro da lista
(setq ent (ssname ss 0)
vla (vlax-ename->vla-object ent))
;se tem o nome correto (blocos dinamicos mudam para *U...
(if (= CarimboSv:nomeBloco (STRCASE (vla-get-effectivename vla)))
(progn
;faz zoom no bloco
(vla-getboundingbox vla 'minp 'maxp)
(vla-zoomwindow (vlax-get-acad-object) minp maxp)
;seleciona as sectionviews dentro da folha
(setq s2 (ssget "C" (vlax-safearray->list minp)
(vlax-safearray->list maxp)
' ((0 . "AECC_GRAPH_SECTION_VIEW")))
alin (pai (pai (pai (vlax-ename->vla-object
(ssname s2 0)))))
primeiro 1e10
ultimo -1e10)
;calcula a primeira e a ultima seção
(repeat (sslength s2)
(setq e (ssname s2 0)
tmp (vlax-get-property
(pai (vlax-ename->vla-object e)) "station"))
(if (< tmp primeiro) (setq primeiro tmp))
(if (> tmp ultimo) (setq ultimo tmp))
(ssdel e s2))
;formata a string com o template
(setq txt (getStation primeiro "{INICIO}" CarimboSv:template)
txt (getStation ultimo "{FIM}" txt))
;atribui o novo texto a todos os
;atributos com o nome selecionado
(foreach att (vlax-safearray->list
(vlax-variant-value
(vla-GetAttributes vla)))
(if (= CarimboSv:nomeAtt
(strcase (vla-get-tagstring att)))
(vla-put-textstring att txt)))))
;retira o primeiro bloco da lista e recomeça
;o looping
(ssdel ent ss))
;devolve o controle de erros ao autocad
(tbn:error-restore))
(prompt
"
Preenche estacas no carimbo carregado!!
suporte: neyton@yahoo.com
visite: https://tbn2net.com
e também: https://tbn2.blogspot.com
Digite: CarimboSv para usar
")
(princ)
Link(s) da(s) subrotina(s) usada(s): tbn:error-init, tbn:error-restore
É isso. Você será questionado pelo nome do bloco, o nome do atributo e o template a usar. Depois será pedida a seleção dos blocos. Note que se você mudar os valores padrão que a lisp usa para os nomes e template, o programa "lembra" na próxima utilização. Se você sempre usa outros nomes, edite o início da lisp, se souber o que está fazendo Sim, você precisará copiar o código do controle de erro aqui. Sim é preciso colocar o (vl-load-com) no início.
Nenhum comentário:
Postar um comentário