krunch Posté(e) le 27 janvier 2012 Posté(e) le 27 janvier 2012 Bonjour Je cherche à intervenir sur les propriétés de calques par Viewport. Après pas mal de recherches j'ai trouvé (chez Lee Mac) de quoi lire ces propriétés mais apparemment impossible de les écrire (lisp en dessous) Ensuite j'ai trouvé ça : un dll qui fabrique une fonction .. Donc ça se confirme, c'est loin d'être simple... Pour modifier d'autres propriétés (que couleur et linetype) il faudrait ouvrir le code de Changevpsettings pour refaire un dll à partir du .vb ?.. C'est comme du VBA ?.. Pensez vous que ce soit une solution ?... Ou vaut-il mieux penser à autre chose :blink: Merci d'avance (GetXrecord "0") renvoie props d'épaisseurs de VP du calque0vla-setXRecordData provoque une erreur(defun GetXrecord (layer / xrec) (vl-load-com) (setq layer (vla-item (vla-get-Layers (vla-get-ActiveDocument (vlax-get-acad-object))) layer)) (if (eq :vlax-true (vla-get-HasExtensionDictionary layer)) (progn (setq xrec (vla-item (vla-getExtensionDictionary layer) "ADSK_XREC_LAYER_LINEWT_OVR")) (vla-getXRecordData xrec 'cod 'val) (print (vlax-safearray->list cod))(print (vlax-safearray->list val))(print) ;; (vla-setXRecordData xrec (vlax-make-variant cod) (vlax-make-variant val)) ; !! ERR!! ;; (LM:Variants->DXF cod val) ) ) )
(gile) Posté(e) le 27 janvier 2012 Posté(e) le 27 janvier 2012 Salut, Non ce n'est pas comme du VBA (sinon on pourrait aussi le faire directement en LISP).Les propriétés de calque modifiables par fenêtre sont (en .NET) :la couleurle type de ligne l'épaisseur de lignele style de tracéSi j'ai un peu de temps, j'essayerais de faire quelque chose. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
(gile) Posté(e) le 28 janvier 2012 Posté(e) le 28 janvier 2012 Salut, J'ai essayé quelque chose. On trouveras dans LispVpLayer.zip une DLL et un fichier d'aide CHM pour cinq nouvelles fonctions LISP définies en NET :gc-VpFreeze : geler le ou les calque(s) dans la fenêtre.gc-VpThaw : dégeler le ou les calque(s) dans la fenêtre.gc-ThawAll : dégeler tous les calque(s) dans la fenêtre.gc-VpLayerOverride : modifier les propriétés du calque (couleur, type de ligne, épaisseur de ligne, style de tracé) dans la fenêtregc-VpLayerRemoveAll : supprimer toutes les propriétés forcées pour le calque dans la fenêtre PS: une régénération est nécessaire après l'utilisation de gc-VpLayerOverride et gc-VpLayerRemoveAll. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
VDH-Bruno Posté(e) le 28 janvier 2012 Posté(e) le 28 janvier 2012 Bonsoir, (gile) c’est très intéressant de voir que tu peux étendre les fonctionnalités d’AutoLISP en définissant de nouvelles fonctions au moyen de .net. Pour ma culture personnelle j’aurais une ou deux petites questions qui me viennent rapidement à l’esprit, en point .net, tu sais définir des fonctions avec un nombre d’arguments variables et dans la même veine des fonctions à argument optionnel. Je serais également curieux de savoir avec quoi tu créer tes fichiers d’aide CHM. A+ et merci, Apprendre => Prendre => Rendre
(gile) Posté(e) le 29 janvier 2012 Posté(e) le 29 janvier 2012 c’est très intéressant de voir que tu peux étendre les fonctionnalités d’AutoLISP en définissant de nouvelles fonctions au moyen de .net.Oui, j'en avais déjà fait quelques unes, je vais essayer de les rassembler. Pour ma culture personnelle j’aurais une ou deux petites questions qui me viennent rapidement à l’esprit, en point .net, tu sais définir des fonctions avec un nombre d’arguments variables et dans la même veine des fonctions à argument optionnel.En fait la méthode qui définit la fonction LISP n'a qu'un seul argument obligatoire de type ResultBuffer, il s'agit d'une collection de TypedValue qui peut donc en contenir zéro, une ou plusieurs "valeurs typées". On est donc dans une situation similaire à un defun où l'argument serait une liste contenant les paramètres.Dans ce cas, la majeure partie du code consiste souvent à contrôler le nombre d'arguments, et leur validité (type, valeur). Je serais également curieux de savoir avec quoi tu créer tes fichiers d’aide CHM. Les fichiers CHM sont issus de la compilation d'un ou plusieurs fichiers HTML. Il faut donc d'abord faire une page HTML pour chaque page du fichier d'aide final. Il existe des éditeurs HTML "WYSIWYG" (what you see is what you get) gratuits comme KompoZer.La compilation en chm se fait ensuite avec HTML Help Workshop, gratuit aussi. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
VDH-Bruno Posté(e) le 29 janvier 2012 Posté(e) le 29 janvier 2012 Merci (gile), pour les liens et explications dont la clarté m’impressionnera toujours.A+ Apprendre => Prendre => Rendre
krunch Posté(e) le 29 janvier 2012 Auteur Posté(e) le 29 janvier 2012 Bravo, c'est carrément impressionant ! Et merci aussi pour les liens. Du coup j'ai testé celle qui m'intéresse .. J'ai une erreurs si j'essaie de modifier le style de tracé (idem avec un style de tracé de table attachée à la présentation) :(gc-vplayeroverride (car (entsel)) "0" 40 nil 35 "Normal") .. Autodesk.AutoCAD.Runtime.Exception: eNotApplicable à Autodesk.AutoCAD.Runtime.Interop.ThrowExceptionForErrorStatus(Int32 errorStatus) à ... Et une autre erreur si j'essaie la même ligne dans un dessin en ctb (manqerait un test ctb/stb) :Erreur: type d'argument incorrect: stringp Normal Sinon il y a une parenthèse en trop au milieu du code d'exemple de l'aide : (car (entsel))) Merci encore
(gile) Posté(e) le 29 janvier 2012 Posté(e) le 29 janvier 2012 Merci pour le retour, il y avait effectivement une erreur avec les styles de tracé. C'est réparé (téléchargement mis à jour).J'ai aussi rajouté un test sur PSTYLEMODE au cas où une valeur serait spécifié dans un dessin en CTB. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
krunch Posté(e) le 29 janvier 2012 Auteur Posté(e) le 29 janvier 2012 En effet plus d'erreur, par contre toujours sur les styles nommés.. En mode CTB :(gc-vplayeroverride (car (entsel)) "0" 40 nil 35 "Normal")il semble que la couleur du calque soit répliquée dans le style (> "Color_40") même désactivé (par défaut j'ai "Color_7"). En CTB il faudrait plutôt que l'argument style soit ignoré ? En mode STB (présentation) je sélectionne acad.stb dans la fenêtre Propriétés puis :(gc-vplayeroverride (car (entsel)) "0" 40 nil 35 "Style_1")> Erreur: style de tracé incorrect Le style en argument doit être "chargé" ou présent dans la liste déroulante des styles de tracés, sinon j'ai cette erreur. Pour ça il faut affecter "Style_1" au moins 1 fois à un objet quelconque ? Je ne sais pas si j'ai raté un truc là dessus ... Un dernier point : je pensais la mettre dans une boucle (calques), et dans ce cas il faudrait pouvoir faire le Regen à la fin (donc soit une version sans Regen soit selon argument supplémentaire).
(gile) Posté(e) le 30 janvier 2012 Posté(e) le 30 janvier 2012 En CTB il faudrait plutôt que l'argument style soit ignoré ?C'est le cas. Le style en argument doit être "chargé"Oui, de même pour les types de ligne. Un dernier point : je pensais la mettre dans une boucle (calques), et dans ce cas il faudrait pouvoir faire le Regen à la fin (donc soit une version sans Regen soit selon argument supplémentaire).J'ai modifié le code pour éviter qu'AutoCAD ne régénère la présentation. PS : J'ai un peu essayé hier un nouvel éditeur HTML "WYSIWYG" gratuit plus "moderne que KompoZer : BlueGriffon. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
krunch Posté(e) le 30 janvier 2012 Auteur Posté(e) le 30 janvier 2012 C'est le cas.Oui ok, en CTB le fait qu'il écrive la couleur dans le style semble un comportement normal Oui, de même pour les types de ligne.J'ai fini par trouver un truc...Les styles de tracés ne sont pas explicitement "chargés" par une commande, par contre on peut modifier CPLOTSTYLE avec le nouveau style puis remettre le précédent, ça a l'air de marcher (il y a peut être + simple ?) ... (setq tmp (getvar "CPLOTSTYLE")) (setq new "Style_1") ; le style doit être présent dans la table affectée à la présentation (setvar "CPLOTSTYLE" new) (setvar "CPLOTSTYLE" tmp) (gc-vplayeroverride (car (entsel)) "0" nil nil nil new) J'ai modifié le code pour éviter qu'AutoCAD ne régénère la présentation.Super, et encore merci pour ce boulot Par contre j'ai un problème sur une autre config. dont la particularité est d'aller chercher les fichiers (lisp et autres) sur le réseau : si je charge le dll enregistré en local (NETLOAD) ça marche, mais si je charge le même dll depuis un lecteur réseau j'ai une erreur (message interminable ci-dessous).Le chargement d'un dll ne se fait pas de la même fonction selon l'emplacement ? Commande: (gc-vplayeroverride (car (entsel)) "0" 40) Choix de l'objet: System.Security.SecurityException: Échec de la demande d'autorisation de type 'System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'. à System.Security.CodeAccessSecurityEngine.Check(Object demand, StackCrawlMark& stackMark, Boolean isPermSet) à System.Security.CodeAccessPermission.Demand() à System.Reflection.Assembly.VerifyCodeBaseDiscovery(String codeBase) à System.Reflection.Assembly.GetName(Boolean copiedName) à System.Reflection.Assembly.GetName() à Autodesk.AutoCAD.ApplicationServices.Application.get_Version() à LispVpLayer.VpLayer.VpLayerOverride(ResultBuffer resbuf) à Autodesk.AutoCAD.Runtime.CommandClass.InvokeWorker(MethodInfo mi, Object commandObject, Boolean bLispFunction) à Autodesk.AutoCAD.Runtime.CommandClass.InvokeWorkerWithExceptionFilter(MethodInfo mi, Object commandObject, Boolean bLispFunction) à Autodesk.AutoCAD.Runtime.PerDocumentCommandClass.Invoke(MethodInfo mi, Boolean bLispFunction) à Autodesk.AutoCAD.Runtime.CommandClass.CommandThunk.InvokeLisp() L'action qui a échoué était : Demand Le type de la première autorisation qui a échoué était : System.Security.Permissions.FileIOPermission La première autorisation qui a échoué était : <IPermission class="System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" PathDiscovery="C:\Program Files\AutoCAD 2010\acmgd.DLL"/> La demande était pour : <IPermission class="System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" PathDiscovery="C:\Program Files\AutoCAD 2010\acmgd.DLL"/> Le jeu autorisé de l'assembly défaillant était : <PermissionSet class="System.Security.PermissionSet" version="1"> <IPermission class="System.Security.Permissions.FileDialogPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Access="Open"/> <IPermission class="System.Security.Permissions.IsolatedStorageFilePermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Allowed="ApplicationIsolationByUser" UserQuota="512000"/> <IPermission class="System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Flags="Execution"/> <IPermission class="System.Security.Permissions.UIPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Window="SafeTopLevelWindows" Clipboard="OwnClipboard"/> <IPermission class="System.Security.Permissions.UrlIdentityPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Url="file:///X:/ACad support/LISP autoload/LispVpLayer.dll"/> <IPermission class="System.Security.Permissions.ZoneIdentityPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Zone="Internet"/> <IPermission class="System.Drawing.Printing.PrintingPermission, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" version="1" Level="SafePrinting"/> </PermissionSet> L'assembly ou le AppDomain qui a échoué était : LispVpLayer, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null La méthode qui a causé l'échec était : Autodesk.AutoCAD.DatabaseServices.TypedValue VpLayerOverride(Autodesk.AutoCAD.DatabaseServices.ResultBuffer) La zone de l'assembly qui a échoué était : Internet L'URL de l'assembly qui a échoué était : file:///X:/ACad support/LISP autoload/LispVpLayer.dll; erreur: Demande ADS erronée
VDH-Bruno Posté(e) le 30 janvier 2012 Posté(e) le 30 janvier 2012 Salut, Il me semble que le problème à déjà évoqué dans ce fil de discussion Mise sur le réseau d\'une dll en c# Peut-être, je me trompe j’ai toujours testé en local et les solutions ont peut-être évolué depuis… A+ Apprendre => Prendre => Rendre
krunch Posté(e) le 31 janvier 2012 Auteur Posté(e) le 31 janvier 2012 Salut, merci pour cette info. Pour le moment j'ai essayé la manip telle quel mais j'ai une erreur : 'caspol.exe' n'est pas reconnu comme une commande interne ..Il s'agit d'un système XP et non pas NT.. je chercherai par la suite, referai un message si je trouve.
krunch Posté(e) le 6 février 2012 Auteur Posté(e) le 6 février 2012 Bonjour (gile) Encore un dernier détail : avec gc-VpLayerOverride il faudrait pouvoir spécifier la couleur par une paire pour les RVB RAL ... Voir la commande layerstate-addlayers qui utilise ces paramètres ..
(gile) Posté(e) le 6 février 2012 Posté(e) le 6 février 2012 Si j'ai le temps...C'est plus compliqué, ça demande au programme d'accepter plusieurs types d'arguments : entier pour couleur de l'index, liste de 3 entiers pour RVB, chaîne pour carnet de couleur. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
krunch Posté(e) le 6 février 2012 Auteur Posté(e) le 6 février 2012 Oui y a plus important, je disais ça par perfectionisme ..Tombé sur ce post sur ce sujet : http://www.theswamp.org/index.php?topic=35274.0
(gile) Posté(e) le 6 février 2012 Posté(e) le 6 février 2012 C'est fait, le téléchargement est mis à jour Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
krunch Posté(e) le 6 février 2012 Auteur Posté(e) le 6 février 2012 Le secrêt de (gile) : rendre le temps extensible !
krunch Posté(e) le 12 février 2012 Auteur Posté(e) le 12 février 2012 Bonjour (gile) Chez moi (windows 7) ta dernière version (uniquement) du fichier d'aide n'est pas lu correctement : j'ai une page "Navigation vers la page Web annulée" mauvaise adresse apparemment, même quand je clique sur les rubriques. Autre question : où sont sockées les propriétés gel/degel des calques dans la fenêtre (gérées par gc-vpthaw/gp-vpfreeze), je n'arrive pas à les trouver pour les lire... Elles ne sont pas dans les overrides des calques ni dans l'objet fenêtre ? Merci d'avance
(gile) Posté(e) le 12 février 2012 Posté(e) le 12 février 2012 Salut, Chez toi, tu as probablement installé le Framework .NET 4.0 (automatique avec A 2012) qui est très pointilleux en ce qui concerne les fichiers issu du Web.Voir ici. Les calques gelés dans la fenêtre sont stockés dans les Xdata de la fenêtre (non modifiable en LISP). Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
krunch Posté(e) le 12 février 2012 Auteur Posté(e) le 12 février 2012 Salut Chez toi, tu as probablement installé le Framework .NET 4.0...Je parlais du fichier d'aide .chm ! qui marchait dans la version précédente .. (mais je garde ce lien car pb avec ton dll ailleurs en réseau) Les calques gelés dans la fenêtre sont stockés dans les Xdata de la fenêtre (non modifiable en LISP). Merci bien je vais chercher ça
(gile) Posté(e) le 13 février 2012 Posté(e) le 13 février 2012 Je parlais du fichier d'aide .chm ! qui marchait dans la version précédenteOui, j'avais bien lu, et la réponse que j'ai donnée (réponse #20) n'est pas liée au type de fichier (extension) mais à sa provenance (ordinateur extérieur ou Web). mais je garde ce lien car pb avec ton dll ailleurs en réseauPour les problèmes de chargement de DLL depuis un serveur, ce n'est pas le dernier lien, mais celui donné réponse #12 qui pourrait être utile. Il semblerait que tu ne lises pas, ou pas très attentivement, les sujets dont je donne les liens... Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
krunch Posté(e) le 13 février 2012 Auteur Posté(e) le 13 février 2012 Ok, au temps pour moi car en effet j'ai interprété : j'ai cru que ton lien (Propriétés-Débloquer) concernait uniquement les .dll, et surtout cette manip n'était pas utile dans la version précédente du .chm .. J'ai débloqué le chm et ça marche. Si tu veux bien j'aurais une (dernière) question sur le codage des couleurs. Avec les overrides on obtient uniquement le code 420 (cf cette discussion). Or avec cet entier on obtient le code RVB, et assez facilement le code ACI (si couleur ACI), mais peut-on en déduire le bookname le cas échéant ?
krunch Posté(e) le 19 février 2012 Auteur Posté(e) le 19 février 2012 Bonjour (gile) Je reviens à nouveau pour un problème avec gc-vplayeroverride, cette fois ci utilisée depuis un contexte particulier qui est celui de OpenDCL (une image ici). Le problème est qu'elle renvoie souvent une erreur eLockViolation, la description et peut être la solution sont ici .. Au passage je recommande vivement OpenDCL à tous ceux qui veulent fabriquer des interfaces évoluées (niveau VB) tout en restant en Lisp, c'est un très bon outil.
(gile) Posté(e) le 19 février 2012 Posté(e) le 19 février 2012 Salut, Je pense que Kerry a raison dans la réponse qu'il donne sur TheSwamp.J'ai modifié la DLL dans le téléchargement. À echarger et à tester, donc. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
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