• Este fórum é a tradução automática de www.cad3d.it/forum1 - a comunidade italiana de design. Vários termos não foram traduzidos corretamente.

Lisp para quebrar várias linhas em pontos de interseção

  • Criador do tópico Criador do tópico Betoniera
  • Start date Start date

Betoniera

Guest
Olá a todos.
Sou um strutturista.
para calcular as estruturas tanto em c.a, e em aço quantidade o modelo tridimensional unifilare (constituído por linhas) em meus programas de cálculo.
Preciso que todas as linhas sejam quebradas nos pontos de intersecção.
Eu tentei baixar o pkbreak. programa lsp do site. esse programa funciona bem apenas se você quebrar 2 linhas com apenas um ponto de interseção.
se as linhas são muitas, o programa não funciona e vai mesmo errado.
Eu tentei repetidamente colocar as mãos sobre ele sem ser capaz de corrigi-lo ou entender por que é errado.
de qualquer forma a pergunta é:
você tem, gentilmente, um programa que quebra linhas em interseções.
Se funcionasse para um chassi 3d seria ideal, mas eu também iria estabelecer para um programa que funciona em 2d ou seja, que quebra as linhas nos pontos de interseção no avião.
Encontrei um programa semelhante em arx, mas agora uso progecad que não suporta arquivos arx.
portanto, o pedido é para lisp arquivo.
Obrigado antecipadamente por quaisquer respostas.
Olá a todos.
 
o arquivo que quebra as linhas é "spezzalinee .lsp" (não pkbreak.lsp como erroneamente eu indiquei anteriormente).
anexar o arquivo original abaixo
aqui a lista

(diversão c:sl)
(setvar "cmdecho" 0)
(princ "\n seleciona linhas para quebrar...")
(setq gr-selez (sget '(0 . "line")))))))
(Sectq i 0)
(repetir)
(Sectq eei (sname gr-selez i))
(setq pi1(cdr(assoc 10(entget eei)))))))))
(setq pi2(cdr(assoc 11(entget eei)))))))))
(setq k (+ i 1))
(repetir) 1)
(setq eek (sname gr-selez k)
(setq pk1(cdr(assoc 10(entget eek)))))))))
(setq pk2(cdr(assoc 11(entget eek)))))))))
(se (setq pint(inters pi1 pi2 pk1 pk2))
(progn)
(comando "_break" (eval eei) pint "@")
(comando "_break" (eval eek) pint "@")
)
)
(setq k(1+ k)
)
(seq i(1+) (i)
)
(princ "\n work perform!")
(princ)
)
(princ) <copyright: claudio="" granuzzo="" ing.=""> "
(princ "\n tipo sl para lançar o programa. "
(princ)

este arquivo funciona bem para 2 linhas, mas não funciona se as linhas são múltiplas. Tentei mudá-la planejando uma execução repetida, mas não funciona.
Alguém tem alguma ideia sobre isso? .
Olá a todos.</copyright:>
 

Anexos

Eu não testei a lista, mas eu acho que não funciona porque quando você quebrar uma linha, o resultante (ou os resultantes, eu não tenho certeza) mudar o nome da entidade, então o lisp não sabe em que (novo) objeto intervir.
você deve primeiro encontrar o nome (ou o punho) das novas entidades criadas, antes de ligar o tamanho da interseção.
 
O que procura é bastante complicado.
Eu tenho um lisp que faz isso, mas usa comandos vl que eu acho que progecad não consegue.
para obter o resultado desejado manualmente, você pode seguir este método:
1) com o comando bpoly, crie os contornos dos painéis de quadro.
2) Retângulos de exploração
3) com overkill eliminar duplos

Se você quiser que o lisp do arquivo entre em contato comigo que além de enviá-lo para você eu explicarei um mínimo de lógica do que ele faz.

Adeus.
 
