fabbcad Posté(e) le 10 septembre 2009 Posté(e) le 10 septembre 2009 Bonjour, je me tourne à nouveaux vers vous car j'essaye de développer une routine qui permette de selectionner des objets proches d'un objet initial. Comme un schéma vaut mieux qu'un long discours, je mets une image du principe que je souhaite : on sélectionne le 1er carré en haut à gauche, et grâce au script Autocad selectionne les 9 carrés suivants : http://imagik.fr/thumb/121990.jpeg Je sais pas si une routine de ce type existe déjà?Voilà j'espère que vous pourrez m'aider ou m'orienter. Merci d'avance.[Edité le 10/9/2009 par fabbcad] Edit : taille de l'image, j'arrive pas à la mettre en grand... Voici le lien direct : http://imagik.fr/view/121990 [Edité le 10/9/2009 par fabbcad]
bseb67 Posté(e) le 10 septembre 2009 Posté(e) le 10 septembre 2009 Salut fabbcad, t'aurais pas plus petit comme image :P Tous pour lisp, Lisp pour tous!Avec Revit, cela ne vas trop vite...
lecrabe Posté(e) le 10 septembre 2009 Posté(e) le 10 septembre 2009 Hello Fabrice Cette magnifique routine (qui traite les blocs et points) ne te convient pas !? http://www.cadxp.com/sujetXForum-24910.htm Encore merci a Patrick_35, Le Decapode Autodesk Expert Elite Team
fabbcad Posté(e) le 10 septembre 2009 Auteur Posté(e) le 10 septembre 2009 Merci à vous deux pour vos réponses. Pour la taille de l'image je galère un peu... J'ai mis le lien direct si jamais. Pour la routine que tu me montres, sur le principe c'est assez proche de ce que je veux faire, le gros souci étant que ce n'est pas du vba... ça me gêne juste du fait que je ne connaît rien au lisp alors que je m'y connaît en VBA, donc je ne sais pas modifier cette routine pour mes besoins. Mes objets sont des polylignes fermées et non des blocks, ça n'a pas l'air de marcher pour les polylignes...Si au pire vous pouvez me dire comment lui dire de travailler sur une polyligne je pourrais voir ce que ça donne.Et au fait il faut que les objets qu'il selectionne appartiennent au même calque que l'objet initial bien sûr... Voilà j'espère que vous pourrez m'éclairer. ;)
lecrabe Posté(e) le 10 septembre 2009 Posté(e) le 10 septembre 2009 Hello Fabrice J'ai l'impression que tu recherches tes objets (Polylignes dans ton cas) par Propagtion ? Oui / Non ? Ce n'est pas la meme chose que rechercher dans un Rayon R ! Le Decapode Autodesk Expert Elite Team
fabbcad Posté(e) le 10 septembre 2009 Auteur Posté(e) le 10 septembre 2009 Hum... Qu'entends tu par progapation? Je vais essayer de dire diffèrement : Je souhaiterai selectionner un objet (polyligne rectangulaire) et en lançant ma routine qu'autocad me selectionne le voisin de droite, puis à partir de ce voisin à nouveau celui de droite, etc jusqu'à avoir 10 objets (ou moins s'il n'y en a que 8 par ex) dans la selection. Il peut chercher par rayon mais effectivement il faut qu'il comprenne que c'est celui de droite qui m'intéresse. Je sais pas si ça t'avance ou si je me suis embrouillé dans mon explication... ;)
fabbcad Posté(e) le 14 septembre 2009 Auteur Posté(e) le 14 septembre 2009 J'ai peut être du vous embrouiller alos... ;)
fabbcad Posté(e) le 15 septembre 2009 Auteur Posté(e) le 15 septembre 2009 Est ce que vous pourriez me dire ce que je dois changer dans ce script pour selectionner des polylignes et non un bloc? Comme ça j'essaye de voir ce qu je peux faire... Merci d'avance.
fabbcad Posté(e) le 21 septembre 2009 Auteur Posté(e) le 21 septembre 2009 Bon a priori personne...Ma question reste d'actualité mais j'en ai une autre qui s'en rapproche : Est il possible de faire une selection par intersection d'entité? Comme sur l'exemple joint je veux selectionner les carrés qui intersectent ma droite : http://imagik.fr/thumb/128013.jpeg Comment peut on faire ça s'il vous plait?merci d'avance.
Titifonky Posté(e) le 21 septembre 2009 Posté(e) le 21 septembre 2009 Bonjour, commande _Select avec l'option _t (trajet) www.le-metal.net, sur la métallerie
fabbcad Posté(e) le 21 septembre 2009 Auteur Posté(e) le 21 septembre 2009 Merci pour ta réponse mais, mais avec cette option je doit faire mon trajet avec la souris, or je souhaiterai que la selection se fasse par rapport à une droite qui existe déjà (polyligne)... Tu vois ce que je veux dire?
fabbcad Posté(e) le 22 septembre 2009 Auteur Posté(e) le 22 septembre 2009 Je vais plutôt créer un nouveau sujet pour cette dernière question. Je reste preneur d'infos pour une solution pour ma séléction de 16... ;)
rom1_am Posté(e) le 22 septembre 2009 Posté(e) le 22 septembre 2009 Bonjour, Si tu définis les points de début et de fin de ta polyligne, tu dois pouvoir utiliser la méthode Select avec l'option acSelectionSetCrossing? _______________________________R.A.Développeur AutoCAD C#.netwww.danialu.fr
fabbcad Posté(e) le 22 septembre 2009 Auteur Posté(e) le 22 septembre 2009 Hum, je ne connais pas cette fonction, peux tu m'en dire un peu plus sur son fonctionnement?
rom1_am Posté(e) le 23 septembre 2009 Posté(e) le 23 septembre 2009 Bonjour, L'exemple de l'aide sur la fonction Select montre le principe. Si tu utilises l'option acSelectionSetCrossing, les objets sélectionnés sont ceux qui sont à l'intérieur ou qui traverse la zone définie par les 2 points que tu mets en paramètres de la fonction Select. Sub Example_Select() ' This example adds members to a selection set, first by crossing and ' then by filtering for circles. ' Create the selection set Dim ssetObj As AcadSelectionSet Set ssetObj = ThisDrawing.SelectionSets.Add("SSET") ' Add all object to the selection set that lie within a crossing of (28,17,0) and ' (-3.3, -3.6,0) Dim mode As Integer Dim corner1(0 To 2) As Double Dim corner2(0 To 2) As Double mode = acSelectionSetCrossing corner1(0) = 28: corner1(1) = 17: corner1(2) = 0 corner2(0) = -3.3: corner2(1) = -3.6: corner2(2) = 0 ssetObj.Select mode, corner1, corner2 ' Add all the Circles to the selection set that lie within the crossing of (28,17,0) and ' (-3.3, -3.6,0) by filtering from the current drawing Dim gpCode(0) As Integer Dim dataValue(0) As Variant gpCode(0) = 0 dataValue(0) = "Circle" Dim groupCode As Variant, dataCode As Variant groupCode = gpCode dataCode = dataValue ssetObj.Select mode, corner1, corner2, groupCode, dataCode End Sub _______________________________R.A.Développeur AutoCAD C#.netwww.danialu.fr
fabbcad Posté(e) le 23 septembre 2009 Auteur Posté(e) le 23 septembre 2009 Ah ok... Alors c'est un bon début, il faudrait rajouter un bout pour lui dire que les valeurs des deux points correspondent à celles de la droite que je selectionne et ça serait bon! Est il possible de récupérer les coordonnées des extrêmités d'un droite selectionnée?
rom1_am Posté(e) le 24 septembre 2009 Posté(e) le 24 septembre 2009 Bonjour, Oui, il suffit d'utiliser line.startpoint et line.endpoint _______________________________R.A.Développeur AutoCAD C#.netwww.danialu.fr
fabbcad Posté(e) le 24 septembre 2009 Auteur Posté(e) le 24 septembre 2009 Merci rom1_am je vais essayer de faire quelque chose et je reviens si je bloque...
fabbcad Posté(e) le 25 septembre 2009 Auteur Posté(e) le 25 septembre 2009 Bon je bloque à nouveau... J'arrive pas à trouver la syntaxe pour lui dire de me retourner es coordonnées de l'objet selectionné. Je pensais à quelque chose comme ça mais ça bug...Pouvez-vous m'aider? Sub AfficheXY() Dim objSet As AcadSelectionSet On Error Resume Next ThisDrawing.SelectionSets("ss1").Delete On Error GoTo 0 Set objSet = ThisDrawing.SelectionSets.Add("ss1") objSet.SelectOnScreen StartPoint = objSet.AcadLine.StartPoint EndPoint = objSet.AcadLine.EndPoint MsgBox ("X = " & StartPoint) MsgBox ("Y = " & EndPoint) End Sub
rom1_am Posté(e) le 28 septembre 2009 Posté(e) le 28 septembre 2009 Bonjour, Si tu veux récupérer un seul objet, il vaut mieux utiliser "GetEntity" à la place de "SelectOnScreen". "SelectOnScreen" te renvoie un jeu de sélection, si tu veux les coordonnées du 1er objet du jeu de sélection, l'instruction est : StartPoint = objSet.Item(0).StartPoint StartPoint est un tableau 3d et non une valeur, pour avoir X, il faut écrire: MsgBox ("X = " & StartPoint(0)) A+ _______________________________R.A.Développeur AutoCAD C#.netwww.danialu.fr
fabbcad Posté(e) le 28 septembre 2009 Auteur Posté(e) le 28 septembre 2009 Merci Romain, tes explications me font avancer à chaque fois! J'ai finalisé le code mais y'a encore un petit hic... Je crois qu'il arrive à selectionner les objets, sauf que ce n'est pas "retranscrit" à l'écran! J'ai mis une msgbox pour vérifier ma sélection et il me dit qu'il y a des éléments selectionnés mais ils ne sont pas affiché à l'écran...D'ailleurs dans la fenêtre propriété j'ai toujours "aucune selection"Ai je oublié une étape? Sub SelectionXY() Dim returnObj As AcadObject Dim basePnt As Variant Dim startPoint As Variant Dim endPoint As Variant ThisDrawing.Utility.GetEntity returnObj, basePnt returnObj.Update startPoint = returnObj.startPoint endPoint = returnObj.endPoint 'MsgBox ("Xd = " & startPoint(0) & " Yd = " & startPoint(1)) 'MsgBox ("Xa = " & endPoint(0) & " Ya = " & startPoint(1)) Dim MaSelection As AcadSelectionSet Dim Pt1(0 To 2) As Double Dim Pt2(0 To 2) As Double Pt1(0) = startPoint(0) Pt1(1) = startPoint(1) Pt1(2) = 0 Pt2(0) = endPoint(0) Pt2(1) = endPoint(1) Pt2(2) = 0 ThisDrawing.SelectionSets("ss1").Delete Set MaSelection = ThisDrawing.SelectionSets.Add("ss1") MaSelection.Select acSelectionSetCrossing, Pt1, Pt2 MsgBox MaSelection.Count End Sub
fabbcad Posté(e) le 29 septembre 2009 Auteur Posté(e) le 29 septembre 2009 Mince j'ai parlé trop vite... J'ai essayé de remplacer la selection de la ligne par des valeurs lorsque mes données sont en lambert (ex x = 180 000 et y = 600 000), et alors le programme me selectionne tout!! Faut il changer la déclaration de certaines variables à ce moment là?
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant