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...
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
(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
;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