Lordevil007 Posté(e) le 30 mai 2012 Posté(e) le 30 mai 2012 Informations :OS : Windows 7 64 bitsIDE : Visual studio 2010AutoCAD : 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
Maxence DELANNOY Posté(e) le 30 mai 2012 Posté(e) le 30 mai 2012 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 DELANNOYDéveloppement de compléments aux logiciels Autodesk : AutoCAD, Revit, Inventor, Vault, Navisworks... et autres logiciels de CAOWIIP - http://wiip.fr
Lordevil007 Posté(e) le 30 mai 2012 Auteur Posté(e) le 30 mai 2012 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
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