Aller au contenu

Création polyligne avec épaisseur modifiable


PhilBat

Messages recommandés

Bonjour à tous,

je désire créer une polyligne avec une épaisseur modifiable via un contrôle form textbox.

Mais l'utilisation de AddVertexAt me pose problème pour intégrer cette donnée :

l'épaisseur est de 1 pour une valeur entrée de 0.1 ou 0,1 ou même 0.01.

Voici un bout de code :

  Private Sub TrPoly(ByVal p1 As Point3d, ByVal p2 As Point3d, ByVal p3 As Point3d, ByVal p4 As Point3d)
       ' remplace dans une chaine le '.' ou ',' par le caractère de remplacement (ici ',')
       Dim epL As Double = CDbl(OutilsGpO.OutilsGpO.Virg(txtWidth.Text, ","))
       Dim acDoc As Document = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument
       Dim ed As Editor = acDoc.Editor
       Dim Db As Database = acDoc.Database
       'Dim ucs As Matrix3d = ed.CurrentUserCoordinateSystem
       'Dim curUCS As CoordinateSystem3d = ucs.CoordinateSystem3d
       'Dim acVec2dAng As Vector2d = New Vector2d(curUCS.Xaxis.X, curUCS.Xaxis.Y)

       Dim AcCalque As String = OutilsGpO.OutilsGpO.ThisDrawing.ActiveLayer.Name
       Dim Doc As New DocGpO.DocGpO
       'Dim plane As New Plane()
       Using acDoc.LockDocument()
           Using Tr As Transaction = Db.TransactionManager.StartTransaction()
               Dim acLyrTbl As LayerTable = Tr.GetObject(Db.LayerTableId, OpenMode.ForRead)
               Dim lt As LayerTable = DirectCast(Tr.GetObject(Db.LayerTableId, OpenMode.ForRead), LayerTable)
               ' Création du calque s'il n'existe pas 
               If Not lt.Has("-GpO_Distances") Then
                   Using ltr As New LayerTableRecord()
                       ltr.Name = "-GpO_Distances"
                       ltr.Color = Autodesk.AutoCAD.Colors.Color.FromColorIndex(ColorMethod.ByAci, 2)
                       lt.UpgradeOpen()
                       lt.Add(ltr)
                       Tr.AddNewlyCreatedDBObject(ltr, True)
                   End Using
               End If

               '' Open the Block table for read
               Dim acBlkTbl As BlockTable = Tr.GetObject(Db.BlockTableId, OpenMode.ForRead)

               '' Open the Block table record Model space for write
               Dim acBlkTblRec As BlockTableRecord = Tr.GetObject(acBlkTbl(BlockTableRecord.ModelSpace), OpenMode.ForWrite)

               'Dim TPoly As Polyline = New Polyline()

               'TPoly.SetDatabaseDefaults()

               Dim pt As Point3d = New Point3d(p4.X, p3.Y, 0.0#)
               'Dim pt As Point2d = PolarPoints(New Point2d(p1.X, p1.Y), acVec2dAng.Angle, dx)
               Doc.TransUCStoWCS(pt)
               Using TPoly As Polyline = New Polyline()
                   TPoly.AddVertexAt(0, New Point2d(p1.X, p1.Y), 0.0, epL, epL)
                   TPoly.AddVertexAt(1, New Point2d(pt.X, pt.Y), 0.0, epL, epL)
                   TPoly.AddVertexAt(2, New Point2d(p2.X, p2.Y), 0.0, epL, epL)
                   '' Add the new object to the block table record and the transaction
                   acBlkTblRec.AppendEntity(TPoly)
                   Tr.AddNewlyCreatedDBObject(TPoly, True)
                   TPoly.Layer = "-GpO_Distances"
               End Using
               Db.Clayer = acLyrTbl(AcCalque)
               Tr.Commit()
           End Using
       End Using
   End Sub

Merci d'avance

Phil.

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Le code que tu montres ne permet pas de déterminer ton problème (de plus il est plein de lignes commentées qui n'en facilite pas la lecture).

Le problème semble venir de epL qui est défini ici :

Dim epL As Double = CDbl(OutilsGpO.OutilsGpO.Virg(txtWidth.Text, ","))

Or on ne sait rien de la méthode OutilsGpO.OutilsGpO.Virg()...

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Pour récupérer des valeurs numériques (entières ou réelles) depuis un TextBox, j'avais fait ces petites classes qui dérivent de TextBox et utilisent une validation du texte entré.

La propriété Value, permet de récupérer directement la valeur numérique (Integer ou Double)

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Puisque ton projet est (hélas) écrit en VB, il faut d'abord que tu convertisses le code de NumericBox en VB, ça devrait bien se passer avec Telerik.

 

Ensuite, dans ton projet tu fais Ajouter > Classe..., tu renommes la classe NumericBox dans la boite de dialogue et tu colles le code de la classe dans ce fichier.

 

Tu auras peut-être quelques corrections à faire. Tu peux supprimer l'espace de nom ControlLibrary pour que la classe appartienne au même espace de nom que ton projet (je n'ai jamais vraiment compris comment VB gérait les espaces de nom).

 

Visual Studio devrait reconnaitre la classe comme une définition de UserControl (puisqu'elle dérive de TextBox) et la proposer dans la Boite à outils (une génération du projet est peut-être nécessaire pour qu'elle apparaisse).

 

http://gilecad.azurewebsites.net/Resources/NumericBox.png

 

Il suffit ensuite de faire un glisser / déposer de NumericBox dans ton formulaire comme avec n'importe quel autre composant.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

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é