• Ce forum est la traduction générée par la machine de www.cad3d.it/forum1 - la communauté italienne du design. Plusieurs termes ne sont pas traduits correctement.

Trouver avec une sélection les polylines à l'intérieur d'autres

  • Auteur du sujet Auteur du sujet x11start
  • Date de début Date de début

x11start

Guest
J'ai créé un lisp que j'utilise habituellement pour imprimer en succession différentes tables (formées a4 et a3), disposées dans l'espace modèle.
fondamentalement la commande demande de sélectionner les tables que j'ai l'intention d'imprimer et comme les coordonnées d'impression utilisent les panneaux (lwpolyline) qu'elle trouve sur les calques "zz_format".

(setq selpol(ssget; select entities' (avec filtre)
(liste)
(cons.<and") "and="" "lwpolyline")="" "zz_formato"="" "zz_formato")="" (cons="" -4="" ...="" 0="" 8="" ;="" entita'="" lascia="" le="" passare="" piano="" polilinea="" poste="" solo="" sul="">"
)
)

le problème se pose quand par erreur, il y a deux carrés qui se chevauchent, ou l'un se trouve à l'intérieur d'un autre : par exemple le cadre du format qui est également situé sur le calque "zz_formato", au lieu d'un autre calque que le lisp ignorerait.
Dans ces cas, mon dessin est imprimé par erreur 2 fois, l'un prenant le format correct et l'autre prenant le cadre légèrement plus petit.

Je voudrais donc trouver un moyen de trouver l'erreur, ce qui me permet d'arrêter mon lisp et de rapporter le mauvais panneau... avec un joli cercle!

le workflow que je pensais utiliser est le suivant:

