AutoCAD - Português

AutoCAD - Português

Responder
*Expert Elite*
f_santana
Envios: 544
Registrado: ‎06-13-2007
Mensagem 11 de 17 (175 Exibições)

Re: Ponto central do conjunto de Objetos (linhas)

05-23-2013 12:16 PM em resposta a: KLUG-TICIANO

então, a minha resposta sobre o ponto central (de gravidade) precisaria de perimetros como estes que editei no arquivo do Taciano (salvei em versão 2010)

 

por isso que falei na ultima resposta em transformar em um solido

- Marque a resposta que resolveu o seu problema como solução, isso ajuda os outros usuários em suas buscas;

- Utilize a ferramenta de pesquisa do fórum, a sua duvida já pode estar respondida.


Fábio Santana Send Fabio Santana a Private Message | Arquiteto | CAD/BIM Manager | fdscon.wordpress.com

Colaborador da Comunidade de Usuários Autodesk Brasil
*Expert Elite*
hmsilva
Envios: 2.669
Registrado: ‎12-17-2004
Mensagem 12 de 17 (165 Exibições)

Re: Ponto central do conjunto de Objetos (linhas)

05-23-2013 02:41 PM em resposta a: DiegoTeixeira
Diego,

se a solução que procuras é parecida com as colocadas por Ticiano e Fábio, anexa um dwg com as linhas, que eu tento fazer uma rotina para mecanizar o calculo do ponto central.

Henrique
Active Contributor
KLUG-TICIANO
Envios: 29
Registrado: ‎11-04-2008
Mensagem 13 de 17 (148 Exibições)

Re: Ponto central do conjunto de Objetos (linhas)

05-27-2013 07:01 PM em resposta a: f_santana

Diego

 

Não consigo trabalhar com o arquivo que voce enviou. Nao penso em verificar software que "abram" o mesmo pois eu estaria mudando o foco do problema.

 

Elaborei um aplicativo em dvb que deve ser carregado com o comando "appload".

O dwg em anexo apresenta diversas curvas,  linhas, reta para simulação e verificação do aplicativo.

As três a direita e ao alto simulam três curvas de nivel com alturas (z) diferentes, as duas ao alto e a esquerda simulam dois niveis (z) diferentes. As demais figuras estão no mesmo plano.

A soluçao apresentada considera que todas as figuras estão em planos (xy) paralelos, podendo diferir apenas o "z" entre estes planos. Não considero curvas no plano "zx" por exemplo.

 

         Após a abertura do arquivo dwg dê o comando "EXPLODE" em todo o desenho;

         O aplicativo trabalha apenas linhas (retas) e arcos, gerados após o comando "EXPLODE"

         Delete varias curvas, propositalmente, e rode a macro "CENTRO DE MASSA - CENTRO_LINHAS";

         O resultado será imediado, sendo criado um circulo e texto com o comprimento total de todas as curvas (somadas). O centro do círculo é o ponto procurado;

         A caixa de mensagem apresenta estas informações;

         Aplique várias vezes o comando "Ctrl Z" e volte para a condição inicial, antes de ter deletado algumas curvas;

         Delete outras curvas e rode novamente a macro e veja o resultado;

         Faça a simulação com as curvas de nível , esquerda e a direita, separamente, e veja o resultado;

         Faça a simulação com um único semi círculo;

         Faça a simulação de um semi círculo, adicione um "mirror" do mesmo, criando aparentemente um círculo, rode a macro e veja que o centro está no centro;

        

É importante explodir o arquivo.

 

Eu poderia ter feito uma cópia de trabalho para a determinação do ponto e posteriormente inserido as informações  no arquivo principal mas penso que isto não é relevante.

 

Caso após o comando "EXPLODE" apareça outros objetos além de retas e curvas, podemos ter um erro e, ocorrendo, gostaria de ter esta informação, para melhoria.

 

Toda crítica é bem vinda.

 

Ticiano

Active Member
DiegoTeixeira
Envios: 10
Registrado: ‎04-03-2013
Mensagem 14 de 17 (140 Exibições)

Re: Ponto central do conjunto de Objetos (linhas)

05-28-2013 05:01 AM em resposta a: KLUG-TICIANO

Ticiano, bom dia.

Obrigado, Mas não consegui carregar o arquivo dvb, aparece o seguinte erro :"unable to unload the file".

 

