PhilBat Posté(e) le 1 février 2018 Posté(e) le 1 février 2018 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'avancePhil.
(gile) Posté(e) le 1 février 2018 Posté(e) le 1 février 2018 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
(gile) Posté(e) le 1 février 2018 Posté(e) le 1 février 2018 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
PhilBat Posté(e) le 2 février 2018 Auteur Posté(e) le 2 février 2018 Merci Gile pour ces précisions.Mais comment intégrer ces petites classes dérivées de textbox dans un projet existant.Merci...Phil
(gile) Posté(e) le 2 février 2018 Posté(e) le 2 février 2018 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
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