Estaca Inicial

Civil 3d... é até parece perfeito, mas... algumas vezes depois de criar aquele alinhamento enorme, colocar todas as labels, criar perfis, etc, me aparece alguem e diz: "a estaca inicial não é essa!! é xxx", onde xxx é o número de sorte do camarada... bem, a principio é so mudar o parâmetro "station" em "Station Control" nas propriedades do alinhamento, mas e os greides? terás de mover os PIVs na mão... os profileviews também... pensando nisso, criei este programinha ver...
(defun c:defestini (/ ent vla old delta lock lst tmp)
;inicializa controle de erros:
  (tbn:error-init nil)
;se selecionou um alinhamento:
  (if (setq ent (ssget ":S" '((0 . "AECC_ALIGNMENT"))))
;se obter a estaca inicial:
    (if (setq staini (getreal "\nQual a estaca METRICA inicial?"))
      (
progn
;pega o VLA-OBJECT do alinhamento:
        (setq vla   (vlax-ename->vla-object (ssname ent 0))
;pega a estaca inicial dele:
              old   (cvlp-get-ReferencePointStation vla)
;calcula a diferença:
              delta (- staini old))
;seta a nova estaca inicial:
        (cvlp-put-ReferencePointStation vla staini)
        

;altera as estacas de todos os PIVs dos GREIDES:
        (vlax-for tmp (cvlp-get-profiles vla)
;se o perfil é GREIDE (não vale superimposed nem perfil do terreno)
          (if (= cvlc-aeccfinishedGround (cvlp-get-type tmp))
            (
progn
;pega a lista de PIVs do perfil:
              (setq lst nil)
              (
vlax-for pvi (cvlp-get-pvis tmp)
                (
setq lst (cons (list (cvlp-get-station pvi) pvi) lst)))
;ordena-os por estacas crescentes ou decrescentes:
              (setq lst (vl-sort lst '(lambda (e1 e2) (< (car e1) (car e2))))
                    lst (if  (> delta 0) (reverse lst) lst))
;para cada PIV, altere a estaca
              (foreach pvi lst
                (vl-catch-all-apply 'cvlp-put-station
                  (list (cadr pvi) (+ (car pvi) delta)))))))
        

;altere as estacas de todos os profile view:
        (vlax-for tmp (cvlp-get-profileviews vla)
;destrava as estacas, para poder alterar:
          (setq lock (cvlp-get-StationLocked tmp))
          (
cvlp-put-StationLocked tmp :vlax-false)
          

;se as estacas irão aumentar:
          (if (> delta 0)
            (
progn
;altera primeiro a estaca final
              (cvlp-put-stationend tmp (+ (cvlp-get-stationend tmp) delta))
              (
cvlp-put-stationstart tmp (+ (cvlp-get-stationstart tmp) delta)))
            (
progn
;altera primeiro a estaca inicial
              (cvlp-put-stationstart tmp (+ (cvlp-get-stationstart tmp) delta))
              (
cvlp-put-stationend tmp (+ (cvlp-get-stationend tmp) delta))))
;se o profile view tinha as estacas travadas, trava novamente:
          (if (= :vlax-true lock) (cvlp-put-StationLocked tmp lock))))))
  (
tbn:error-restore))


Link(s) da(s) subrotina(s) usada(s):
tbn:error-init, tbn:error-restore, inivars

Com ele, basta selecionar o alinhamento em planta e dizer o valor da estaca inicial, assim ele irá aplicar isso ao alinhamento, ao greide e ao profileview.
Fuinciona bem se o profileview não estiver "splitado", para esses terá de colocar os splits manualmente... ainda... não achei a maneira de alterar isso

Nenhum comentário:

Postar um comentário