CwaM Posté(e) le 7 mars 2006 Posté(e) le 7 mars 2006 Bonjour a tous,Et tout d'abord, merci pour l'aide que vous prodiguez a tout le monde en ce qui concerne vba/autocad. Apres avoir passé en revue les 10 pages du forum pour les différents problemes que j'avais, j'ai un probleme pas encore posé! Je débute en vba (depuis 1 semaine), pareil sur AutoCAD. Et... Je ne sais pas du tout comment je pourrai transformer une polyline fermée (sélectionnée par l'utilisateur) en région.Aussi, y a t il une possibilité d'identifier différentes régions afin de pouvoir effectuer différentes opérations en les manipulant? Merci de votre aide
nazemrap Posté(e) le 7 mars 2006 Posté(e) le 7 mars 2006 Bonjour.La polyligne fermée empêche de reconnaitre une liste d'entités qui pourraient constituer la région.Voici donc un exemple qui décompose la polyligne pour la reconstituer en région. Public Sub poly_en_region()Dim region As VariantDim poly As AcadLWPolylineDim poly_explosee As VariantDim region_element() As AcadEntityDim tour As IntegerDim n As Integer 'sélection de la polyligneThisDrawing.Utility.GetEntity poly, pntbase, "sélectionnez la polyligne"'Exploser la polylignepoly_explosee = poly.Explode'recupération du nombre d'objets qui composent la polylignen = UBound(poly_explosee)'Dimensionnement de la variable qui reçoit la liste des élémentsReDim region_element(n) As AcadEntity'Affectation des élémentsFor tour = 0 To nSet region_element(tour) = poly_explosee(tour)Next'création de la régionregion = ThisDrawing.ModelSpace.AddRegion(region_element)'effacement pour ne conserver que la régionFor tour = 0 To npoly_explosee(tour).DeleteNextpoly.DeleteEnd Sub Je pense qu'il y a mieux à faire, mais si cela peut te donner une piste...Je ne comprend pas trop l'objet de la seconde question.Amicalement nazemrap Je viens de tester autre chose, plus court.Public Sub version2()Dim poly As AcadLWPolylineDim region As VariantDim region_element(0) As AcadEntity'sélection de la polyligneThisDrawing.Utility.GetEntity poly, pntbase, "sélectionnez la polyligne"'Ouvrir la polyligne attention si option clore a été utilisée.poly.Closed = False'Affecter la polyligneSet region_element(0) = poly'création de la régionregion = ThisDrawing.ModelSpace.AddRegion(region_element)poly.DeleteEnd Sub [Edité le 7/3/2006 par nazemrap]
CwaM Posté(e) le 8 mars 2006 Auteur Posté(e) le 8 mars 2006 Merci pour cette aide précieuse, c'est exactement ce que je cherchais! En ce qui concerne la deuxieme question:Maintenant que j'ai transformé chaque polyligne en region, j'ai en mémoire un tableau de régions.Je voudrais a présent effecture l'opréation "soustraction"Je cherche (mais ne trouve pas) comment faire un genre de thisdrawing.sendcommand "soustraction" & vbcr & region1 & vbcr & region2Afin de soustraire la region2 a la region1. Si quelqu'un a des infos ou une piste a creuser, je suis preneur!
nazemrap Posté(e) le 8 mars 2006 Posté(e) le 8 mars 2006 Bonjour. Sendcommand reviendrait à travailler sur la ligne de commande en sélectionnant les régions.Voici un essai avec le même programme depuis une sélection de 2 polylignes, qui effectue une soustraction.A adapter aux circonstances... Public Sub version3()Dim poly As AcadLWPolylineDim poly_ef As AcadLWPolylineDim region As VariantDim region_element(1) As AcadEntityDim selec As AcadSelectionSetDim sel_ctrl As AcadSelectionSetDim n As Integer 'création de la sélection des polylignesOn Error GoTo iciSet selec = ThisDrawing.SelectionSets.Add("truc")selec.SelectOnScreen 'appliquer éventuellement un filtre 'Boucle sur la selectionFor Each poly In selec'Ouvrir la polyligne attention si option clore a été utilisée.poly.Closed = False'Affecter la polyligneSet region_element(n) = polyn = n + 1Next 'création de la régionregion = ThisDrawing.ModelSpace.AddRegion(region_element) 'affectationDim reg1 As AcadRegionDim reg2 As AcadRegionSet reg1 = region(0)Set reg2 = region(1)'soustractionreg1.Boolean acSubtraction, reg2 'effaceFor n = 0 To 1region_element(n).DeleteNext ici:ThisDrawing.SelectionSets("truc").Delete End Sub nazemrap
CwaM Posté(e) le 8 mars 2006 Auteur Posté(e) le 8 mars 2006 Parfait! Aussi, qqn saurait il me dire ou trouver toutes ces méthodes (acSubstraction et cie), car ca me ferait pas de mal et ca m'éviterait de vos poser toutes ces questions Merci pour ton aide nazemrap! [Edité le 8/3/2006 par CwaM]
nazemrap Posté(e) le 8 mars 2006 Posté(e) le 8 mars 2006 Hello. y a pas de quoi.Tu sais qu'il y a plein d'exemples dans vba autocad.Penses à utiliser l'explorateur d'objets ça aide bien.Bonne continuationnazemrap
CwaM Posté(e) le 14 mars 2006 Auteur Posté(e) le 14 mars 2006 Encore une question^^J'ai beau cherché dans l'aide, je ne vois aucune méthode permettant de savoir si un point est situé dans une région ou non.Est ce normal si je n'en trouve pas ou dois je apprendre a mieux chercher? :( Si qqn peut m'aider et me renseigner svp... :P
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