Henrique, 

Desculpe a demora pra responder, não consegui acessar o fórum esses dias. Segue arquivo dwg com exemplos de linhas que uso separadas por camadas e o ponto central (por exemplo, a camada Parte01 contém um grupo de linhas e na camada Pto-Parte 01 está o ponto (coordenada) central dessa Parte01), as soluções apresentadas aqui se aproximam muito desse ponto, caso você ou alguém aqui conheça alguma forma de aproximar ainda mais desse ponto seria o ideal. No campo, vou precisar desse ponto pra servir de referência para os outros pontos que formam a Polyline,  então quanto maior for a precisão melhor será o resultado.

 

Obs. Atualmente uso um outro software para fazer este trabalho (gerar a coordenada central e outros arquivos com informações), mas boa parte já consigo fazer direto pelo CAD, falta apenas alguns detalhes como este de encontrar a coordenada central.

 

Grato pelas ajudas e fico a diposição para fornecer qualquer informação.

*Expert Elite*
f_santana
Envios: 544
Registrado: ‎06-13-2007
Mensagem 15 de 17 (134 Exibições)

Re: Ponto central do conjunto de Objetos (linhas)

05-28-2013 05:55 AM em resposta a: f_santana

para voce conseguir carregar um aplicativo em DVB voce precisa baixar e instalar os VBA para AutoCAD

desde a versão 2010 este recurso não vem mais com o AutoCAD na instalação

 

http://usa.autodesk.com/adsk/servlet/index?siteID=123112&id=15077854&linkID=9240618

 

pelo que sei o VBA não tem mais suporte. mas ainda é muito util para algumas operações

- Marque a resposta que resolveu o seu problema como solução, isso ajuda os outros usuários em suas buscas;

- Utilize a ferramenta de pesquisa do fórum, a sua duvida já pode estar respondida.


Fábio Santana Send Fabio Santana a Private Message | Arquiteto | CAD/BIM Manager | fdscon.wordpress.com

Colaborador da Comunidade de Usuários Autodesk Brasil
*Expert Elite*
hmsilva
Envios: 2.669
Registrado: ‎12-17-2004
Mensagem 16 de 17 (115 Exibições)

Re: Ponto central do conjunto de Objetos (linhas)

[ Editado ]
05-28-2013 01:39 PM em resposta a: DiegoTeixeira

 Diego,

