Aller au contenu

D\'une polyline a une région...


Messages recommandés

Posté(e)

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

Posté(e)

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 Variant

Dim poly As AcadLWPolyline

Dim poly_explosee As Variant

Dim region_element() As AcadEntity

Dim tour As Integer

Dim n As Integer

 

'sélection de la polyligne

ThisDrawing.Utility.GetEntity poly, pntbase, "sélectionnez la polyligne"

'Exploser la polyligne

poly_explosee = poly.Explode

'recupération du nombre d'objets qui composent la polyligne

n = UBound(poly_explosee)

'Dimensionnement de la variable qui reçoit la liste des éléments

ReDim region_element(n) As AcadEntity

'Affectation des éléments

For tour = 0 To n

Set region_element(tour) = poly_explosee(tour)

Next

'création de la région

region = ThisDrawing.ModelSpace.AddRegion(region_element)

'effacement pour ne conserver que la région

For tour = 0 To n

poly_explosee(tour).Delete

Next

poly.Delete

End 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 AcadLWPolyline

Dim region As Variant

Dim region_element(0) As AcadEntity

'sélection de la polyligne

ThisDrawing.Utility.GetEntity poly, pntbase, "sélectionnez la polyligne"

'Ouvrir la polyligne attention si option clore a été utilisée.

poly.Closed = False

'Affecter la polyligne

Set region_element(0) = poly

'création de la région

region = ThisDrawing.ModelSpace.AddRegion(region_element)

poly.Delete

End Sub

 

[Edité le 7/3/2006 par nazemrap]

Posté(e)

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 & region2

Afin de soustraire la region2 a la region1.

 

Si quelqu'un a des infos ou une piste a creuser, je suis preneur!

Posté(e)

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 AcadLWPolyline

Dim poly_ef As AcadLWPolyline

Dim region As Variant

Dim region_element(1) As AcadEntity

Dim selec As AcadSelectionSet

Dim sel_ctrl As AcadSelectionSet

Dim n As Integer

 

'création de la sélection des polylignes

On Error GoTo ici

Set selec = ThisDrawing.SelectionSets.Add("truc")

selec.SelectOnScreen 'appliquer éventuellement un filtre

 

'Boucle sur la selection

For Each poly In selec

'Ouvrir la polyligne attention si option clore a été utilisée.

poly.Closed = False

'Affecter la polyligne

Set region_element(n) = poly

n = n + 1

Next

 

'création de la région

region = ThisDrawing.ModelSpace.AddRegion(region_element)

 

'affectation

Dim reg1 As AcadRegion

Dim reg2 As AcadRegion

Set reg1 = region(0)

Set reg2 = region(1)

'soustraction

reg1.Boolean acSubtraction, reg2

 

'efface

For n = 0 To 1

region_element(n).Delete

Next

 

ici:

ThisDrawing.SelectionSets("truc").Delete

 

End Sub

 

nazemrap

 

Posté(e)

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]

Posté(e)

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 continuation

nazemrap

Posté(e)

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

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité