Aller au contenu

Désactiver les accrochages 2 (le retour)


(gile)

Messages recommandés

Salut,

 

Le dernier sujet sur le blog de Kean Walmsley m'a fait repenser à un vieux sujet.

Il s'avère que c'était mon cadeau de fin d'année il y deux ans.

 

Donc cette année le traditionnel cadeau sera le même qu'alors mais en mieux abouti.

 

Toujours deux commandes bascule pour activer/désactiver les accrochages aux objets sur les calques verrouillés (LOKO) ou les références externes (XROS).

Ces commandes peuvent être appelées de manière transparente ('LOKO ou 'XROS).

Les problèmes avec l'accrochage 'Intersection' sont résolus (merci Kean) mais je n'ai pas encore trouvé pour les composants des cotes sur un calque verrouillé.

Attention, la désactivation des accrochages sur de gros fichiers peut provoquer un ralentissement.

Cette nouvelle mouture semble stable sur AutoCAD 2012, 2013 et 2014, mais comme j'ai eu des plantages sévères avec AutoCAD 2011, elle sera réservé à ces versions

Ceci permet d'utiliser la technique Autoloader pour faciliter l'installation.

 

Installation :

  •  
  • Télecharger LockOsnap.zip.
  • Débloquer le zip (clic droit -> Propriétés -> onglet Général -> Débloquer
  • Lancer l'installeur LockOsnapSetup.msi (Un dossier LockOsnap.bundle est créé dans : %appdata%\Autodesk\ApplicationPlugins

 

Désinstallation :

Désinstaller via le Panneau de configuration.

 

Le code:

// (C) Copyright 2012 by Gilles Chanteau 
//
using System;
using System.Collections.Generic;
using System.Linq;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.Runtime;
using AcAp = Autodesk.AutoCAD.ApplicationServices.Application;

[assembly: CommandClass(typeof(Gile.LockOsnap.CommandMethods))]

namespace Gile.LockOsnap
{
   public class CommandMethods
   {
       private OSOverrule lokoOSOverrule, xrosOSOverrule;
       private IntOverrule lokoIntOverrule, xrosIntOverrule;

       [CommandMethod("LOKO", CommandFlags.Modal | CommandFlags.Transparent)]
       public void LockOsnapCmd()
       {
           ToggleOsnaps(ref lokoOSOverrule, ref lokoIntOverrule, lokoPromptingForPoint, LockedUpdate, "calques verrouillés");
       }

       [CommandMethod("XROS", CommandFlags.Modal | CommandFlags.Transparent)]
       public void XrefOsnapCmd()
       {
           ToggleOsnaps(ref xrosOSOverrule, ref xrosIntOverrule, xrosPromptingForPoint, XrefUpdate, "références externes");
       }

       void lokoPromptingForPoint(object sender, PromptPointOptionsEventArgs e)
       {
           LockedUpdate();
       }

       void xrosPromptingForPoint(object sender, PromptPointOptionsEventArgs e)
       {
           XrefUpdate();
       }

       private void ToggleOsnaps(
           ref OSOverrule osOverrule,
           ref IntOverrule intOverrule,
           PromptPointOptionsEventHandler handler, 
           Action update, 
           string msg)
       {
           Editor ed = AcAp.DocumentManager.MdiActiveDocument.Editor;
           RXClass entityClass = RXClass.GetClass(typeof(Entity));
           if (osOverrule == null)
           {
               ed.PromptingForPoint += handler;
               osOverrule = new OSOverrule();
               Overrule.AddOverrule(entityClass, osOverrule, false);
               intOverrule = new IntOverrule();
               Overrule.AddOverrule(entityClass, intOverrule, false);
               ed.WriteMessage(string.Format("\nAccrochages sur les {0} désactivés.", msg));
               update();
               Overrule.Overruling = true;
           }
           else
           {
               ed.PromptingForPoint -= xrosPromptingForPoint;
               Overrule.RemoveOverrule(entityClass, osOverrule);
               osOverrule = null;
               Overrule.RemoveOverrule(entityClass, intOverrule);
               intOverrule = null;
               ed.WriteMessage(string.Format("\nAccrochages sur les {0} activés.", msg));
           }
       }

       private void LockedUpdate()
       {
           if (lokoOSOverrule != null)
           {
               Database db = HostApplicationServices.WorkingDatabase;
               using (Transaction tr = db.TransactionManager.StartOpenCloseTransaction())
               {
                   HashSet<string> layers = new HashSet<string>(
                       ((LayerTable)tr.GetObject(db.LayerTableId, OpenMode.ForRead))
                       .Cast<ObjectId>()
                       .Select(id => (LayerTableRecord)tr.GetObject(id, OpenMode.ForRead))
                       .Where(ltr => ltr.IsLocked)
                       .Select(ltr => ltr.Name));
                   ObjectId[] onLocked = ((BlockTableRecord)tr.GetObject(db.CurrentSpaceId, OpenMode.ForRead))
                       .Cast<ObjectId>()
                       .Where(id => layers.Contains(((Entity)tr.GetObject(id, OpenMode.ForRead)).Layer))
                       .ToArray();
                   lokoOSOverrule.SetIdFilter(onLocked);
                   lokoIntOverrule.SetIdFilter(onLocked);
                   tr.Commit();
               }
           }
       }

       private void XrefUpdate()
       {
           if (xrosOSOverrule != null)
           {
               Database db = HostApplicationServices.WorkingDatabase;
               using (Transaction tr = db.TransactionManager.StartOpenCloseTransaction())
               {
                   ObjectId[] xrIds = ((BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead))
                       .Cast<ObjectId>()
                       .Select(id => (BlockTableRecord)tr.GetObject(id, OpenMode.ForRead))
                       .Where(btr => btr.IsFromExternalReference)
                       .SelectMany(btr => btr.GetBlockReferenceIds(true, false).Cast<ObjectId>())
                       .ToArray();
                   xrosOSOverrule.SetIdFilter(xrIds);
                   xrosIntOverrule.SetIdFilter(xrIds);
                   tr.Commit();
               }
           }
       }

       class OSOverrule : OsnapOverrule
       {
           public override void GetObjectSnapPoints(
             Entity ent,
             ObjectSnapModes mode,
             IntPtr gsm,
             Point3d pick,
             Point3d last,
             Matrix3d view,
             Point3dCollection snap,
             IntegerCollection geomIds) { }

           public override void GetObjectSnapPoints(
             Entity ent,
             ObjectSnapModes mode,
             IntPtr gsm,
             Point3d pick,
             Point3d last,
             Matrix3d view,
             Point3dCollection snaps,
             IntegerCollection geomIds,
             Matrix3d insertion) { }

           public override bool IsContentSnappable(Entity entity)
           {
               return false;
           }
       }

       class IntOverrule : GeometryOverrule
       {
           public override void IntersectWith(
             Entity ent1,
             Entity ent2,
             Intersect intType,
             Plane proj,
             Point3dCollection points,
             IntPtr thisGsm,
             IntPtr otherGsm) { }

           public override void IntersectWith(
             Entity ent1,
             Entity ent2,
             Intersect intType,
             Point3dCollection points,
             IntPtr thisGsm,
             IntPtr otherGsm) { }
       }
   }
}
 

Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien vers le commentaire
Partager sur d’autres sites

Hello Gilles

 

MERCI, je sens que je vais jouer un peu beaucoup avec ton nouveau gadget

avec du MAP 2012/2013/2014 64 bits et en plus sur des GROS fichiers pour voir !

mais malheureusement pas tout de suite ...

 

Bonnes Fetes et surtout la Sante, Bye, lecrabe

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Hello

 

Pour Info, avoir une nouvelle case/option dans la grande case de gestion des calques :

OSNAP (ACCROBJ) On/Off fait partie depuis longtemps de la WishList mondiale AutoCAD

MAIS cela n'a jamais ete implemente par Autodesk !

 

Je me demande pourquoi ??

 

Cela poserait peut etre qq problemes subtils !?

 

Bye, lecrabe

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Effectivement très bon programme (surtout accrochage xref)!! attention Autodesk va te piquer ton idée.......

"Je suis fasciné par l'air. Si on enlevait l'air du ciel, tous les oiseaux tomberaient par terre... Et les avions aussi... En même temps l'air tu peux pas le toucher... Ca existe et ça existe pas... Ca nourrit l'homme sans qu'il ait faim... It's magic ! L'air c'est beau en même temps tu peux pas le voir, c'est doux et tu peux pas le toucher... L'air, c'est un peu comme mon cerveau..."

J-C Van Damme

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

GRAND MERCI (GILE), avec LayLocSel on obtient quelque chose de fantastique lorsqu'on utilise, comme moi, beaucoup les Xref.

 

Par contre j'ai un petit bug. J'explique:

 

Loko-Accrochage activé et xros-Accrochage activé: RAS

 

Loko-Accrochage désactivé et xros-Accrochage activé: RAS, je n'ai plus l'accroche sur les calques verrouillé

 

Loko-Accrochage activé et xros-Accrochage désactivé: Bug, plus aucuns accrochages ne marchent, quelque soit l'objet et le calque

 

Loko-Accrochage désactivé et xros-Accrochage désactivé: RAS, je n'ai plus d'accrochage ni sur les xref ni sur les calques vérouillés

 

De plus, quand j'ai plusieurs fichier ouvert. Que je fais des réglage dans l'un, pas de soucis ça marche dans l'autre. Mais si je change une variable dans l'autre, voici ce que j'obtiens:

http://img.imagesia.com/fichiers/ef/capture_imagesia-com_efc1_large.JPG

 

Et tout cas, MERCI

 

A plus.

www.cad-is.fr
Autocad Map 2021 - Covadis/Autopiste V18.0c
Pisser sous la douche ne suffira pas
Lien vers le commentaire
Partager sur d’autres sites

Merci pour les retours.

 

J'ai corrigé le bug signalé par La Lozère :

Loko-Accrochage activé et xros-Accrochage désactivé: Bug, plus aucuns accrochages ne marchent, quelque soit l'objet et le calque

Pour l'autre, je ne comprends pas bien, mais j'ai modifié le code pour que les commandes fonctionnent "par dessin".

 

Recharger LockOsnap.zip (le lien du premier message est mis à jour), supprimer l'ancien dossier Gile_Lockosnap.bundle et le remplacer par le nouveau.

Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien vers le commentaire
Partager sur d’autres sites

Super, merci.

 

Petite question, comment peut-on faire en sorte que les bascules passent sur désactivé directement à l'ouverture ou à la création d'un nouveau fichier?

 

Faut-il passer par AutoCAD.lsp ou acadiso.lsp?

 

A plus.

www.cad-is.fr
Autocad Map 2021 - Covadis/Autopiste V18.0c
Pisser sous la douche ne suffira pas
Lien vers le commentaire
Partager sur d’autres sites

  • 4 mois après...

Bonjour,

 

Je n'arrive pas à installer cette merveille...

 

Il n'y a a pas d' "install', à part placer le dossier dans le répertoire mentionné ? De fichiers à charger dans autocad ?

 

J'ai déclaré le répertoire dans les emplacements de recherches de fichiers et les emplacements approuvés mais rien...

 

Merci pour votre aide

Autocad 2021 - Revit 2022 - Windows 10

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Normalement, avec AutoCAD 2012 à 2015, il n'y a rien d'autre à faire que de placer le dossier "Gile_LockOsnap.bundle" dans un des dossiers suivant :


  • Pour l'utilisateur courant :
    • %appdata%\Autodesk\ApplicationPlugins\

    [*]Pour tous les utilisateurs :

    • %allusersprofile%\Autodesk\ApplicationPlugins\ (Windows XP)
    • %programdata%\Autodesk\ApplicationPlugins\ (Windows 7 ou 8)
    • %programfiles%\Autodesk\ApplicationPlugins\

 

Tous ces dossiers (et leurs sous-dossiers) sont, par défaut, dans les chemins de recherche et dans les emplacements approuvés.

AutoCAD s'occupe du chargement automatique des applications placées dans ces dossiers.

 

Plus détails sur le mécanisme AutoLoader.

 

Cette application n'est pas chargée au démarrage, elle n'est chargée qu'au premier appel de la commande LOKO ou XROS.

Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...

Bonjour,

 

Pas de changement chez moi...

 

Appautoload 14

 

Commande: CHARGEAUTOAPP

Entrez une action de chargement automatique (Autoloader) [Liste/Recharger] <Liste>: l

3 lots d'application chargés.

C:\ProgramData\Autodesk\ApplicationPlugins\Autodesk AppManager.bundle

C:\ProgramData\Autodesk\ApplicationPlugins\Autodesk FeaturedApps.bundle

C:\ProgramData\Autodesk\ApplicationPlugins\Autodesk ImportSkp.bundle

 

J'ai pourtant mis le package LockOsnap.bundle aussi dans le dossier C:\ProgramData\Autodesk\ApplicationPlugins\ mais rien...

Un paramètre doit bien

 

Le code que tu donnes dans ton premier message est inclus dans la dll ou il faut le charger quelque part ?

 

Salutations

Autocad 2021 - Revit 2022 - Windows 10

Lien vers le commentaire
Partager sur d’autres sites

Comme je le dis juste au dessus : "Cette application n'est pas chargée au démarrage, elle n'est chargée qu'au premier appel de la commande LOKO ou XROS."

Il est donc normal que l'application n'apparaisse pas dans la liste.

 

As-tu essayé de lancer la commande LOKO, tu devrais avoir : "Accrochages sur les calques verrouillés désactivés." affiché en ligne de commande.

Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien vers le commentaire
Partager sur d’autres sites

Essaye de charger la DLL avec NETLOAD ou en exécutant cette expression LISP :

((lambda (filename)
  (if (findfile filename)
    (command "netload" filename)
    (alert "Fichier introuvable")
  )
)
 (strcat (getenv "appdata")
  "\\Autodesk\\ApplicationPlugins\\Gile_LockOsnap.bundle\\Contents\\LockOsnap_19.dll"
 )
)

 

Il se peut que tu aies un message d'erreur du genre :

Impossible de charger l'assemblage. Détails de l'erreur:

System.IO.FileLoadException: Impossible de charger le fichier ou l'assembly...

Dans ce cas, il faut débloquer les fichiers PackageContents.xml LockOsnap_18.dll et LockOsnap_19.dll.

Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien vers le commentaire
Partager sur d’autres sites

Hello !

 

En essayant NETLOAD, j'avais effectivement un message d'erreur.

 

J'ai donc débloqué les DLL tel que tu le décrit. Après relance d'autocad, le chargement automatique fonctionne !!

 

Je n'ai plus qu'a essayé la bête ! Merci (gile).

Autocad 2021 - Revit 2022 - Windows 10

Lien vers le commentaire
Partager sur d’autres sites

  • 10 mois après...

Hello (Gile)

 

Est-ce que LOKO et XROS sont censés fonctionnés "tel quel" sur Autocad 2016 ou as tu prévu une nouvelle version prochainement ?

 

Je pense que tu vas te faire "piquer" le concept par Autodesk un de ces jours, tes commandes sont tellement utiles !

 

A bientôt

Autocad 2021 - Revit 2022 - Windows 10

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

En l'état, le plug-in ne se chargera pas sur AutoCAD 2016.

Pour un fonctionnement avec A2016, il faut :

 

- soit recharger le ZIP mis à jour dans le premier message (possiblement le débloquer) et ensuite :

-- soit remplacer tout le dossier Gile_LockOsnap.bundle ;

-- soit remplacer uniquement le fichier PackageContents.xml ;

 

- soit ouvrir le fichier PackageContents.xml du dossier Gile_LockOsnap.bundle déjà installé dans un éditeur de texte et remplacer : SerieMax="R20.0" par : SerieMax="R20.1" dans le nœud : Components Description="2013 parts"/RuntimeRequirements

 

Je n'ai fait que quelques tests, mais il ne semble pas y avoir de problèmes avec cette version d'AutoCAD.

Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien vers le commentaire
Partager sur d’autres sites

  • 4 mois après...

Bonjour bonjour,

 

Voila des années que je cherche le moyen de désactiver les accrochages objets sur les xrefs et enfin j'ai trouvé ! Merci mille fois !

 

Cependant, je suis sous AutoCAD 2016 et lorsque je passe à un autre dessin, que j'utilise aussi la commande XROS et que je reviens au premier dessin j'ai le message d'erreur suivant:

post-62580-0-40388000-1440580769_thumb.png

 

En cliquant sur Ignorer tout rentre dans l'ordre.

 

Bonne journée et merci encore !

Mon pense bête : Mon blog fourre-tout

Ma bible : Aide AutoCAD

Mon futur calvaire : Revit

Lien vers le commentaire
Partager sur d’autres sites

  • 11 mois après...

Salut,

 

Je viens de mettre à jour le téléchargement dans le premier message (penser à nettoyer le cache en régénérant la page).

 

Pour AutoCAD 2017, le SP1 a introduit un bug qui cause des dysfonctionnements avec le mécanisme Autoloader (celui-là même qu'Autodesk préconise).

Donc si le SP1 est installé, il faut aussi probablement installer le hotfix qui corrige ce bug.

Voir ce sujet.

Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien vers le commentaire
Partager sur d’autres sites

  • 1 an après...

Bonjour (Gile)

 

J'ai essayé d'installé LOCKOSNAP sur 2018 et après avoir bataillé un peu, je crois que j'y suis arrivé, donc je partage :

 

- copie des éléments dans C:\ProgramData\Autodesk\ApplicationPlugins\Gile_LockOsnap.bundle

- débloquage du fichier XML (clic droit, onglet général, débloquer)

- j'ai "approuvé" le répertoire et sous répertoire dans autocad

- J'ai édité le fichier PackageContents.XML avec SeriesMax="R22.0" pour l'utilisation de LockOsnap_19.dll

 

<?xml version="1.0" encoding="utf-8"?>
<ApplicationPackage 
 SchemaVersion="1.0"
 AppVersion="1.0.0" 
 Author="Gilles Chanteau" 
 ProductCode="{571BB84F-1A52-45EF-8147-04D88D67DB54}" 
 UpgradeCode="{4478325A-CE28-4075-B0BB-DA468D25C266}" 
 Name="LockOsnap"
 AppDescription="Activer ou désactiver les accrochages aux objets sur les calques verrouillés et/ou sur les xrefs.">
 <CompanyDetails 
   Name="Gilles Chanteau"
   courriel="gilecad@orange.fr"
   url="http://gilecad.azurewebsites.net" />
 <Components Description="2012 parts">
   <RuntimeRequirements 
     OS="Win32|Win64" 
     Platform="AutoCAD|AutoCAD*" 
     SeriesMin="R18.2" 
     SeriesMax="R18.2" />
   <ComponentEntry 
     AppName="LockOsnap" 
     Version="1.0.0"
     ModuleName="./Contents/LockOsnap_18.dll"
     AppDescription="Activer ou désactiver les accrochages aux objets sur les calques verrouillés et/ou sur les xrefs."
     LoadOnCommandInvocation="True">
     <Commands>
       <Command Global="LOKO" />
       <Command Global="XROS" />
     </Commands>
   </ComponentEntry>
 </Components>
 <Components Description="2013 to 2017 parts">
   <RuntimeRequirements 
     OS="Win32|Win64" 
     Platform="AutoCAD|AutoCAD*" 
     SeriesMin="R19.0" 
     SeriesMax="R22.0" />
   <ComponentEntry 
     AppName="LockOsnap" 
     Version="1.0.0" 
     ModuleName="./Contents/LockOsnap_19.dll" 
     AppDescription="Activer ou désactiver les accrochages aux objets sur les calques verrouillés et/ou sur les xrefs."
     LoadOnCommandInvocation="True">
     <Commands>
       <Command Global="LOKO" />
       <Command Global="XROS" />
     </Commands>
   </ComponentEntry>
 </Components>
</ApplicationPackage>

Autocad 2021 - Revit 2022 - Windows 10

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é