Verificar dimenssões de uma polyline fechada
Bom dia pessoal, quanto tempo :)
Gostaria muito da ajuda de vc's.
Tendo eu um poligono irregular "fechado", é possível extrair as informações altura e largura máxima?
é possível into por algum comando lisp?
ex: tendo eu uma estrela de 5 ponta, é possível achar a altura dela.
Obrigado pessoal!
Tentarei ser mais participativo :)
Re: Verificar dimenssões de uma polyline fechada
Olá
se fôr em .NET pode usar:
acPoly As Polyline=New Polyline()
Dim PointMax As Point3d = acPoly.GeometricExtents.MaxPoint
Dim PointMin As Point3d = acPoly.GeometricExtents.MinPoint
Dim Altura As Double=PointMax.DistanceTo(PointMin)
Re: Verificar dimenssões de uma polyline fechada
Rui, muito obrigado!
será que a algum comando em lisp ou visual lisp tmb???
valeu mesmo... :)
Re: Verificar dimenssões de uma polyline fechada
O problema é que eu ja fiz tota programação em vlisp, só me falta este ponto,
por isto que eu gostaria de saber como isto pode ser feito, em Vlisp ou lisp.
Valeu!
Re: Verificar dimenssões de uma polyline fechada
Vou te dar uma solução,
Pela entidade da polyline você pode pegar a lista de pontos que são os eixos.
Analizando cada coordenada X e Y ex:
(setq H (- (max (car pt1) (car pt2)) (min (car pt1) (car pt2)))
Isso foi só uma ideia, vc pode fazer uma lista de pontos e verificar a maior coordenada em uma estrutura de repetição.
Espero ter ajudado, se não consiguir avisa que deselvovo para você.
Abraços.
Re: Verificar dimenssões de uma polyline fechada
Alan,
Primeiro de tudo, muito obrigado pela atenção.
Entendi sua explicação "até acreditava que o caminho seria este mesmo", só que escontrei um problema.... se você puder me ajudar.....
Peguei como exemplo, uma polyline de 5 pontos e desenvolvi a seguinte programação:
(setq ent (entsel "\Selecione o objeto:"))
(setq ent_nome (car ent))
(setq ent_lista (entget ent_nome))
quando chegou neste ponto, me retorna a seguinte informação.
((-1 . <Entity name: 7dc22628>) (0 . "LWPOLYLINE") (330 . <Entity name:
7e698cf8>) (5 . "D6BD") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0")
(370 . 0) (100 . "AcDbPolyline") (90 . 5) (70 . 1) (43 . 0.0) (38 . 0.0) (39 .
0.0) (10 104.626 348.623) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 148.14 423.991)
(40 . 0.0) (41 . 0.0) (42 . 0.0) (10 190.663 350.34) (40 . 0.0) (41 . 0.0) (42
. 0.0) (10 142.92 267.647) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 33.3351
267.647) (40 . 0.0) (41 . 0.0) (42 . 0.0) (210 0.0 0.0 1.0))
problema.....
como faço para acessar as informações de cada ponto???
só estou conceguindo acessar as informações do primeiro....
seria este o caminho certo para a solução deste problema????
Mais uma vez... Obrigado Alan....
Re: Verificar dimenssões de uma polyline fechada
Isso mesmo,
Se você perceber na lista todos os iniciados por 10 é um ponto de sua polyline..
usando o "assoc" vc só ia pegar o primeiro ponto..
Mais faz assim
(setq ent (entsel "\Selecione o objeto:"))
(setq ent_nome (car ent))
(setq ent_lista (entget ent_nome))
(setq lista_pontos (list))
(foreach temp ent_lista (progn (if (= (car temp) 10)(setq lista_pontos (cons (cdr temp) lista_pontos)))))
a variavel lista_pontos é uma lista com os eixos da polyline.
Espero que resolva!
Abraços
Quote:
Originally Posted by
ed_cristian.dwg
Alan,
Primeiro de tudo, muito obrigado pela atenção.
Entendi sua explicação "até acreditava que o caminho seria este mesmo", só que escontrei um problema.... se você puder me ajudar.....
Peguei como exemplo, uma polyline de 5 pontos e desenvolvi a seguinte programação:
(setq ent (entsel "\Selecione o objeto:"))
(setq ent_nome (car ent))
(setq ent_lista (entget ent_nome))
quando chegou neste ponto, me retorna a seguinte informação.
((-1 . <Entity name: 7dc22628>) (0 . "LWPOLYLINE") (330 . <Entity name:
7e698cf8>) (5 . "D6BD") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0")
(370 . 0) (100 . "AcDbPolyline") (90 . 5) (70 . 1) (43 . 0.0) (38 . 0.0) (39 .
0.0) (10 104.626 348.623) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 148.14 423.991)
(40 . 0.0) (41 . 0.0) (42 . 0.0) (10 190.663 350.34) (40 . 0.0) (41 . 0.0) (42
. 0.0) (10 142.92 267.647) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 33.3351
267.647) (40 . 0.0) (41 . 0.0) (42 . 0.0) (210 0.0 0.0 1.0))
problema.....
como faço para acessar as informações de cada ponto???
só estou conceguindo acessar as informações do primeiro....
seria este o caminho certo para a solução deste problema????
Mais uma vez... Obrigado Alan....
Re: Verificar dimenssões de uma polyline fechada
esperimente usar o ENTNEXT e procura os VERTEX da LWPOLYLINE
com um array voce consegue pegar todos
para voce ver como
segue ym trecho de uma rotina minha que trabalha com poligonos
(setq el1 (ssname e1 (setq n1 (1- n1))))
(if (or (equal "POLYLINE" (cdr (assoc 0 (entget el1))))
(equal "LWPOLYLINE" (cdr (assoc 0 (entget el1))))
)
(progn
(if (equal (cdr (assoc 38 (entget el1))) nil)
(progn
(setq el2 (entnext))
(while (/= el2 nil)
(if (equal "VERTEX" (cdr (assoc 0 (entget el2))))
(progn
(setq pt (cdr (assoc 10 (entget el2)))
ptx (car pt)
pty (cadr pt)
p (list ptx pty h)
)
(entmod
(subst (cons 10 p) (assoc 10 (entget el2)) (entget el2))
)
)
)
(setq el2 (entnext el2))
)
)
(progn
(entmod
(subst (cons 38 h) (assoc 38 (entget el1)) (entget el1))
)
)
)
(entupd el1)
)
Quote:
Originally Posted by
ed_cristian.dwg
Alan,
Primeiro de tudo, muito obrigado pela atenção.
Entendi sua explicação "até acreditava que o caminho seria este mesmo", só que escontrei um problema.... se você puder me ajudar.....
Peguei como exemplo, uma polyline de 5 pontos e desenvolvi a seguinte programação:
(setq ent (entsel "\Selecione o objeto:"))
(setq ent_nome (car ent))
(setq ent_lista (entget ent_nome))
quando chegou neste ponto, me retorna a seguinte informação.
((-1 . <Entity name: 7dc22628>) (0 . "LWPOLYLINE") (330 . <Entity name:
7e698cf8>) (5 . "D6BD") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0")
(370 . 0) (100 . "AcDbPolyline") (90 . 5) (70 . 1) (43 . 0.0) (38 . 0.0) (39 .
0.0) (10 104.626 348.623) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 148.14 423.991)
(40 . 0.0) (41 . 0.0) (42 . 0.0) (10 190.663 350.34) (40 . 0.0) (41 . 0.0) (42
. 0.0) (10 142.92 267.647) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 33.3351
267.647) (40 . 0.0) (41 . 0.0) (42 . 0.0) (210 0.0 0.0 1.0))
problema.....
como faço para acessar as informações de cada ponto???
só estou conceguindo acessar as informações do primeiro....
seria este o caminho certo para a solução deste problema????
Mais uma vez... Obrigado Alan....
Re: Verificar dimenssões de uma polyline fechada
nossa, te devo uma... uma não.... 50
valeu!
Re: Verificar dimenssões de uma polyline fechada
Olá Cristiano,
tome em atenção que se a polilinha contiver arcos os extremos podem não estar nos vértices da polilinha mas sim, algures nesses arcos.