Comunidade
AutoCAD - Português
Bem vindo ao Forum de AutoCAD da Autodesk. Compartilhe seu conhecimento, faça perguntas e explore os tópicos mais populares de AutoCAD.
cancelar
Mostrando resultados para 
Mostrar  apenas  | Pesquisar então 
Você quer dizer: 

Ponto central do conjunto de Objetos (linhas)

16 RESPOSTAS 16
SOLUCIONADO
Responder
Mensagem 1 de 17
DiegoTeixeira
4037 Exibições, 16 Respostas

Ponto central do conjunto de Objetos (linhas)

Boa tarde, como faço para saber qual o centro de um conjunto de linhas, ex.:

 

Tenho 300 linhas (paralelas ou não) com espaçamentos entre elas e tamanhos diferentes e preciso saber qual a coordenada exata do centro deste aglomerado de linhas.

 

Desde já fico grato.

16 RESPOSTAS 16
Mensagem 2 de 17
f_santana
em resposta a: DiegoTeixeira

não conheço um comando para isso, se estivessimos falando de um solido... mas existe uma "gambiarra" possivel


você transformar todas estas linhas em um GRUPO, o AutoCAD vai mostrar para você o "centro de gravidade" desse conjunto


para colher as coordenadas deste ponto, você poderia ter uma linha e utilizando o GRIPs mover um de seus vértices para o "centro de gravidade" do seu grupo

 


Você achou uma postagem útil? Então fique à vontade para curtir essas postagens!
Sua pergunta obteve uma resposta que resolveu a duvida? Então clique no botão Aceitar Solução.


Fábio Santana
Architect | CAD/BIM Manager

EESignature

Mensagem 3 de 17
hmsilva
em resposta a: DiegoTeixeira

DiegoTeixeira,

em adição á excelente solução apresentada por f_santana, podes recorrer a uma rotina de lisp, que foi postada  <<aqui>> por Kent Cooper, que vai criar o mais pequeno rectangulo possivel que englobe todos os objectos selecionados, depois é só desenhares uma linha a unir dois vertices opostos e vêr as coordenadas do ponto do meio...

 

Espero que ajude

Henrique

EESignature

Mensagem 4 de 17
DiegoTeixeira
em resposta a: hmsilva

Muito obrigado Fábio e Henrique, as duas opções me oferecem uma marca no centro mas elas não aparecem na mesma coordenada. Vou fazer uns teste e depois posto o que ficou mais preciso.
Mensagem 5 de 17
hmsilva
em resposta a: DiegoTeixeira

Diego, foi um prazer poder ajudar.
Fico a aguardar o poste...
Henrique

EESignature

Mensagem 6 de 17
f_santana
em resposta a: DiegoTeixeira

DiegoTeixeira, precisão de 100% você só vai ter desenhando os limites da área que contem estes elementos,
levando em conta inclusive o ângulo mais adequado para isso.

 

E depois encontrando o ponto central deste perímetro (se este perímetro for transformado em um SOLID, você pode achar o ponto com o comando MASSPROP


Você achou uma postagem útil? Então fique à vontade para curtir essas postagens!
Sua pergunta obteve uma resposta que resolveu a duvida? Então clique no botão Aceitar Solução.


Fábio Santana
Architect | CAD/BIM Manager

EESignature

Mensagem 7 de 17
DiegoTeixeira
em resposta a: f_santana

Realmente Fábio, a diferença entre as duas opções é o ângulo do objeto, em angulo de 90° o resultado é o mesmo nas duas opções.
Mensagem 8 de 17
KLUG-TICIANO
em resposta a: DiegoTeixeira

Diego

 

No anexo temos tres linhas que são envolvidas por retangulos de mesmas dimensões. 

As linhas são de comprimentos e formas diferentes, propositalmente. 

O circulo azul dentro de cada retangulo sinaliza o ponto provavel de cada "centro da linha" especifica. Vemos que todos os tres circulos tem posições diferentes em relação aos vertices dos retangulos, o que caracteriza que a solução nao depende apenas do retangulo (envoltoria), e muito do que esta dentro dela.

 

Penso que a solução não  seria por ai. Posso estar enganado. Claro!

 

Estou estruturando um aplicativo pelo seguinte caminho: 

        Fazer tudo automaticamente;

        Considerar que todos as linhas são para serem trabalhadas, ou que tenha uma caracteristica propria (layer, ...);

        Dividir cada linha (polilinha) em 1000, 10000 ou 32000 partes, obtendo "points" em cada divisão;

        Capturar as coordenadas de cada "point";

        Considerar cada "point" como uma "massa virtual" e atraves de suas coordenadas encontrar, por calculo no proprio aplicativo, o "centro de massa" do arranjo, passando a considerar a massa "central" desta linha como a quantidade de "point";

         Repetir para todas as linhas;

         Calcular o centro unico de todo o arranjo observando que a precisão para a resposta final  vai determinar a necessidade, ou não, de termos as distancias entre os "point" criados com igual valor (o que exige mais calculo -- automatico), o que daria precisao de 100%;

 

Estou trabalhando em VB e tendo algumas dificuldades por ter de trabalhar com o comando "Sendkeys" para aplicar a função "DIVIDE", ja que não conheço todas as funçoes do  VB do autocad.

 

Caso possa, disponibilize algumas cinco linhas pois poderia facilitar a estruturação do aplicativo.

 

Comentarios contrarios e esclarecedores, ou nao, ao raciocinio que estou seguindo, sao bem vindos.

 

Atenciosamente.

 

Ticiano

 

Mensagem 9 de 17
DiegoTeixeira
em resposta a: KLUG-TICIANO

Ticiano

 

Parabéns pela iniciativa. Segue anexo shape com as linhas.

Não consegui abrir o arquivos dwg, se puder salver numa versão anterior, a minha é a 12.

Fico a diposição para ajuda-lo e no aguardo da resposta para esta necessidade.

 

Atenciosamente.

 

Diego Teixeira

Mensagem 10 de 17
KLUG-TICIANO
em resposta a: DiegoTeixeira

Diego

 

Abaixo arquivo em 2004 e R14.

 

Verificarei o arquivo que você enviou.

 

Ticiano

Mensagem 11 de 17
f_santana
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


Você achou uma postagem útil? Então fique à vontade para curtir essas postagens!
Sua pergunta obteve uma resposta que resolveu a duvida? Então clique no botão Aceitar Solução.


Fábio Santana
Architect | CAD/BIM Manager

EESignature

Mensagem 12 de 17
hmsilva
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

EESignature

Mensagem 13 de 17
KLUG-TICIANO
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

Mensagem 14 de 17
DiegoTeixeira
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.

Mensagem 15 de 17
f_santana
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


Você achou uma postagem útil? Então fique à vontade para curtir essas postagens!
Sua pergunta obteve uma resposta que resolveu a duvida? Então clique no botão Aceitar Solução.


Fábio Santana
Architect | CAD/BIM Manager

EESignature

Mensagem 16 de 17
hmsilva
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

EESignature

Mensagem 17 de 17
KLUG-TICIANO
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

 

 

 

Não encontrou o que está procurando? Pergunte à comunidade ou compartilhe seu conhecimento.

Postar nos fóruns  

Autodesk Design & Make Report