Eu não testei a lista, mas eu acho que não funciona porque quando você quebrar uma linha, o resultante (ou os resultantes, eu não tenho certeza) mudar o nome da entidade, então o lisp não sabe em que (novo) objeto intervir.
você deve primeiro encontrar o nome (ou o punho) das novas entidades criadas, antes de ligar o tamanho da interseção.
Olá cristal
Obrigado pela resposta.
Obviamente eu pensei sobre isso e pensei em resolver o problema, criando uma nova seleção para cada ciclo de modo que o programa iria quebrar as linhas em uma segunda interseção, então em um terceiro e assim por diante.
para fazer isso eu memorizei os pontos p1 e p2 da seleção retângulo
como você vê abaixo para um ciclo de 10 vezes
o estranho é que esse programa também funciona selecionando várias linhas, mas só quebra o primeiro.
a partir do segundo em que vai errado.
Parece um erro como se um suporte estivesse desaparecido, mas não tenho a certeza.
Seja como for, fiz muitas tentativas sem chegar à solução.
Claro, não espero que encontres o erro difícil.
Só pergunto se você tem algum programa semelhante que pode ser adaptado.
Olá.

(princ "\nselect lines to break...")
(setq count 0)
(enquanto (< contagem 10)
(setq p1 (getpoint "\nimmetti primo punto di selection "))
(setq p2 (getcorner p1 "\nimmetti segundo ponto de seleção "))
(setq ss3(sget "c" p1 p2 '(0 . "line")))))))

... (aqui as instruções para quebrar as linhas)

(contagem de setq (+ 1 contagem)
);
 
distância de folga se lugar para 0, linha de ruptura e não deixar espaço... Ao contrário do que você vê no gif.
 

Anexos

  • Bmcut.lsp
    Bmcut.lsp
    1.6 KB · Visualizações: 12
  • Bmcut.gif
    Bmcut.gif
    135.3 KB · Visualizações: 18
Hi x11start
o arquivo funciona em progecad mesmo que contenha instruções vl.
o problema, como você pode ver no gif, é que ele quebra uma linha dos dois que se cruzam, deixando o outro todo.
é que com uma instrução simples você pode cortar o outro também? .
Enfim, obrigado.
É um bom programa para trabalhar para chegar ao resultado.
Adeus.
 
Acho que o problema é o que criou cristal: uma vez que a linha é quebrada, ela muda seu nome, então as soluções que vêm à minha mente são:
- manter a janela de seleção armazenada (por exemplo, ponto abaixo da esquerda e superior direita), para refazer a solução automaticamente, que inclui as novas linhas geradas pela primeira divisão
- cada vez que você quebrar uma linha memorizar um (entlast) para pegar a última entidade criada (esta ideia também pode não funcionar! )
- marcar as entidades originais (linha), colocando-nos um código de grupo 1000 - 1001, de modo a dar-lhe um nome único que permanece mesmo depois de quebra-los... ideia ainda mais ficção científica e o resultado incerto!

Lembro-me que já havia um problema semelhante, quando vi uma discussão no fórum:É um lisp que serve para fazer um "sal" a polilinea que se cruza outro: ver anexos
 

Anexos

  • LineJump.gif
    LineJump.gif
    182.1 KB · Visualizações: 18
  • LineJump.lsp
    LineJump.lsp
    2.6 KB · Visualizações: 6
Eu encontrei mbreak de john f. uhden... mas também para ele é necessário jogar 2 vezes o lisp para cortar ambas as linhas verticais e horizontais: ver o gif
 

Anexos

  • MBreak.gif
    MBreak.gif
    354.6 KB · Visualizações: 19
  • MBREAK.LSP
    MBREAK.LSP
    10.7 KB · Visualizações: 21
Hi x11start
o programa que você postou funciona perfeitamente.
Claro que você tem que jogá-lo 2 vezes para quebrar todas as linhas, mas é pouca coisa e funciona.
Vi a lista, mas é tão complexo que desisti de entender o que ele faz.
há instruções em vl, mas funciona em progecad que, evidentemente implementou muitas funções vl.
Muito obrigado pelo seu compromisso de me encontrar o programa
e agradecer a John f. uhden (americano?) quem escreveu isso.
Obrigado por encontrá-lo e torná-lo disponível para todos.
Descobri que também funciona para quadros 3d. Óptimo.
Olá e parabéns a todos pelo profissionalismo.
 
Última edição:

Estatísticas do fórum

Tópicos
58,521
Mensagens
499,056
Membros
104,110
Último membro
ChristianR

Membros online

Nenhum membro online agora.
Voltar
Topo