Aller au contenu

(gile)

Moderateurs
  • Compteur de contenus

    12 247
  • Inscription

  • Dernière visite

  • Jours gagnés

    209

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

  1. Salut, Montre ce que tu as déjà écrit, qu'on puisse voir où tu en es.
  2. (gile)

    Selection avec filtre

    C'est : "LINE,LWPOLYLINE,POLYLINE", pas : "LINE,LWPOLYLIGNE,POLYLIGNE".
  3. (gile)

    Selection avec filtre

    Comme expliqué dans la documentation : "Les listes de filtres sont composées de paires d'arguments. Le premier argument identifie le type de filtre (par exemple, un objet), et le second argument spécifie la valeur sur laquelle vous filtrez (par exemple, des cercles). Le type de filtre est un code de groupe DXF qui spécifie le filtre à utiliser." En VBA ces "paires" sont transposées dans deux tableaux (array), un pour les types (filterType), l'autre (filterData) pour les valeurs correspondantes. Par exemple, pour filtrer tous les cercles sur le calque "toto" dont le rayon est égal à 10, on a besoin de 3 "paires : une pour le type d'entité (code de groupe DXF = 0, valeur = "CIRCLE"), une pour le calque (code de groupe DXF = 8, valeur = "toto") et une pour le rayon (code de groupe DXF = 40, valeur = 10.0). Les 2 tableaux auront donc 3 éléments chacun, celui des types (filterType) contiendra (0, 8, 40) ; celui des valeurs (filterData) contiendra ("CIRCLE", "toto", 10.0). Dim filterType(2) As Integer Dim filterData(2) As Variant filterType(0) = 0 filterData(0) = "CIRCLE" filterType(1) = 8 filterData(1) = "toto" filterType(2) = 40 filterData(2) = 10.0 Ce qui devrait aussi pouvoir s'écrire aussi comme ça (non garanti, je ne connais pas bien le VBA). Dim filterType As Variant Dim filterData As Variant filterType = Array(0, 8, 40) filterData = Array("CIRCLE", "toto", 10.0)
  4. (gile)

    Selection avec filtre

    Mais ça fonctionne bien "comme en AutoLISP" comme le dit @Luna (et comme en ObjectARX ou .NET). La différence est uniquement dans les structures utilisées (les types (codes de groupe DXF) et les données sont identiques) : - des "paires pointées" en LISP : ((0 . "LINE,LWPOLYLINE") (67 . 0)) - des tableaux pour les types et les valeurs en VBA : filterType = Array(0, 67) filterData = Array("LINE,LWPOLYLINE", 0) - des "TypedValue" en .NET : { TypedValue(0, "LINE,LWPOLYLINE"), TypedValue(67, 0) } Dans tous les cas on peut utiliser les opérateurs "OR" et "AND" - LISP : ((-4 . "<AND") (-4 . "<OR") (0 . "LINE") (0 . "LWPOLYLINE") (-4 . "OR>") (67 . 0) (-4 . "AND")) - VBA : filterType = Array(-4, -4, 0, 0, -4, 67, -4) filterData = Array("<AND", "<OR", "LINE", "LWPOLYLINE", "OR>", 0, "AND>")
  5. Tu devrais pouvoir t'inspirer de ça : [CommandMethod("PHILBAT")] public static void PhilBat() { var doc = Application.DocumentManager.MdiActiveDocument; var db = doc.Database; var ed = doc.Editor; using (var tr = db.TransactionManager.StartTransaction()) { var bt = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead); if (bt.Has("-Depart01") && bt.Has("-Depart01v3")) { var source = (BlockTableRecord)tr.GetObject(bt["-Depart01v3"], OpenMode.ForRead); var sourceAtts = new List<AttributeDefinition>(); foreach (ObjectId id in source) { if (id.ObjectClass.DxfName == "ATTDEF") { sourceAtts.Add((AttributeDefinition)tr.GetObject(id, OpenMode.ForRead)); } } var target = (BlockTableRecord)tr.GetObject(bt["-Depart01"], OpenMode.ForRead); var attValues = new Dictionary<string, string>(); foreach (ObjectId brId in target.GetBlockReferenceIds(true, false)) { var br = (BlockReference)tr.GetObject(brId, OpenMode.ForWrite); foreach (ObjectId attId in br.AttributeCollection) { var attRef = (AttributeReference)tr.GetObject(attId, OpenMode.ForWrite); attValues[attRef.Tag] = attRef.TextString; attRef.Erase(); } br.BlockTableRecord = bt["-Depart01v3"]; foreach (var attDef in sourceAtts) { var attRef = new AttributeReference(); attRef.SetAttributeFromBlock(attDef, br.BlockTransform); if (attValues.ContainsKey(attDef.Tag.ToUpper())) { attRef.TextString = attValues[attDef.Tag.ToUpper()]; } ObjectId id = br.AttributeCollection.AppendAttribute(attRef); tr.AddNewlyCreatedDBObject(attRef, true); } } } tr.Commit(); } }
  6. Salut, Pourrais-tu élaborer un petit peu ta demande, je ne comprends pas ce que tu entends par : "redéfinir par un autre bloc". S'agit-il de redéfinir une définition de bloc (BlockTableRecord) ou de mettre à jour une référence de bloc (BlockReference), ou les deux ? Un petit exemple serait le bienvenu.
  7. Salut, En remplaçant : set accoreexe="C:\Program Files\Autodesk\AutoCAD 2016\accoreconsole.exe" par : set accoreexe="C:\Program Files\Autodesk\AutoCAD 2020\accoreconsole.exe" ou : set accoreexe="C:\Program Files\Autodesk\AutoCAD 2021\accoreconsole.exe" ?
  8. Salut, Essaye comme ça : (initcommandversion) (command "_.dim") (while (< 0 (getvar 'cmdactive)) (command pause) )
  9. Tu n'as pas besoin de les refaire. Tu paramètres AutoCAD pour avoir un fond blanc et tu lances un traitement par lot avec SuperAutoScript juste pour passer en espace objet, faire un zoom étendu et enregistrer.
  10. Salut, J'avais oublié de préciser ça, mais @Luna l'a bien décrit. L'image est générée à partir de la "miniature" (thumbnail) du fichier qui elle même est générée (par AutoCAD) depuis l'espace objet du dessin tel qu'au dernier enregistrement. Il faut donc que le dessin soit enregistré sur fond blanc et que l'image ne nécessite pas une grande définition.
  11. Salut, Tu peux essayer le petit exécutable dans le ZIP ci-joint (penser à débloquer le ZIP avant de lancer l'exécutable). Il enregistre les "miniatures" des fichiers sélectionnés au format PNG dans le dossier choisi. DwgThumbnail.zip
  12. Une version peut-être plus explicite qui dessine un cercle symbolisant le rayon d'action restant à chaque nouveau sommet spécifié. (defun c:RIA (/ *error* doc space radius rad startPt circle pt0 pt1 pts pline break) (vl-load-com) (setq doc (vla-get-ActiveDocument (vlax-get-acad-object))) (defun *error* (msg) (and msg (/= msg "Fonction annulée") (princ (strcat "\nErreur: " msg)) ) (vla-EndUndoMark doc) (princ) ) (vla-StartUndoMark doc) (setq space (vla-get-Block (vla-get-activeLayout doc)) radius (cond ((getenv "RiaMaximumRadius")) ((setenv "RiaMaximumRadius" "30.00")) ) ) (if (setq rad (getdist (strcat "\nEntrez le rayon maximum <" radius ">: "))) (setenv "RiaMaximumRadius" (rtos rad 2 2)) (setq rad (atof radius)) ) (if (setq startPt (getpoint "\nSpécifier le point de départ: ")) (progn (setq circle (vla-AddCircle space (vlax-3d-point (trans startPt 1 0)) rad)) (setq pt0 startPt ) (while (and (not break) (setq pt1 (getpoint pt0 "\nSpécifier le point suivant (ou valider): ")) ) (vla-Delete circle) (if pline (if (< (+ (vla-get-Length pline) (distance (vlax-curve-getEndPoint pline) pt1)) rad) ((lambda (p) (vlax-put pline 'Coordinates (append (vlax-get pline 'Coordinates) (list (car p) (cadr p))) ) (setq circle (vla-AddCircle space (vlax-3d-point p) (- rad (vla-get-Length pline)) ) ) ) (trans pt1 1 0) ) ((lambda (p) (vlax-put pline 'Coordinates (append (vlax-get pline 'Coordinates) (list (car p) (cadr p))) ) (setq break T) ) (trans (polar pt0 (angle pt0 pt1) (- rad (vla-get-Length pline))) 1 0) ) ) (if (< (distance pt0 pt1) rad) ((lambda (p0 p1) (setq pline (vlax-invoke space 'AddLightWeightPolyline (list (car p0) (cadr p0) (car p1) (cadr p1)) ) ) (setq circle (vla-AddCircle space (vlax-3d-point p1) (- rad (distance pt0 pt1)) ) ) ) (trans pt0 1 0) (trans pt1 1 0) ) ((lambda (p0 p1) (setq pline (vlax-invoke space 'AddLightWeightPolyline (list (car p0) (cadr p0) (car p1) (cadr p1)) ) ) (setq break T) ) (trans pt0 1 0) (trans (polar pt0 (angle pt0 pt1) (- rad (vla-get-Length pline))) 1 0) ) ) ) (setq pt0 pt1) ) ) ) (*error* nil) )
  13. Sinon, sans faire de désinstallation, il suffit de renommer le dossier LayLockSel.bundle (en modifiant ou supprimant "l'extension" : '.bundle') pour qu'il ne soit plus automatiquement chargé au démarrage.
  14. Comme dit plus haut, le message d'erreur dit qu'il y a un problème avec un ou des fichiers nécessaires à la désinstallation (CF les fichiers attachés plus haut). Tu peux peut-être essayer de désactiver ton antivirus le temps du remplacement des fichiers et de la désinstallation.
  15. Si tu n'as pas les droits d'administrateur sur ton poste, tu ne peux pas installer/désinstaller/utiliser LayLockSel.
  16. tu entres RIA pour lancer la commande tu modifies ou tu valides par Entrée le rayon maximum (défaut = 30) tu spécifies le point de départ tu spécifies le (ou les) point(s) suivant(s) (obstacles) tu valides par Entrée pour avoir le rayon d'action restant (symbolisé par un cercle) retour à 4. ou Annuler pour sortir de la commande.
  17. D'après la copie d'écran du message d'erreur, il semble que l'erreur soit due au fait qu'il manque le fichier UnregisterLayLockSel.exe dans le dossier LayLockSel.bundle\Contents. Débloque (clic droit > Propriétés > Général > Débloquer) le fichier zip ci joint et colle les fichiers qu'il contient dans LayLockSel.bundle\Contents (remplacer si besoin) ça devrait réparer l'installation. LayLockSelContents.zip
  18. Salut, Essaye ça : ;; commande RIA ;; Simule le rayon d'action d'un RIA (defun c:RIA (/ *error* doc space radius rad startPt pt0 pt1 pts pline) (vl-load-com) (setq doc (vla-get-ActiveDocument (vlax-get-acad-object))) (defun *error* (msg) (and msg (/= msg "Fonction annulée") (princ (strcat "\nErreur: " msg)) ) (vla-EndUndoMark doc) (princ) ) (vla-StartUndoMark doc) (setq space (vla-get-Block (vla-get-activeLayout doc)) radius (cond ((getenv "RiaMaximumRadius")) ((setenv "RiaMaximumRadius" "30.00")) ) ) (if (setq rad (getdist (strcat "\nEntrez le rayon maximum <" radius ">: "))) (setenv "RiaMaximumRadius" (rtos rad 2 2)) (setq rad (atof radius)) ) (if (setq startPt (getpoint "\nSpécifier le point de départ: ")) (progn (vla-AddCircle space (vlax-3d-point (trans startPt 1 0)) rad) (setq pt0 startPt ) (while T (setq pt0 startPt pts nil pline nil ) (while (setq pt1 (getpoint pt0 "\nSpécifier le point suivant (ou valider): ")) (if pline ((lambda (p) (vlax-put pline 'Coordinates (append (vlax-get pline 'Coordinates) (list (car p) (cadr p))) ) ) (trans pt1 1 0) ) ((lambda (p0 p1) (setq pline (vlax-invoke space 'AddLightWeightPolyline (list (car p0) (cadr p0) (car p1) (cadr p1)) ) ) ) (trans pt0 1 0) (trans pt1 1 0) ) ) (setq pts (cons pt1 pts) pt0 pt1 ) ) (while (and pts (<= rad (vla-get-Length pline))) (if (< 4 (length (vlax-get pline 'Coordinates))) (vlax-put pline 'Coordinates (reverse (cddr (reverse (vlax-get pline 'Coordinates)))) ) (vla-Delete pline) ) (setq pts (cdr pts)) ) (if pts (vla-AddCircle space (vlax-3d-point (trans (car pts) 1 0)) (- rad (vla-get-Length pline)) ) ) ) ) ) (*error* nil) )
  19. Est-ce que LayerLockSelection apparait toujours dans le panneau de configuration ? Si c'est le cas, essaye de Réparer avant Désinstaller. S'il n'apparait plus, vérifie que le dossier : C:\ProgramData\Autodesk\ApplicationPlugins ne contient plus de dossier : LayLockSel.bundle Tu pourras ensuite essayer de télécharger et installer la dernière version.
  20. Dans le Panneau de configuration > Programmes et fonctionnalités, tu dois trouver LayerLockSelection que tu peux essayer de Réparer ou Désinstaller.
  21. As-tu réussi à désinstaller proprement LayLockSel via le Panneau de configuration ?
  22. As-tu bien supprimer le chargement automatique des ces 3 fichiers, redémarré AutoCAD, puis essayé de les charger un par un avec APPLOAD (ou NETLOAD pour LayerLockSelection.dll qui n'est pas un LISP) afin d'essayer de déterminer lequel pose problème.
  23. Essaye de supprimer le chargement automatique pour les programmes qui posent problème de façon à ce que AutoCAD démarre sans erreur, puis essaye de les charger un par un avec APPLOAD.
  24. As-tu essayé de "Débloquer" ces fichiers (ou le ZIP qui les contient ? Clic doit > Propriétés > onglet Général > Débloquer (en bas).
  25. Salut, Peux-tu préciser dans quelles circonstances tu as une erreur fatale. D'après les tests que j'ai fait tout fonctionne comme attendu.
×
×
  • 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é