Aller au contenu

(gile)

Moderateurs
  • Compteur de contenus

    12 247
  • Inscription

  • Dernière visite

  • Jours gagnés

    208

Tout ce qui a été posté par (gile)

  1. As-tu bien suivi la procédure ? - Modifier les chemins dans Properties\launchSettings.json et AutocadR25Plugin.csproj (et éventuellement les noms dans MyTemplate.vstemplate). - Coller le dossier dans Visual Studio 2022\Templates\ProjectTemplates. - Démarrer un nouveau projet en choisissant ce modèle.
  2. À ma connaissance, oui. As-tu essayer de créer un nouveau projet pour AutoCAD 2025 (éventuellement à partir de ce modèle de projet) et d'y ajouter une boite de dialogue ? Tu peux coller le fichier DialogBox.zip ci-joint dans le dossier : ..\Documents\Visual Studio 2022\Templates\ItemTemplates\C#, et faire : Ajouter > Nouvel élément > Boite de dialogue. DialogBox.zip
  3. Je me permet d'insister. vlax-curve-getClosestPointToProjection ne renvoie pas le même résultat que vlax-curve-getClosestPointTo. Essaye cette routine. (defun c:test (/ pl dxf pt) (if (and (setq pl (car (entsel "\nSélectionnez une polyligne 3d: "))) (= (cdr (assoc 0 (setq dxf (entget pl)))) "POLYLINE") (= 8 (logand 8 (cdr (assoc 70 dxf)))) ) (while (setq pt (getpoint "\nSpécifiez un point: ")) (setq pt (trans pt 1 0)) (entmake (list '(0 . "LINE") '(62 . 3) (cons 10 pt) (cons 11 (vlax-curve-getClosestPointToProjection pl pt '(0 0 1) ) ) ) ) (entmake (list '(0 . "LINE") '(62 . 1) (cons 10 pt) (cons 11 (vlax-curve-getClosestPointTo pl pt ) ) ) ) ) ) (princ) )
  4. Est-ce que ça vaut pour tous tes projets ? Je vois que tu dis : ".csproj ou .vbporj", le problème existe-t-il aussi bien en C# qu'en VB ?
  5. Salut, Et avec vlax-curve-getClosestPointToProjection ? D'après mes tests, ça fonctionne comme attendu.
  6. (gile)

    Modification de pièce 3D

    La bonne vieille commande 3DROTATION (à ne pas confondre avec ROTATION3D, plus récente) propose une option 2points pour spécifier l'axe de Rotation et une option référence.
  7. Salut, Je n'ai pas eu ce genre de problème suite aux migrations de nombreux projets (Windows Forms ou WPF). Vérifie bien que dans le fichier SDK / .csproj (il s'ouvre dans Visual Studio par double clic sur le nom du projet d'ans l'explorateur de solutions), il y ait une balise <UseWindowsForms>true</UseWindowsForms> dans le premier nœud <PropertyGroup> ou que tu aies bien ajouté une balise : <ItemGroup> <FrameworkReference Include="Microsoft.WindowsDesktop.App" /> </ItemGroup>
  8. (gile)

    Modification de pièce 3D

    Salut, Le cône est-il un Solide 3d (on dirait une surface) ?
  9. Salut, AutoCAD installe la version de .NET qu'il utilise (.NET 8.0 pour AutoCAD 2025, .NET Framework 4.8 pour 2021-2024, .NET Framework 4.7 pour 2019-2020, etc.), donc tu n'as pas besoin de vérifier la version de .NET.
  10. Salut, Tu peux savoir si un calque est imprimable avec le groupe DXF 290 ou la propriété IsPlottable (1 = imprimable, 0 = non-imprimable). ((lambda (/ layer name lst) (while (setq layer (tblnext "layer" (not layer))) (setq name (cdr (assoc 2 layer)) lst (cons (cons name (cdr (assoc 290 (entget (tblobjname "layer" name)))) ) lst ) ) ) (reverse lst) ) ) ((lambda (/ layer name lst) (while (setq layer (tblnext "layer" (not layer))) (setq name (cdr (assoc 2 layer)) lst (cons (cons name (getpropertyvalue (tblobjname "layer" name) "IsPlottable") ) lst ) ) ) (reverse lst) ) )
  11. @didier Si on accepte le sens anglo-saxon pour "intelligence", alors la question : peut se lire : l'intelligence artificielle est-elle un traitement des renseignements collectées ? ou plus crument, l'intelligence artificielle est-elle de l'espionnage ? Alors la réponse est clairement oui !
  12. Salut, Pour moi la question n'est pas tant de savoir si des machines peuvent être "intelligente" ou avoir une "conscience", mais plutôt : le souhaite-t-on vraiment ? Et je trouve effrayant de lire que c'est "inévitable" parce que ça signifierait que nous n'avons déjà plus de prise sur l'accélération de l'artificialisation globale de notre environnement, que la "technoscience" est le nouveau Dieu et les agents conversationnels ses prédicateurs. Je voudrais juste citer, à ce sujet, Aurélien Barrau (astrophysicien et philosophe) :
  13. J'ai fait un petit document qui décrit pas à pas la mise à jour d'un projet de plugin pour AutoCAD 2024 ou inférieur vers AutoCAD 2025. Migration_NET_Core.pdf est aussi disponible sur cette page.
  14. AutoCAD 2025 supporte .NET Core 8.0 en place de .NET Framework. Il s'agit d'une rupture de compatibilité pour les développements .NET qui doivent être mis à jour pour fonctionner avec AutoCAD 2025 (et versions ultérieures). J'ai d'ores et déjà migré les applications sur Autodesk App Store et les dépôts sur GitHub: GeometryExtensions Gile.Inspector Gile.AutoCAD.Extension AutoCAD-Cshap-Project-Template AutoCAD-Fsharp-Project-Template Merci de me signaler si je dois le faire pour d'autres programmes .NET publiés sur CADxp. Je peux aussi essayer de faire un petit tuto sur la migration de projets existants si besoin.
  15. Salut, Essaye de lancer l'expression suivante et de sélectionner une hachure gradient, tu auras ta réponse pour modifier le LISP. (vla-get-PatternName (vlax-ename->vla-object (car (entsel))))
  16. Si on veut éviter d'appeler les commandes natives, on accède au SCU courant par la propriété CurrentCoordinateSystem de la classe Editor. Le type de cette propriété est Matrix3d. Mais généralement en programmation on utilise peu les commandes natives donc on ne s'intéresse au SCU que pour transformer les points récupérés par ou passés aux méthodes Editor.Getxxx. (command "_UCS" "_WORLD") la matrice de transformation correspondant au Système de coordonnées général est la matrice identité. var ed = Application.DocumentManager.MdiActiveDocument.Editor; ed.CurrentUserCoordinateSystem = Matrix3d.Identity; (command "_UCS" "_3P" point1 point2 "") , ici il faut construire la matrice. var ed = Application.DocumentManager.MdiActiveDocument.Editor; var xAxis = point1.GetVectorTo(point2).GetNormal(); var yAxis = Vector3d.ZAxis.CrossProduct(xAxis).GetNormal(); var ucsMatrix = Matrix3d.AlignCoordinateSystem( Point3d.Origin, Vector3d.XAxis, Vector3d.YAxis, Vector3d.ZAxis, point1, xAxis, yAxis, Vector3d.ZAxis); ed.CurrentUserCoordinateSystem = ucsMatrix; Les systèmes de coordonnées nommés sont enregistrés dans la "table des SCUs" : UcsTable. (command "_UCS" "_R" nomscu) var ed = Application.DocumentManager.MdiActiveDocument.Editor; var db = HostApplicationServices.WorkingDatabase; using (var tr = db.TransactionManager.StartTransaction()) { var ucsTable = (UcsTable)tr.GetObject(db.UcsTableId, OpenMode.ForRead); if (ucsTable.Has(nomscu)) { var ucs = (UcsTableRecord)tr.GetObject(ucsTable[nomscu], OpenMode.ForRead); ed.CurrentUserCoordinateSystem = Matrix3d.AlignCoordinateSystem( Point3d.Origin, Vector3d.XAxis, Vector3d.YAxis, Vector3d.ZAxis, ucs.Origin, ucs.XAxis, ucs.YAxis, ucs.XAxis.CrossProduct(ucs.YAxis).GetNormal()); } tr.Commit(); } (command "_UCS" "_X" -100.00) , en admettant que -100.00 correspond bien à -100 grades, soit 1.5 * PI radians, on combine la matrice de rotation autour de l'axe X avec la matrice courante. var ed = Application.DocumentManager.MdiActiveDocument.Editor; var ucsMat = ed.CurrentUserCoordinateSystem; var ucs = ucsMat.CoordinateSystem3d; ed.CurrentUserCoordinateSystem = Matrix3d.Rotation(Math.PI * 1.5, ucs.Xaxis, ucs.Origin) * ucsMat; Pour les vues, on utilise des instances de la classe ViewTableRecord telle que renvoyées par la méthode Editor.GetCurrentView ou passées à la méthode Editor.SetCurrentView. (command "_PLAN" "") var ed = Application.DocumentManager.MdiActiveDocument.Editor; var ucs = ed.CurrentUserCoordinateSystem.CoordinateSystem3d; using (var view = ed.GetCurrentView()) { var dcsToWcs = Matrix3d.Rotation(-view.ViewTwist, view.ViewDirection, view.Target) * Matrix3d.Displacement(view.Target.GetAsVector()) * Matrix3d.PlaneToWorld(view.ViewDirection); var centerPoint = new Point3d(view.CenterPoint.X, view.CenterPoint.Y, 0.0) .TransformBy(dcsToWcs); view.ViewDirection = ucs.Zaxis; view.ViewTwist = ucs.Xaxis.GetAngleTo(Vector3d.XAxis, ucs.Zaxis); var wcsToDcs = Matrix3d.WorldToPlane(view.ViewDirection) * Matrix3d.Displacement(view.Target.GetAsVector().Negate()) * Matrix3d.Rotation(view.ViewTwist, view.ViewDirection, view.Target); centerPoint = centerPoint.TransformBy(wcsToDcs); view.CenterPoint = new Point2d(centerPoint.X, centerPoint.Y); ed.SetCurrentView(view); } (command "_DVIEW" "" "_PO" ptTarget ptCamera "_CL" "_B" (* -1 sectionHalfDepth) "_CL" "_F" sectionHalfDepth "") var ed = Application.DocumentManager.MdiActiveDocument.Editor; using (var view = ed.GetCurrentView()) { view.Target = ptTarget; view.ViewDirection = ptTarget.GetVectorTo(ptCamera); view.BackClipDistance = -sectionHalfDepth; view.BackClipEnabled = true; view.FrontClipDistance = sectionHalfDepth; view.FrontClipEnabled = true; view.FrontClipAtEye = false; var wcsToDcs = Matrix3d.WorldToPlane(view.ViewDirection) * Matrix3d.Displacement(view.Target.GetAsVector().Negate()) * Matrix3d.Rotation(view.ViewTwist, view.ViewDirection, view.Target); var centerPoint = ptTarget.TransformBy(wcsToDcs); view.CenterPoint = new Point2d(centerPoint.X, centerPoint.Y); ed.SetCurrentView(view); }
  17. Salut, La réponse simple est de créer une instance de l'éditeur : Editor ed = Application.DocumentManager.MdiActiveDocument.Editor; puis d'appeler les commandes commandes comme en LISP: ed.Command("_UCS", "_WORLD"); ed.Command("_UCS", "_3P", point1, point2, ""); etc. Mais, à mon avis, utiliser .NET pour scripter les commandes natives AutoCAD, c'est un peu comme comme prendre un bazooka pour chasser un moustique.
  18. J'avais pensé que les textes multilignes devaient être convertis en attributs multilignes et les textes simples en attributs simples... Remplace : acAttributeModeMultipleLine par : 0 (zéro).
  19. C'est la synchronisation des références de bloc avec ATTSYNC qui prend du temps. Déjà, en mettant CMDECHO à 0 ça devrait être un peu plus rapide.
  20. Salut, Tu peux essayer le LISP ci-dessous, il traite toutes les définitions de bloc du dessin et remplace tous les textes et textes multilignes dans ces blocs par un attribut (Invite = "Attrib_n" étiquette = ATTRIB_n avec incrémentation par bloc au cas où il y ait plusieurs textes). (vl-load-com) (or *acad* (setq *acad* (vlax-get-acad-object))) (or *acdoc* (setq *acdoc* (vla-get-ActiveDocument *acad*))) (or *blocks* (setq *blocks* (vla-get-Blocks *acdoc*))) (defun ReplaceTextByAttDef (blockDef / i objName attrib just) (setq i 0) (vlax-for obj blockDef (setq objName (vla-get-ObjectName obj)) (cond ((= objName "AcDbMText") (setq attrib (vla-AddAttribute blockdef (vla-get-Height obj) acAttributeModeMultipleLine (strcat "Attrib_" (itoa (setq i (1+ i))) ": ") (vla-get-InsertionPoint obj) (strcat "ATTRIB_" (itoa i)) (vla-get-TextString obj) ) ) (vla-put-Alignment attrib (+ (vla-get-AttachmentPoint obj) 5)) (vla-put-TextAlignmentPoint attrib (vla-get-InsertionPoint obj)) (vla-Delete obj) ) ((= objName "AcDbText") (setq attrib (vla-AddAttribute blockdef (vla-get-Height obj) 0 (strcat "Attrib_" (itoa (setq i (1+ i))) ": ") (vla-get-InsertionPoint obj) (strcat "ATTRIB_" (itoa i)) (vla-get-TextString obj) ) ) (if (/= (vla-get-Alignment obj) acAlignmentLeft) (progn (vla-put-Alignment attrib (vla-get-Alignment obj)) (vla-put-TextAlignmentPoint attrib (vla-get-TextAlignmentPoint obj) ) ) ) (vla-Delete obj) ) ) ) (command-s "_.ATTSYNC" "_Name" (vla-get-Name blockDef)) (princ) ) (defun c:Steven () (vlax-for blockDef *blocks* (if (and (= (vla-get-Islayout blockDef) :vlax-false) (= (vla-get-IsXRef blockDef) :vlax-false) ) (ReplaceTextByAttDef blockDef) ) ) (princ) )
  21. Salut, Avec Increment*, si les blocs sont différents, choisir l'option Texte de l'onglet Sélection (CF le screencast joint). *Increment n'est pas un LISP et nécessite une version pleine. Increment_Selection_Texte.mp4
  22. Et l'apostrophe...
  23. La fonction cons prend deux arguments : (cons new-first-element list-or-atom) - si le second argument (list-or-atom) est une liste, elle ajoute le premier argument (new-first-element) au début de cette liste - si le second argument (list-or-atom) est un atome, elle crée une paire pointée (cons 1 2) crée une paire pointée (1 . 2) parce que 2 est un atome (cons 1 '(2 3)) ajoute 1 au début la liste (2 3) et renvoie (1 2 3) (cons 1 nil) ajoute 1 au début la liste vide nil et renvoie (1) Donc, la réponse à ton interrogation : est : non ce n'est pas possible parce que le deuxième terme de ta fausse paire pointée est une liste. Essaye juste d'entrer : '(10 . ("Pouette" "Tobogan" "EtAutre")) dans la console ou à la ligne de commande. Le point dans une paire pointée peut être vu comme un opérateur correspondant à la fonction cons (ce qui donne lieu à ce qu'on appelle la 'notation en paire pointées' ou 'dotted pair notation') (cons 1 2) est équivalent à '(1 . 2) (cons 1 nil) est équivalent à '(1 . nil), tous les deux renvoient (1) (cons 1 '(2 3)) ou (cons 1 (cons 2 (cons 3 nil))) sont équivalents à '(1 . (2 3)) ou '(1 . (2 . (3 . nil))), tous renvoient (1 2 3) Par conséquent '(10 . ("Pouette" "Tobogan" "EtAutre")) est équivalent à (cons 10 '("Pouette" "Tobogan" "EtAutre")) et tous deux renvoient (10 "Pouette" "Tobogan" "EtAutre")
  24. Qu'est-ce qui n'est pas clair dans ce que je dis dans le sujet sur les listes chainées et les 'cellules cons' ?
×
×
  • 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é