Aller au contenu

Problème hachure


Lordevil007

Messages recommandés

Informations :

OS : Windows 7 64 bits

IDE : Visual studio 2010

AutoCAD : AutoCAD francais 64 bits

 

Bonjour à tous,

 

Je souhaite insérer une hachure,

- le contour extérieur de la hachure est une polyligne donc aucun problème

- le contour intérieur de la hachure est un bloc qui constitué aussi d'une polyligne en extérieur.

 

Lors de l'appelle de la méthode Addhatch

'Ici ma polyligne

outerLoop(0) = mPoly

'Ici mon bloc

innerLoop(0) = mBloc

 

mhatchPoly.AppendOuterLoop(outerLoop)

mhatchPoly.Evaluate()

mhatchPoly.AppendInnerLoop(innerLoop)

mhatchPoly.Evaluate()

 

Le problème est que cela me fait une erreur au passage de la ligne "mhatchPoly.AppendInnerLoop(innerLoop)", il n'aime pas le bloc (Il ne le considère pas comme un objet) et donc mon hachure l'ignore et donc je ne dispose pas de contour intérieur, avez vous une solution.

 

Merci d'avance

Lien vers le commentaire
Partager sur d’autres sites

Premièrement faire un test si ce n'est pas déjà fait avec une entité simple. Si ça ne marche pas, je pense qu'il faut cloner les entités contenus dans le bloc. Pour cela, tu peux utiliser Entity.GetTransformedCopy en lui passent la matrice 3D BlockReference.BlockTransform. Sachant que GetTransformedCopy ne fonctionne pas pour les polylignes (je ne sait pas si c'est pour tous les types ou uniquement pour les Polyline2d.

 

Les clones doivent être résidents dans la base de données si ta version d'AutoCAD est < 2012.

 

Pas simple comme affaire...

 

Dernier conseil, respecte bien l'ordre d'appel des différentes méthodes car il est important :

 

Hatch hatch = new Hatch();

// L'échelle, l'angle doivent être définis avant l'appel à SetHatchPattern

hatch.SetHatchPattern(HatchPatternType.PreDefined, "ANSI31");

space.AppendEntity(hatch);
tr.AddNewlyCreatedDBObject(hatch,true);

// Si associative, doit être placé après l'ajout des hachures à la base de données sinon exception
// eNotInDatabase
hatch.Associative = false;
hatch.AppendLoop((int)HatchLoopTypes.Default, objIds);

// Doit être appelé après SetHatchPattern d'après la doc. du SDK ObjectARX
// et après AppendLoop puisque cette méthode calcule les intersections
hatch.EvaluateHatch(true);

 

Mise à jour Oups, je n'avais pas vu que tu utilisais COM, le code ci-dessus est en C#/.NET. Alors là, je ne peut pas t'aider...

Maxence DELANNOY

Développement de compléments aux logiciels Autodesk : AutoCAD, Revit, Inventor, Vault, Navisworks... et autres logiciels de CAO

WIIP - http://wiip.fr

Lien vers le commentaire
Partager sur d’autres sites

Pour résoudre ce problème, j'ai pris getBoundingBox du bloc vue que le bloc est un rectangle avec du texte et des attributs dedans et j'ai redessiné une polyligne autour mais le problème si je déplace le bloc il faut que je le déplace avec la nouvelle polyligne car le contour intérieur est la nouvelle polyligne.

J'ai même essayer de récupérer lors de la création de bloc le contour bloc(car c'est une polyligne) en le stockant dans une variable mais même ceci ne marche pas

Lien vers le commentaire
Partager sur d’autres sites

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é