Discussion:
sélectionner par polyligne
(trop ancien pour répondre)
..::|| LNI ||::..
2005-03-23 10:01:27 UTC
Permalink
Bonjour,

je cherche un moyen (LIPS, VBA, etc...) pour sélectionner des entités avec
une polyligne (ou autre).
si mon sauveur est la, qu'il se dénonce...

merci à lui (eux)

Jo
Pascal Teyton
2005-03-23 10:09:00 UTC
Permalink
Bonjour

Je ne comprends pas bien la question.
La sélection par TRAjet ne suffit pas ?
Post by ..::|| LNI ||::..
Bonjour,
je cherche un moyen (LIPS, VBA, etc...) pour sélectionner des entités avec
une polyligne (ou autre).
si mon sauveur est la, qu'il se dénonce...
merci à lui (eux)
Jo
Bernard Flavignard
2005-03-23 10:08:25 UTC
Permalink
Salut Pascal,
Sans oublier les options Capture Polygonale, Fenêtre Polygonale, tout dépend
si ce sont les objets "intersectant" une polyligne ou "inclus"
(partiellement ou complètement) dans une polyligne....
Ces questions toujours aussi floues!
A suivre
Bernard
Post by ..::|| LNI ||::..
Bonjour
Je ne comprends pas bien la question.
La sélection par TRAjet ne suffit pas ?
Post by ..::|| LNI ||::..
Bonjour,
je cherche un moyen (LIPS, VBA, etc...) pour sélectionner des entités avec
une polyligne (ou autre).
si mon sauveur est la, qu'il se dénonce...
merci à lui (eux)
Jo
Pascal Teyton
2005-03-23 10:19:10 UTC
Permalink
salut Bernard

J'ai fait une réponse rapide, je n'oublie pas les autres options, mais la
question n'est pas assez précise.
Post by Bernard Flavignard
Salut Pascal,
Sans oublier les options Capture Polygonale, Fenêtre Polygonale, tout dépend
si ce sont les objets "intersectant" une polyligne ou "inclus"
(partiellement ou complètement) dans une polyligne....
Ces questions toujours aussi floues!
A suivre
Bernard
Post by ..::|| LNI ||::..
Bonjour
Je ne comprends pas bien la question.
La sélection par TRAjet ne suffit pas ?
Post by ..::|| LNI ||::..
Bonjour,
je cherche un moyen (LIPS, VBA, etc...) pour sélectionner des entités
avec
Post by ..::|| LNI ||::..
Post by ..::|| LNI ||::..
une polyligne (ou autre).
si mon sauveur est la, qu'il se dénonce...
merci à lui (eux)
Jo
..::|| LNI ||::..
2005-03-23 10:59:08 UTC
Permalink
je donne d'autre precision:

j'ai plusieurs polyligne dans mon dessin dont je desir me servir pour
selectionner des entitées (avec choix intersectant ou inclus)
les options de la commande "select" ne propose pas ce type de selection...

Merci


Jo
Post by Pascal Teyton
salut Bernard
J'ai fait une réponse rapide, je n'oublie pas les autres options, mais la
question n'est pas assez précise.
Post by Bernard Flavignard
Salut Pascal,
Sans oublier les options Capture Polygonale, Fenêtre Polygonale, tout
dépend
Post by Bernard Flavignard
si ce sont les objets "intersectant" une polyligne ou "inclus"
(partiellement ou complètement) dans une polyligne....
Ces questions toujours aussi floues!
A suivre
Bernard
Post by ..::|| LNI ||::..
Bonjour
Je ne comprends pas bien la question.
La sélection par TRAjet ne suffit pas ?
Post by ..::|| LNI ||::..
Bonjour,
je cherche un moyen (LIPS, VBA, etc...) pour sélectionner des entités
avec
Post by ..::|| LNI ||::..
Post by ..::|| LNI ||::..
une polyligne (ou autre).
si mon sauveur est la, qu'il se dénonce...
merci à lui (eux)
Jo
Bruno.L
2005-03-23 11:46:55 UTC
Permalink
Post by ..::|| LNI ||::..
Bonjour,
je cherche un moyen (LIPS, VBA, etc...) pour sélectionner des entités avec
une polyligne (ou autre).
dans le cas d'une pline:

(setq pts (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= 10 (car x)))
(entget (car (entsel))))))
te donne la liste des points de la polyline selectionnée

à partir de là:

(command "select" "cp")
(foreach p pts (command p))
(command "")

que tu mets dans un defun et le tour est joué ;-)
Miamar
2005-03-25 11:42:21 UTC
Permalink
Bravo bruno.valsecchi
dans le temps j'ai posé une question identique à celle là et certains ont fait des efforts pour m'aider. Serge camiré a posté une routine qui marche aussi bien mais qui contenait un principe de tolérance qui excluait des ligne en dessous d'une certaine distance en dehors de la polyligne, ce qui me posait quelques ennuis. Mais ta routine est impécable et efficace merci beaucoup.
je voudrais que tu m'aide pour la compléter davantage.
je t'explique mon problème. j'utilise la commande superhachures pour des motifs de carrelage et comme tu sais cette commande n'agit que sur l'affichage. quand j'exporte mes dessins vers Illustrator j'ai le motif de remplissage qui déborde par rapport au contour, ce qui m'emène à exploder le motif de remplissage dans autocad et d'utiliser l'ajustage pour couper les lignes qui débordent et de supprimer celle qui sont entièrement à l'extérieur du contour, ce qui est pénible. ta routine va certainement m'aider beaucoup. ce que je voudrais :
1- utiliser le contour généré par superhachures comme polyligne de délimitaion pour sel_by_object.
2 - utiliser ta routine pour sélectionner les objets à l'intérieur ou ceux qui coupent le contour (donc c'est l'option CP qui m'interesse et non pas SP). précision de ne pas sélectionner tous les objets mais uniquement ceux se trouvant dans le calque M01.
3- mon motif de remplissage se trouve par défaut dans un calque nommé M01, de le copier avec le contour dans un calque M02.
4- supprimer le calque M01 avec toutes les lignes qui restent (c à dire non sélectionnées)
5- geler ou momentanément tous les calques à l'exception du calque M02 pour faire ce qui suit.
6- utiliser la commande des express (ajuster à l'emporte-pièce) pour couper toutes les lignes qui débordent du contour. s'il y a d'autres altérnatives que cette commande des express ce serait mieux car comme tu sais cette commande utilise une tolérance et n'ajuste pas les ligne en dessous du seuil de cette tolérance.
je sais que c'est peut être trop demandé, mais merci beaucoup à toi Bruno et à tous ceux ceux qui peuvent y contribuer.

Merci beaucoup
bruno.valsecchi
2005-03-25 14:48:59 UTC
Permalink
Merci du compliment Miamar.

Je me sousviens de ce souhait que tu avais formulé,
Je n'aime pas bien utiliser les fonctions des express tools,
Ce n'est pas parce que ces fonctions ne sont pas interressantes, mais comme elles peuvent changer d'une version à l'autre, que tout le monde n'a pas forcément ces outils, c'est souvent une source de problème. D'ailleurs j'ai le même avis sur DOSLIB.

J'essayerais quand même de voir ce que je peux faire sans me prendre la tête, mais sans garantie: à temps perdu ;-)
Miamar
2005-03-25 19:21:56 UTC
Permalink
Merci Bruno pour les éventuels efforts

mis à part les express. y-a-t il un moyen (au moins sur le principe) d'ajuster un ensemble d'objets sur une polyligne circulaire par exemple.
je ne sais pas si qq1 a testé 2006 de nous dire si un effort a été fait par autodesk sur cette question?

Bonne continuation
..::|| LNI ||::..
2005-03-23 13:32:37 UTC
Permalink
Merci Bruno,

C'est exatement ce que je cherchais...
en complement à ce bon LIPS comment peu t'on inverser une selection... je
n'ai rien vu dans l'aide d'ACAD

Merci

Jo
Post by ..::|| LNI ||::..
Bonjour,
Je te propose d'essayer ceci, et voir si cela te convient.
Si tu contastes des anomalies, merci de le faire savoir
Bruno V.
..::|| LNI ||::..
2005-03-24 09:31:09 UTC
Permalink
Bruno...

Tu es génial, cette derniere routine marche tres bien et je pense que je
vais en abuser...

Merci bcp

Jo


"bruno.valsecchi" <***@address.withheld> a écrit dans le message de news:
***@jiveforum2.autodesk.com...
Re,

J'ai essayé de d'appliquer une selection inverse (choix alternatif) dans la
routine précédemment proposé, j'ai trouvé l'idée interressante!

En espérant que ça réponde à tes besoins et qu'il n'y aura pas (ou peu de
bug)
Miamar
2005-03-28 14:59:57 UTC
Permalink
Vraiment je ne sais pas comment te remercier, c'est très gentille.
je veux pas abuser mais les remarques suivantes s'imposent :
1- quand j'exécute j'ai le msg "erreur: type d'argument incorrect: lselsetp". le calque M02 est crée, mais les objets restent sur le calque M01. tous les calques sont verrouillé sauf le calque M..x..temp.
2- pour le code l'utilisation de qbrick j'comprends pourquoi mais le code de Zondolo je n'ai compris de quoi il s'agit , comme je suis très fort en anglais j'ai pas compris le sujet. j'paisante je suis hyper faible en anglais. ce que j'ai deviné c'est pour sélectionner les entités en dehors du contour après avoir exécuté qbrick est-ce ça ou non?
3- quand tu parles de balayage ça a un rapport avec une qqconque tolérance inévitable surtout pour les contours arcs? est-ce vrai?
4- j'ai une proposition >>> après avoir exécuté qbrick et sectionner les lignes qui intersectent le contour d'exécuter une sélection inverse en utilisant l'option SP pour supprimer les entités à l'extérieur. et ainsi le tour est joué.
5- concernant EBrick ce code superbe doit :
a- en plus de découper un objets qui intersecte avec plusieurs objets.
b- découper plusiers objets qui intersectent avec un objet.
je soumettrais une demande à Kamal Boutora si celà peut être fait facilement.
avec qbrick même le contour est découpé...

encore une fois merci beaucoup, j'ose même plus te demander autre chose même si j'en ai besoin...
bruno.valsecchi
2005-03-29 08:36:16 UTC
Permalink
As tu essayer déjà dans une figure simple (sans arcs) pour voir si ça fonctionne.
Avec des arcs il est fort possible que ça échoue.

Le code de Bill servait à l'origine a dessiner un cercle virtuel (avec la fonction lisp grvecs) en dessinant une série de segment dont la résolution était fixé à 10 degré (l'apparence pourrait être comparé avec l'utilisation de la commande "RESVUE") donc je me suis servi de ce code pour fixé des points sur les arcs, et ainsi déterminer mon trajet de sélection.
J'ai préféré cette méthode (angulaire) à la méthode utilisant une distance de résolution. En effet que l'arc ait un petit ou grand rayon, il sera défini avec le même nombre de points, ce qui ne serait pas le cas avec une interdistance.

Mais cette méthode a aussi ces limites, car c'est toujours des segments successifs et non de vrai arrondis. C'est pour ça que si le décalage est trop faible ces segments couperont le contour original, d'où echec du lisp.
Ceci est le principal casse tête à résoudre.

Si tu n'arrive pas à "retoucher" le code a ta convenance, met un extrait DWG (2002) que tu voudrais arriver à faire.
Miamar
2005-03-29 11:04:15 UTC
Permalink
j'ai testé sur un contour simple, un rectangle, je n'ai pas testé sur des contours acrs.
je t'enverrais ce soir un fichier exemple, je ne suis pas pour l'instant chez moi.
l'approche dont je t'ai parlé à la fin, j'aimerais avoir ton avis la dessus : après avoir exécuté sel_by_object et qbrick, on peut sélectionner les entités du calque M01 qui sont complètement en dehors du contour et les supprimer. je crois ça donnerait ce que je veux.
@+
Miamar
2005-03-30 14:36:51 UTC
Permalink
Je m'excuse pour le nom du calque, c'est que le fichier que je t'ai attaché est un cas particulier.
Merci pour tous, j'espère que ça marchera enfin. sinon je me casserais la carcasse...
merci
Miamar
2005-03-31 10:05:54 UTC
Permalink
Bruno, tu es vraiment fort.
ton code mérite d'être intégré aux Express, c'est 3 fois mieux que extrim.
2 questions :
- les petits segments dans les arcs sont-t-ils dûs au code de Zondolo?
- le Calque temporaire peut-il être supprimé sans problème?

Le calque original Motif doit être supprimé avec les objets qu'il contient.
je vais essayer de me débrouiller pour le reste, même si...
Merci pour tout Bruno, tu es un champion
bruno.valsecchi
2005-03-31 12:24:07 UTC
Permalink
Heureux que cela te plaise,
Mais n'oublions pas que ce code est adapté a ton besoin (fichier exemple), je doute qu'il fonctionne dans n'importe quel cas.

Je répète ce j'ai dit
Si le contour n'est constitué que d'alignement droit, il peut alors être relativement fiable car on peut régler dans le code une valeur du décalage très petite pour pouvoir faire une bonne sélection fenêtre.

Ceci ne sera pas faisable avec des segment d'arc car la routine retournera une serie de point tout les x degré (dans ton cas réglé a 2.5 degré, valeur la plus fine), mais une valeur de décalage petite fera que les segment de la selection par fenêtre couperont le contour initial et la sélection sera mauvaise
Donc dans ce cas la solution est d'aggrandir la valeur de décalage pour que ces segment restent en dehors du contour initial, avec le risque que de petit segment résiduel du coupage (qbrick) reste endehors du contour initial.

Je ne sais pas si tu suit le raisonnement de la procédure, mais le problème est là!

J'ai choisi le code de Bill Zondlo qui génère le même nombre de point quelque soit la grandeur du rayon vu que c'est une résolution angulaire.
Une résolution par distance aurait donné une très grande précision pour les arcs de grand rayon et très mauvaise pour les petits.CQFD

Donc pour un cercle grand ou petit, j'ai 144 points pour définir son contour et les utiliser avec SSGET Fenêtre/Capture ou Trajet.

Pour le calque "M0X$TMP" il peut être purgé sans problème. Il sera recréer par la routine si besoin.
Son utilité est pour pouvoir faire la sélection inverse (c'est à dire du motif extérieur au contour)
Si je ne passais pas par ce calque temporaire, tes motifs précédemment ajustés et toutes autres entités du même calque seraient effacés aussi.
En résumé le motif sélectionné transite temporairement vers ce calque pour ne traiter que celui-ci.

Tu peut introduire le paramètrage dans la routine, mais cela reviendrais au même que les outils express qui demandent la résolution d'ajustement, et je crois me rappeler que justement tu voulais supprimer ce paramètrage.

Donc a toi de régler aux mieux suivant ton besoin.
Rappel, valeur pouvant être modifiées:

Réel (144.0) dans la fonction (defun buble_pts ...) 2 fois
Chaine caractère ("0.05") dans la fonction principale (defun c:miamar ...) pour la ligne (command "_.offset" "0.05".....)

J'espère que j'ai été clair dans mes explications ...?
Miamar
2005-03-31 14:42:25 UTC
Permalink
tu as été parfaitemeny clair. j'ai compris le fonctionnement.
1- est-ce que sel_by_object utilise aussi le même raisonnement?
2- est-ce que les petits segments ne peuvent pas être supprimés?
3- comment faire pour supprimer le calque original avec le motif décomposé.

si tu peux me dire comment je fais c'est bon sinon c'est pas grave.
Moi je vais tenter une autre approche, celle dont je t'ai parlé. je te ferais signe quand j'aurais du nouveau.
Merci beaucoup
bruno.valsecchi
2005-03-31 20:48:22 UTC
Permalink
1- Oui Sel_by_object utilise la même technique de parcours des arcs.
2- De quel petits segments tu parles? du contour coupé en morceaux aprés Qbrick. Ca compliquerait encore le code! mais rien n'est impossible
3- Tu peux en modifiant légérement le code, déjà facilement supprimer une partie des éléments.
Supprime la ligne:
(command "_.copy" (ssget "_CP" lst) "" "*0.0,0.0,0.0" "*0.0,0.0,0.0")
et remplace
(command "_.change" "_previous" "" "_properties" "_layer" "M0X$TMP" "")
par
(command "_.change" (ssget "_CP" lst) "" "_properties" "_layer" "M0X$TMP" "")

Bonne continuation dans tes recherches!
Miamar
2005-03-31 20:54:36 UTC
Permalink
2- De quel petits segments tu parles? du contour coupé en >morceaux aprés Qbrick. Ca compliquerait encore le code! >mais rien n'est impossible
non pas pas du countour coupé par qbrick, mais dans les parties arcées du contour, des segments sont ajoutés à l'intérieur. je crois c'est le balayage qui les crée. tu peux mieux les voir si tu zoom.
Bonne continuation dans tes recherches
merci beaucoup bruno
bruno.valsecchi
2005-04-01 09:19:08 UTC
Permalink
En fait tu as ton contour original et le contour dupliqué qui est coupé par Qbrick
Ceci entraine dans le visuel un affichache differrent pour les parties en arcs du contour original et les multiples segment d'arcs resultant de la coupure (RESVUE s'appliquant pas au même point de départ des arcs)
Un regen te relissera ces segment d'arc

NB:les 2 contours sont justes
Miamar
2005-04-01 20:59:53 UTC
Permalink
Ah bon tu es sûr bruno. maintenant je peux pas vérifier je suis en vacances scolaires. j'ai l'impression d'avoir déjà exécuté regen sans changement, mais enfin je suis pas sûr.
A bientot dans une semaine.
Merci mille fois Bruno

Ismain
2005-04-01 20:53:27 UTC
Permalink
à part ça n'y a-t-il pas d'autres solutions sans décaler le recangle? car je veux utiliser ça en lisp.
Loading...