- J'exécute une à une toutes les polylines sélectionnées et je les trouve sur le calque "zz_formato".
Je crée une liste contenant les tops de chaque polyligne trouvée.
- Je crée une deuxième liste contenant le baricentro (point d'intersection du premier avec le 3ème sommet et le 2ème avec le 4ème).
- Je vois un par un les baricentres trouvés et je vérifie si ceux-ci sont à l'intérieur, pas seulement la liste des points considérés
mais aussi une autre liste. Si oui, cela signifie que ce point est interne, pas seulement de la figure dont il est centré,
mais aussi d'un autre: C'est une erreur.

Je ne sais pas si c'est le bon flux ou s'il y a des solutions plus rapides : Je voudrais éviter d'écrire des pages et des pages de code, pour
puis découvrez qu'avec 4 commandes vl-xx vous pouvez tout faire !</and")>
 
Mais les formats a4 et a3 sont toujours à la même échelle ?

vous pourriez exclure la polylinea qui a undomaine différent Dai Valori:
21x29,7xcala pour le a4
29,7x42xcala par a3.
 
en entreprise nous ne pouvons pas utiliser les mises en page (le patron ne sait pas comment les utiliser... donc vous ne l'utilisez pas!), par conséquent nous mettons tous les dessins des planches sur l'espace modèle.
Ce sont des formats à imprimer en a3 ou a4, mais qui ont des dimensions différentes selon l'élément à représenter: un caprice de 30 m de long ou un
1 m panneau, sera imprimé avec différentes échelles (sur a3 ou a4), en fonction de la taille du format.
Évidemment, nous allons mettre quelques détails, pour rendre visible ce qui sur un caprice imprimé sur une petite feuille, serait invisible.
les détails (ne pas pouvoir utiliser les mises en page!), nous les obtenons en faisant des blocs et en les grimpant.
Les dessins ne sont jamais étalonnés uniquement pour la raison ci-dessus.

les polylignes parfaitement recoupées seraient éliminées avec une surcompétence, mais le plus souvent il y a 2 formats : un pour imprimer la feuille en a3 vertical contenant par exemple armure et menuiserie d'un panneau tampon, et 1 en a4 qui permet d'imprimer seulement la menuiserie.
Ce dernier format nous le mettons dans un autre calque... mais il peut arriver qu'il va mal pour finir dans le même calque de l'a3... par conséquent, nous ne voulons pas éliminer avec trop de compétences dans la partie qui se chevauche à l'a3.

ma chance est que nous traitons toujours les polylines sans arches et avec 4 points (le format a3 à a4), donc il n'est pas difficile de trouver la pièce centrale à travers un carrefour et la commande inters.
Ainsi, comme je l'ai déjà écrit, je passerai un par l'une des diverses polylines, je vais extraire le centre de gravité et vérifier si ce centre de gravité est également dans une autre polyline. . . .

Si je peux le faire, j'essaie de mettre du code.

Merci quand même dieva: vous êtes toujours gentil à répondre!
 
Cela a pris un certain temps, mais j'ai trouvé un moyen de résoudre le problème que j'ai soulevé dans ce billet: maintenant je le partage avec vous.

nous avons des panneaux (une polyligne sur une couche "zz_formato") qui représentent autant de tables sur l'espace modèle, que nous avons l'intention d'imprimer (au moyen d'un lisp) sur de nombreuses feuilles a3: comme je l'ai dit dans ma société "il est interdit" l'utilisation des mises en page!

parfois, il pouvait arriver que 2 panneaux se chevauchant étaient dessinés ou qu'une polyligne était déplacée par erreur vers le calque "zz_formato" : le résultat était que le lisp qui m'a permis plusieurs impressions, m'a imprimé 2 fois la même feuille ou une partie de celle-ci.

J'ai d'abord pensé à un lisp qui me permettrait de comprendre si un point était interne ou externe à une polyligne. en tournant ce lisp pour chaque point de chaque format sélectionné, j'aurais compris si un de ces points était par erreur terminé dans une autre polyligne.
ça a marché, mais ça est devenu trop long: sélectionner 10 formats que j'aurais dû vérifier
9+8+7+6+5+4+3+2*4 = 176 points !

puis j'ai eu une idée: je prends la première polylinea, j'extrais les points (4 sommets du format) et je fais une nouvelle sélection avec "croisement polyline" ... et bien sûr les filtres qui me font passer seulement l'entité polylinea et la couche sur laquelle il repose.
De cette façon, je reçois Selnew: si Selnew a 1 seul élément est ok, si trouvé 2 (ou plus) signifie qu'il a été "captured" aussi une polylinea incorrecte.... et met un cercle pour mettre en évidence l'erreur.

dans l'image gif ci-jointe j'ai mis un exemple:
J'ai fait 6 boîtes représentant autant de formats à vérifier.
en lançant la commande "verifsovrap", on me demande de les sélectionner.
"verifsovrap" lance également un fichier "makelayer.lsp" de leemac, qui vous permet de créer facilement un calque: Je l'utilise pour créer la couche dans laquelle mettre les cercles qui mettent en évidence l'erreur.

- les carrés 1 - 2 - 4 sont exacts,
- le 3 a une autre polyligne sur le même calque qui se chevauche partiellement au format
- en 5 la polyline supplémentaire, est totalement à l'intérieur de la boîte
- dans 6 il y a 2 formats parfaitement recoupés, mais c'est encore une erreur et est également signalé
avec un cercle.

ce lisp peut également être lancé par un autre lisp: launch (xxx:formsovrap setdiselection) où la sélection est l'ensemble de sélection que vous comptez passer.

essentiellement le lisp "lender" devra contenir:

(si (null xx:formsovrap)
(setq errsov (xx:formsovrap sel)); vérifier le chevauchement des vitres (sel est le jeu de sélection à vérifier)
(si errsov (vl-exit-with-error (alerte "il y a des panneaux qui se chevauchent\n(voir zone du cercle)\ncorreggi et relance"))

Si errsov est différent de zéro, cela signifie qu'il a trouvé des erreurs: Il envoie un message.

J'espère que c'était utile.
 

Pièces jointes

  • VerifSovrap.LSP
    VerifSovrap.LSP
    2.9 KB · Affichages: 1
  • VerifSovrap.gif
    VerifSovrap.gif
    111.1 KB · Affichages: 2
Dernière édition:
le lisp que j'ai mis ici, a une limite: tout fonctionne si les cadres à analyser sont séparés entre eux. Si la case 1 touche les 2 côte à côte et les 3 ci-dessous, au moment de la vérification, il est considéré que les vitres sont 3, puis erreur .... d'autres mesures devraient être prises pour exclure les cadres dont les points sont sur la ligne, de sorte qu'ils doivent être considérés comme valides.
 

Statistiques du forum

Sujets
58 521
Messages
499 056
Membres
104 110
Dernier membre
ChristianR

Membres en ligne

Aucun membre en ligne actuellement.
Retour
Haut