Aller au contenu

PhilBat

Membres
  • Compteur de contenus

    108
  • Inscription

  • Dernière visite

Tout ce qui a été posté par PhilBat

  1. Ok merci pour la réponse, mais l'usage du Tag (au lieu de value ??) et du type string pose problème pour palier à tous les cas de figures de codage des couleurs. Salutations Philippe
  2. Bonjour, je désire remplir un contrôle dataGridView avec les noms des calques et les couleurs des calques du Dwg courant. Grâce à un bouton je change la couleur de la ligne (cellule) sélectionnée via une boite de dialogue standard de sélection des couleurs (voir si-dessus). Maintenant la difficulté est de changer toutes les couleurs de chaque calque suivant ce code : private void btnOK_Click(object sender, EventArgs e) { var doc = AcAp.DocumentManager.MdiActiveDocument; var db = doc.Database; var ed = doc.Editor; using (Transaction tr = db.TransactionManager.StartTransaction()) { LayerTable acLyrTbl = tr.GetObject(db.LayerTableId, OpenMode.ForRead) as LayerTable; foreach (ObjectId acObjId in acLyrTbl) { LayerTableRecord acLyrTblRec = tr.GetObject(acObjId, OpenMode.ForRead) as LayerTableRecord; if (!acLyrTblRec.IsDependent) { foreach (DataGridViewRow row in dataGridView1.Rows) { if (!row.IsNewRow) { if (row.Cells[0].Value.ToString() == acLyrTblRec.Name) { Autodesk.AutoCAD.Colors.Color c = Autodesk.AutoCAD.Colors.Color.FromNames(row.Cells[2].Value.ToString()); acLyrTblRec.UpgradeOpen(); acLyrTblRec.Color = c; } } } } } tr.Commit(); } this.Close(); } Évidemment la ligne ...Color.FromNames ne marche pas. Avez-vous une solution pour palier à tous les cas de couleurs ?... Merci d'avance Philippe
  3. Ok Gile, cela marche parfaitement, je te remercie pour ton aide précieuse. Salutations
  4. Après réinstallation de Visual Studio 2022 , je retrouve enfin mes contrôles dans la boite à outils, allez savoir pourquoi ... Maintenant j'essaye d’exploiter le modèle de projet pour AutoCAD 2025, mais le nom $safeprojectname$ pose problème : il n'existe pas dans le contexte actuel. (message dans la liste d'erreurs). Bye
  5. Bonjour, oui je confirme que c'est valable en C# et VB. suis-je le seul a avoir ce problème ?
  6. Salut, après vérification, le double clic marche, toutes les lignes indiquées ci-dessus sont présentes dans le fichier csproj ou vbproj ... mais la boite à outils reste vide avec l'indication suivante 'il n'existe aucun contrôle utilisable dans ce groupe. Faites glisser un élément ici pour l'ajouter à la boite à outils.' ... A l'heure actuelle, je ne peux plus faire évoluer mes projets (ajout de contrôle ). Sauf peut-être évoluer en WPF mais c'est dommage et représente un énorme travail. Merci. Bye
  7. Bonjour, merci pour l'info. Suite à la migration, je n'ai plus d'accès aux contrôles windows forms dans la boite à outils de Visual Studio 2022. (je n'utilise pas le système WPF et je suis bien dans l'onglet conception de la fenêtre). Est-il possible d'avoir un exemple pour résoudre ce problème ?. Merci d'avance. Salutations
  8. Bonjour, Ayant effectué la migration de toutes mes routines, non sans difficulté, j’ai conçu un programme d’installation de celles-ci qui s'adapte en fonction de la version d’AutoCAD. Ce programme vérifie si la bonne version du framework est installée sur le PC en examinant la base de registre Windows. Dois-je faire de même pour le .NET Core 8.0 ? Si oui, peut-on effectuer un test sur la présence de la clé suivante : ‘HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET Core\Shared Framework\v8.0\8.0.4’ Salutations.
  9. Rebonjour, puisque sans réponse, peut-être agir sur les propriétés du calque. Merci d'avance pour une proposition. Salutations Phil.
  10. Bonjour, je cherche un moyen de créer une polyligne 3d avec plusieurs segments tout en imposant une épaisseur et une couleur. (en c# bien sur). Merci d'avance. Phil.
  11. Bonjour, un grand merci pour vos réponses, je n'ai pas encore testé pour cause de vacances 😎. Je vous tiens au courant dès que possible. Salutations. Phil.
  12. Bonjour, pour moi c'est la définition je pense , le 1er bloc est '-Depart01.dwg' et je veux le remplacer par '-Depart01v3.dwg' tout en conservant certaines valeurs des attributs portants le même nom bien sûr. Bonne fin de journée. Phil -Depart01.dwg -Depart01v3.dwg
  13. Bonjour, Dans un dwg, j'ai un bloc avec uniquement des attributs et je cherche à le redéfinir par un autre bloc, avec que des attributs lui aussi, tout en conservant les valeurs d'attributs en commun... Est-ce possible en langage C# ? Merci d'avance. Phil.
  14. Merci, Ok pour 'DWG to PDF.pc3', mais je crée plusieurs pdf (1 /folio) qui s'accumulent dans le liste d'attente de PdFCreator que je fusionne à la fin. Cette fonctionnalité est indispensable pour moi. Salutations Philippe
  15. Bonjour à tous, depuis l'installation de AutoCAD 2021, j'ai des soucis de création de fichier pdf, celui-ci est incomplet : seule une petite zone rectangulaire en bas à gauche demeure (de dimensions changeantes) et le reste est blanc. Le phénomène constaté est aléatoire mais se reproduit souvent et ce quelque soit les formats (A4, A0 et plus...), plusieurs tentatives sont nécessaires pour avoir un résultat satisfaisant. PDFCreator est à jour : 4.1.0 Sincères Salutations Philippe
  16. Bon je réponds à moi même, il faut rajouter la gestion du PNG dans la fonction GetThumbnail (type 6) ... ElseIf udtRec.bytType = 6 Then ' PNG Preview (2013 file format) fs.Seek(udtRec.lngStart, SeekOrigin.Begin) Using ms As New MemoryStream fs.CopyTo(ms, udtRec.lngStart) Dim img As Image = Image.FromStream(ms) bmp = New Bitmap(img) End Using GoTo Exit_Here Else If udtRec.bytType = 3 Then GoTo Exit_Here End If End If ... Salutations Phil.
  17. Bonjour à tous, travaillant sur Autocad 2020, je constate que cette fonction ici ne semble plus marcher. Je sauvegarde par défaut les dwg en version 2013. Pouvez-vous me confirmer ce problème. Merci. Phil.
  18. Autant pour moi, j'ai cru que cela ne marchait plus... Merci Gile
  19. Bonjour à tous existe t-il une version acThumbnailReader.dll pour AutoCAD 2018 ? Merci d'avance. Phil.
  20. Merci Gile pour ces précisions. Mais comment intégrer ces petites classes dérivées de textbox dans un projet existant. Merci... Phil
  21. 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.
  22. Merci Gile pour ces précisions. Effectivement le code ne semble pas être optimisé, je vais essayer de rectifier cela dès que possible :huh:
  23. Voici un extrait de mon code qui me permet de copier des entités (version maison) auquel je voudrais rajouter la fonctionnalité suivante : adaptation automatique de l'angle en fonction de l'entité située sous le curseur de la souris à l'écran lors de la saisie du deuxième point. Option Explicit On Imports Autodesk.AutoCAD.Runtime Imports Autodesk.AutoCAD.ApplicationServices Imports AcApp = Autodesk.AutoCAD.ApplicationServices.Application Imports Autodesk.AutoCAD.DatabaseServices Imports Autodesk.AutoCAD.EditorInput Imports Autodesk.AutoCAD.Geometry Imports Autodesk.AutoCAD.GraphicsInterface Imports Autodesk.AutoCAD.Interop Imports Autodesk.AutoCAD.Interop.Common Namespace CopyBloc Public Class Commands Private NameBloc As String Private ptB As Point3d <CommandMethod("CopyBloc", CommandFlags.UsePickSet)> _ Public Sub CopyBloc() Dim adoc As Document = AcApp.DocumentManager.MdiActiveDocument Dim db As Database = adoc.Database Dim ed As Editor = adoc.Editor Dim idArray() As ObjectId Dim blkRef As BlockReference Dim ucs As Matrix3d = ed.CurrentUserCoordinateSystem Dim ents As New List(Of Entity)() Dim acBlkTbl As BlockTable Dim acBlkTblRec As BlockTableRecord Using tr As Transaction = db.TransactionManager.StartTransaction() Dim res As PromptSelectionResult = ed.GetSelection() ' ------ sortie boucle si pas trouvé If (res.Status <> PromptStatus.OK) Then ed.WriteMessage(vbLf & "Failed to select entity [Lg..-CopyBloc]") Return End If Dim acSSet As SelectionSet = res.Value idArray = acSSet.GetObjectIds ' Constituer une liste des objets sélectionnés et les mettre en surbrillance For Each blkId As ObjectId In idArray Dim ent As Entity = DirectCast(tr.GetObject(blkId, OpenMode.ForWrite), Entity) ent.Highlight() ents.Add(ent) Next tr.Dispose() End Using Dim pprB As PromptPointResult = ed.GetPoint(vbLf & "Point de Base de copie : ") If pprB.Status = PromptStatus.OK Then ptB = pprB.Value.TransformBy(ucs) ' Créer une nouvelle instance de SelectionJig Dim jig As New SelectionJig(ents, ptB) Do ' Inviter l'utilisateur à spécifier le second point Dim pprD As PromptPointResult = DirectCast(ed.Drag(jig), PromptPointResult) If pprD.Status <> PromptStatus.OK Then Exit Do Dim ptD As Point3d = pprD.Value ' ---- Dim acPt3d As Point3d = New Point3d(ptB.X, ptB.Y, ptB.Z) Dim acVec3d As Vector3d = acPt3d.GetVectorTo(New Point3d(ptD.X, ptD.Y, ptD.Z)) Using tr As Transaction = db.TransactionManager.StartTransaction() '' Open the Block table for read acBlkTbl = tr.GetObject(db.BlockTableId, OpenMode.ForRead) '' Open the Block table record for write acBlkTblRec = tr.GetObject(acBlkTbl(BlockTableRecord.ModelSpace), OpenMode.ForWrite) ' ---- Dim mat As Matrix3d = Matrix3d.Displacement(ptB.GetVectorTo(ptD)) If ents.Count > 1 Then ' entitée > 1 sélectionnée For Each ent As Entity In ents ' l'entitée est un bloc Dim acEntClone As Entity acEntClone = ent.Clone acEntClone.TransformBy(mat) acBlkTblRec.AppendEntity(acEntClone) tr.AddNewlyCreatedDBObject(acEntClone, True) Next 'OutilsGpO.OutilsGpO.ThisDrawing.Regen(AcRegenType.acActiveViewport) Else ' une seule entitée sélectionnée .... End If tr.Commit() End Using Loop End If ' supprimer la surbrillance For Each ent As Entity In ents ent.Unhighlight() Next End Sub End Class End Namespace Salutations Philippe
  24. Ok pas simple mon affaire... Par exemple je veux copier un texte et lors de la demande du deuxième point de destination si je survole avec la souris une ligne avec un angle de 90° je veux que l’aperçu du texte au droit du curseur de la souris face une rotation de 90° comme la ligne, si je valide ce point le texte sera copier avec un angle de 90°.... Philippe.
  25. Bonjour à tous, ayant redéfini la commande 'copier', est-il possible lors de la demande d'un point de destination (avec PromptPointResult) d'avoir les propriétés (angle d'une ligne) d'un objet que l'on survole avec la souris afin d'adapter l’aperçu (SelectionJig) de l'objet copié :blink: . Merci d'avance... Philippe.
×
×
  • 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é