utilizando duas sub-funções, Convex Hull e Clockwise-p, ambas de autoria de Lee Mac, escrevi esta pequena rotina, que cria uma fronteira exterior baseada no "Graham Scan Algorithm" (uma frontrira convexa), transformo essa fronteira em uma "Region" (quando o Fábio falou em sólido, lembrei-me que a Region" têm a mesma prop e é mais fácil de trabalhar), para poder extrair a propriedade "Centroid" e por fim cria um ponto nessas coordenadas e num layer "Centroid", não apago a "Region" com a finalidade de se poder analizar a sua forma.
Este código é apenas uma demo, não pretende ser um código final e serve para demonstrar uma maneira possivel de se conseguir um ponto central de um conjunto de polilinhas, funciona apenas com "LwPolyline" e foi apenas minimamente testado, o nome da função é o mesmo do ficheiro..."

 

(defun c:test2 (/ CPT E L R S VLR X);; coloca um ponto na Centroid de um conjunto de Lwpolylines
  (vl-load-com)

;; Convex Hull  -  Lee Mac
;; Implements the Graham Scan Algorithm to return the
;; Convex Hull of a list of points.
(defun LM:ConvexHull (lst / hul p0)
  (cond
    ((< (length lst) 4)
     lst
    )
    (t
     (setq p0 (car lst))
     (foreach p1 (cdr lst)
       (if (or (< (cadr p1) (cadr p0))
	       (and (equal (cadr p1) (cadr p0) 1e-8) (< (car p1) (car p0)))
	   )
	 (setq p0 p1)
       )
     )
     (setq lst
	    (vl-sort
	      lst
	      (function
		(lambda	(a b / c d)
		  (if (equal (setq c (angle p0 a)) (setq d (angle p0 b)) 1e-8)
		    (< (distance p0 a) (distance p0 b))
		    (< c d)
		  )
		)
	      )
	    )
     )
     (setq hul (list (caddr lst) (cadr lst) (car lst)))
     (foreach pt (cdddr lst)
       (setq hul (cons pt hul))
       (while (and (caddr hul) (LM:Clockwise-p (caddr hul) (cadr hul) pt))
	 (setq hul (cons pt (cddr hul)))
       )
     )
     hul
    )
  )
)


;; Clockwise-p  -  Lee Mac
;; Returns T if p1,p2,p3 are clockwise oriented or collinear
(defun LM:Clockwise-p ( p1 p2 p3 )
    (<  (-  (* (- (car  p2) (car  p1)) (- (cadr p3) (cadr p1)))
            (* (- (cadr p2) (cadr p1)) (- (car  p3) (car  p1)))
        )
        0.1e-8
    )
)

;; test
  (if (setq s (ssget ":L" '((0 . "LWPOLYLINE"))))
    (progn
      (setq i 0
                l1 nil)
      (repeat (sslength s)
      (setq e (entget (ssname s i))
                l (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= 10 (car x))) e))
                l1 (append l1 l)
                i (1+ i))
            )
            (setq  l (LM:ConvexHull l1))
      (entmake
            (append
              (list
                '(0 . "LWPOLYLINE")
                '(8 . "Centroid")
                '(100 . "AcDbEntity")
                '(100 . "AcDbPolyline")
                (cons 90 (length l))
                '(70 . 1)
              )
              (mapcar '(lambda (x) (cons 10 x)) l)
            )
      );; entmake
      (vl-cmdf "region" "_L" "")
    (if     (and (setq r (entlast))
                 (setq vlr (vlax-ename->vla-object r))
                 (= "AcDbRegion" (vla-get-ObjectName vlr))
            )
      (progn
            (setq cpt (vlax-safearray->list (vlax-variant-value (vlax-get-property vlr 'Centroid))))
            (entmake (list '(0 . "POINT") (cons 8 "Centroid") (cons 10 cpt)))
      );; progn
    );; if
   );; progn
  );; if
  (princ)
);; test

 Editado:

desculpa ter que colocar o codigo assim, mas não estou a conseguir anexar nada???


Espero que ajude
Henrique

Active Contributor
KLUG-TICIANO
Envios: 29
Registrado: ‎11-04-2008
Mensagem 17 de 17 (110 Exibições)

Re: Ponto central do conjunto de Objetos (linhas)

05-28-2013 07:52 PM em resposta a: f_santana

Diego

 

No procedimento por mim enviado, digo deletar linhas como uma forma educativa de fazer diversas simulações, com um único arquivo.

 

Na utilização normal do aplicativo limitei o número de arcos e linhas em 10000, penso que deve atender. Caso este número não atenda seus objetivos, favor informar-me.

 

Caso queira que os dados sejam todos transcritos para uma planilha excel, contemplando os objetos originais e os objetos após o comando "EXPLODE", favor informar-me. Teríamos inicio, fim, centro, vertex, comprimento, ângulo, etc...

 

Ao final do aplicativo é dado a instrução "Zoom" que mostrará o circulo, centrado no ponto procurado e o texto "COMP = ....." . Caso este círculo não esteja visivel localize o texto "COMP" através do comando "FIND" e o comando "ZoomTo", pois no momento não considerei relevante a "formatação" do mesmo em relação ao desenho todo.

 

Na utilização normal dê o comando "EXPLODE"  em todo o desenho, rode a macro e a solução será encontrada, desde que todas as informações contidas no desenho sejam parte dos dados, ou seja, não estamos considerando o "sêlo" do doc., por exemplo.

 

Caso necessite de selecionar uma região (Windows) especifica para os objetos a trabalhar, favor informar-me.

 

Solicito-lhe que toda solicitação seja diretamente através de meu e-mail, já constante em outras postagens, salientando-lhe que estarei ausente nos próximos 15 dias.

 

Ticiano

 

 

 

You are not logged in.

Faça login no seu perfil de acesso para perguntar e responder questões, compartilhar ideias e muito mais. Não se inscreveu ainda? Registrar aquí

Comunicados
Are you familiar with the Autodesk Expert Elites? The Expert Elite program is made up of customers that help other customers by sharing knowledge and exemplifying an engaging style of collaboration. To learn more, please visit our Expert Elite website.

Need installation help?

Start with some of our most frequented solutions to get help installing your software.

Pergunte a Comunidade