(gile) Posté(e) le 2 janvier 2012 Posté(e) le 2 janvier 2012 Salut, Mon cadeau pour la nouvelle année. C'est encore un ébauche, ça provoque un scintillement du curseur (presque plus !), mais ça semble marcher. La commande LOKO fonctionne comme une bascule qui active ou désactive les accrochages aux objets sur les calques verrouillés. LockOsnap.dll à charger avec NETLOAD Nouvelle version : - LockOsnap_19.dll pour 2013- Ajout d'une commande XROS pour activer/désactiver l'accrochage sur les xrefs. Le code (C#) using System; using System.Collections.Generic; using System.Linq; using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.EditorInput; using Autodesk.AutoCAD.Geometry; using Autodesk.AutoCAD.Runtime; namespace OsnapControl { public class LockOsnap { private LockOsnapOverrule _osnapOverrule; private static ObjectId[] _onLocked; [CommandMethod("LOKO")] public void LockOsnapCmd() { Editor ed = Application.DocumentManager.MdiActiveDocument.Editor; if (_osnapOverrule == null) { ed.PromptingForPoint += OnPromptingForPoint; _osnapOverrule = new LockOsnapOverrule(); Overrule.AddOverrule(RXClass.GetClass(typeof(Entity)), _osnapOverrule, false); ed.WriteMessage("\nAccrochages sur les calques verrouillés désactivé."); } else { ed.PromptingForPoint -= OnPromptingForPoint; Overrule.RemoveOverrule(RXClass.GetClass(typeof(Entity)), _osnapOverrule); _osnapOverrule = null; ed.WriteMessage("\nAccrochages sur les calques verrouillés activé."); } } private void OnPromptingForPoint(object sender, PromptPointOptionsEventArgs e) { _onLocked = GetOnLocked(); _osnapOverrule.SetIdFilter(_onLocked); Overrule.Overruling = true; } private ObjectId[] GetOnLocked() { Database db = HostApplicationServices.WorkingDatabase; Editor ed = Application.DocumentManager.MdiActiveDocument.Editor; using (Transaction tr = db.TransactionManager.StartTransaction()) { IEnumerable<string> layers = GetLocked(db); return ((BlockTableRecord)tr.GetObject(db.CurrentSpaceId, OpenMode.ForRead)) .Cast<ObjectId>() .Where(id => layers.Contains(((Entity)tr.GetObject(id, OpenMode.ForRead)).Layer)) .ToArray(); } } private IEnumerable<string> GetLocked(Database db) { return ((LayerTable)db.LayerTableId.GetObject(OpenMode.ForRead)) .Cast<ObjectId>() .Select(id => (LayerTableRecord)id.GetObject(OpenMode.ForRead)) .Where(ltr => ltr.IsLocked) .Select(ltr => ltr.Name); } public class LockOsnapOverrule : OsnapOverrule { public override bool IsContentSnappable(Entity entity) { return !_onLocked.Contains(entity.ObjectId); } public override void GetObjectSnapPoints( Entity entity, ObjectSnapModes snapMode, IntPtr gsSelectionMark, Point3d pickPoint, Point3d lastPoint, Matrix3d viewTransform, Point3dCollection snapPoints, IntegerCollection geometryIds) { Point3dCollection pts = new Point3dCollection(); entity.UpgradeOpen(); base.GetObjectSnapPoints( entity, snapMode, gsSelectionMark, pickPoint, lastPoint, viewTransform, pts, geometryIds); } } } } Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
x_all Posté(e) le 3 janvier 2012 Posté(e) le 3 janvier 2012 bonjour, bonne année, meilleurs vœux...(ça fait 1/4d'h que je répète ça...) ben (gile) on voie que toi tu prend les vœux aux sérieux et que tu fait même de joli cadeaux... merci une fois de plus :) quelques trucs sur autocad
PHILPHIL Posté(e) le 10 janvier 2012 Posté(e) le 10 janvier 2012 hello Gile bonne année je viens de tester ton *.dll bien pratique :) merci voir les couches et etre sur de ne pas s'y accrocher, oui c'est le but petite remarque si je peux me permettre il ne prend pas les extremités, ni les milieux, mais il prend les intersections par contreapres a nous peut etre de faire gaffe aussi et de les eviter a+ bonne journé phil FREELANCE Autodesk Architecture 2025 sous windows 11 64 REVIT 24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal
Dinosor Posté(e) le 10 janvier 2012 Posté(e) le 10 janvier 2012 Meci (gile) d'avoir pondu ce lisp que j'avais suggéré en fin d'année :) :) :) Ca a été plus rapide que je ne pouvais l'espérer, super cool ! Je vais le tester de suite. Je te remercie infiniment et te souhaite plein de réussite pour l'année à venir, ainsi que les suivantes cela va de soi. ;) Seuls nous allons vite, ensemble nous allons plus loin... CPU Intel 3,5Go / Nvidia RTX-3090 AutoCad (Architecture) 2022 - Lumion PRO BMW R-1200-RT, c'est moche, oui... je sais... www.neda.ch
PHILPHIL Posté(e) le 10 janvier 2012 Posté(e) le 10 janvier 2012 hello Gile oupsss ca provoque des "erreurs fatales"on dirait le scintillement peut etre qui est en cause, pas compatible avec la carte graphique a+ phil FREELANCE Autodesk Architecture 2025 sous windows 11 64 REVIT 24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal
Dinosor Posté(e) le 10 janvier 2012 Posté(e) le 10 janvier 2012 Re, Chez moi ça fonctionne, mais pas avec les accrochages de type intersection...? Il y a effectivement un scintillement, mais ça va. :) Seuls nous allons vite, ensemble nous allons plus loin... CPU Intel 3,5Go / Nvidia RTX-3090 AutoCad (Architecture) 2022 - Lumion PRO BMW R-1200-RT, c'est moche, oui... je sais... www.neda.ch
(gile) Posté(e) le 10 janvier 2012 Auteur Posté(e) le 10 janvier 2012 Salut, Je sais, ça n'est pas la panacée : la méthode GetObjectSnapPoints ne prend pas en compte l'accrochage 'interection' et le scintillement est probablement dû au filtre qui doit ouvrir le ou les objets survolé(s) pour en vérifier l'état du calque à chaque movement de la souris.En même temps ce ne sont que quelques lignes de code... Je n'ai pas trop le temps de perfectionner ça en ce moment.À ultiliser avec prudence, donc, si ça provoque des erreurs fatales (personnellement je n'en ai pas eu). Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
PHILPHIL Posté(e) le 10 janvier 2012 Posté(e) le 10 janvier 2012 hello gile pas de souci avec prudence bonne soirée phil FREELANCE Autodesk Architecture 2025 sous windows 11 64 REVIT 24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal
Dinosor Posté(e) le 11 janvier 2012 Posté(e) le 11 janvier 2012 Ben la voilà l'erreur fatale... :(rires forts): Je ne vais plus trop m'en servir pour l'instant alors. ;) Seuls nous allons vite, ensemble nous allons plus loin... CPU Intel 3,5Go / Nvidia RTX-3090 AutoCad (Architecture) 2022 - Lumion PRO BMW R-1200-RT, c'est moche, oui... je sais... www.neda.ch
(gile) Posté(e) le 15 janvier 2012 Auteur Posté(e) le 15 janvier 2012 J'ai un peu revu ma copie.Il n'y a plus de scintillement excepté avec 'GetCorner' (deuxième point pour la commande RECTANG).Je pense avoir corrigé ce qui provoquait des erreurs fatales (mais on n'est jamais sur...).Je ne trouve toujours pas pour l'accrochage intersection. S'il y a toujours des pilotes d'essai... à vos souris. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Tramber Posté(e) le 15 janvier 2012 Posté(e) le 15 janvier 2012 Impressionnant.Bon, j'ai testé tout de suite 'LOKO pour voir si tout cela était aussi transparent ;) Effectivement, l'accrochage Intersection continue impunément je dirais même frénétiquement tellement l'outil qui cherche les accrobjs n'a plus rien à se mettre sous la dent :P En tous cas, c'est une bonne dll. Marche bien.Difficile en transparence ? Juste curieux. Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
(gile) Posté(e) le 16 janvier 2012 Auteur Posté(e) le 16 janvier 2012 Salut, Merci d'avoir essayé Difficile en transparence ? Juste curieux. Plus qu'avant. Explication sommaire :La version précédente (qui fonctionnait en transparence) utilisait un "filtre en temps réel" : elle évaluait l'état du calque des objets au moment où le curseur les survolait, c'est ce qui provoquait le scintillement du curseur. Pour palier à ça, la nouvelle version utilise un filtre par liste d'identifiant (ObjectId) pré-établie, il faut donc collecter tous les objets sur des calques verrouillés avant que ne commence la saisie du point. J'utilise un gestionnaire (réacteur) de l'évènement PromptingForPoint, qui est déclenché au moment où l'utilisateur est invité à saisir un point, pour mettre à jour la liste des objets sur des calques verrouillés. L'activation/désactivation de ce gestionnaire se faisant dans la commande LOKO son lancement en transparence arriverait donc trop tard. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Dinosor Posté(e) le 16 janvier 2012 Posté(e) le 16 janvier 2012 Hello et merci pour la nouvelle version. Je viens de tester un petit bout. L'affichage est nettement meilleur effectivement, l'accrochage intersection est toujours actif, mais bon on s'en accomode (je le désactive manuellement). Je n'ai pas eu d'erreur fatale, mais là il faut un peu plus d'essais... B) Un truc surprenant, tout style d'accrochage reste actif sur des cotes ?!? Chez vous aussi ? Bonne journée. :) Seuls nous allons vite, ensemble nous allons plus loin... CPU Intel 3,5Go / Nvidia RTX-3090 AutoCad (Architecture) 2022 - Lumion PRO BMW R-1200-RT, c'est moche, oui... je sais... www.neda.ch
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