Aller au contenu

Extension pour AutoLISP


(gile)

Messages recommandés

Salut,

 

Une petite bibliothèque de fonctions LISP définies en .NET :

gc-Brep

gc-GetFieDlg

gc-GetFolderDlg

gc-InputBox

gc-MessageBox

gc-Purge

gc-GetStrippedMtextString

gc-CopyToClipboard

gc-TextFromClipboard

gc-VpFreeze

gc-VpLayerOverride

gc-VpLayerRemoveAll

gc-VpThaw

gc-VpThawAll

gc-XlRead

gc-XlWrite

 

Mise à jour :

Télécharger LispExtension depuis cette page.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Si je comprend bien, ces fonctions LISP sont destinées à être utilisées dans d'autres programmes LISP? Les fonctions que tu proposes sont-elles impossibles à programmer en LISP et est-ce la raison pour laquelle tu les as programmées en .NET?

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Oui, il est possible avec .NET de définir des fonctions LISP qui sont reconnues par AutoCAD comme des fonctions natives.

 

Parmi les fonctions proposées ici, certaines sont impossible à programmer en LISP (Brep, GetFileDld avec choix multiple, les fonctions VpLayer) d'autres sont tellement plus simple en .NET que je les ai faites dans la foulée.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

C'est curieux, je n'ai pas eu besoin de faire ce déblocage.

Patrick, pour info sous vista au boulot je dois débloquer les fichiers d’aide (provenant d'un autre ordinateur) mais pas à mon domicile sous XP(Paramètre de sécurités ou système d’exploitation à voir..)

 

A+

Apprendre => Prendre => Rendre

Lien vers le commentaire
Partager sur d’autres sites

Parmi les fonctions proposées ici, certaines sont impossible à programmer en LISP (Brep, GetFileDld avec choix multiple, les fonctions VpLayer)

Salut

 

J'avais fait cette fonction pour un choix multiple de fichiers en lisp.

 

Par contre, tu as raison en ce qui concerne les viewports.

Lire les valeurs, ok, mais les écrire :(

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...

Mise à jour.

gc-VpLayerOverride Accepte désormais 3 types d'arguments pour la couleur :

- entier de 1 à 255 pour un couleur de l'index

- liste de 3 entiers de 0 à 255 pour la valeur RGB (Rouge Vert Bleu)

- liste de deux chaînes pour les carnets de couleurs (NomCouleur NomCarnet)

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

  • 4 mois après...

Nouvelle version :

  • amélioration de la gestion des erreurs
  • versions 18 (2010-2012) et 19 (2013-?)

 

Le ZIP contient les DLLs, une fichier d'aide (LispExtension.chm), un fichier texte (lisez-moi.txt) avec les instructions de déploiement et un fichier LISP (Autoloader.lsp) à lancer la première fois depuis AutoCAD pour charger la dll correspondant à la version courante et l'inscrire dans la base de registre pour automatiser les prochains chargements.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

  • 2 ans après...
  • 1 an après...

Salut (giles)

 

un petit problème avec LispExtension_19.dll sur Autocad Map 2016

 

si je tape la fct (command "netload" "LispExtension_19")

 

j'ai ça en retour :

 

netload Nom du fichier d'assemblage: LispExtension_19 Impossible de charger l'assemblage. Détails de l'erreur: System.IO.FileLoadException: Impossible de charger le fichier ou l'assembly 'file:///C:\Program Files\Autodesk\AutoCAD 2016\LispExtension_19.dll' ou une de ses dépendances. L'opération n'est pas prise en charge. (Exception de HRESULT : 0x80131515)

Nom de fichier : 'file:///C:\Program Files\Autodesk\AutoCAD 2016\LispExtension_19.dll' ---> System.NotSupportedException: Tentative de chargement d'un assembly à partir d'un emplacement réseau qui aurait entraîné l'utilisation de l'assembly en mode Bac à sable (sandbox) dans les versions antérieures du .NET Framework. Cette version du .NET Framework n'activant pas la stratégie CAS par défaut, ce chargement peut être dangereux. Si ce chargement n'est pas destiné à utiliser l'assembly en mode Bac à sable (sandbox), activez le commutateur loadFromRemoteSources. Pour plus d'informations, consultez http://go.microsoft.com/fwlink/?LinkId=155569.

à System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)

à System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)

à System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)

à System.Reflection.RuntimeAssembly.InternalLoadFrom(String assemblyFile, Evidence securityEvidence, Byte[] hashValue, AssemblyHashAlgorithm hashAlgorithm, Boolean forIntrospection, Boolean suppressSecurityChecks, StackCrawlMark& stackMark)

à System.Reflection.Assembly.LoadFrom(String assemblyFile)

à Autodesk.AutoCAD.Runtime.ExtensionLoader.Load(String fileName)

à loadmgd()

 

 

ces message semblent etre lié à la securité (sandbox)?????

comment faire pour continuer à utiliser tes outils bien pratiques !!!

 

merci

 

Yethi

Lien vers le commentaire
Partager sur d’autres sites

  • 4 mois après...

Bonjour Gilles,

 

Juste pour info, j'ai un petit souci avec cette DLL.

Elle se charge et fonctionne parfaitement, mais c'est juste en quittant AutoCAD que j'ai un plantage (rapport d'erreur Autodesk).

J'utilise des licences MAP 3D 2010 et MAP 3D 2012 sous WIndows XP et Windows 7.

Le problème ne se pose que sous MAP 3D 2010 sous Windows 7 32.

Toutes mes autres combinaisons :

- MAP 2010 / XP => OK

- MAP 2012 / XP => OK

- MAP 2012 / Win7 x64 => OK

C'est pas grave car je n'ai qu'un seul poste comme ça et le problème ne se pose qu'en quittant le programme donc une fois le travail sauvegardé. Je ne sais pas non plus si c'est lié à MAP ou si c'est reproductible sous AutoCAD seul.

C'est juste pour te signaler le petit souci.

 

Olivier

Lien vers le commentaire
Partager sur d’autres sites

Merci pour le retour.

Je n'ai jamais noté ce comportement (je n'ai eu jamais non plus de config telle que celle que tu décris).

En fait, je ne me sers pas vraiment de ces extensions, je n'utilise plus le LISP que pour des petites routines écrites, en général, à la demande...

Si j'ai le temps, j'y jetterais un œil.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

bonsoir Gile

 

 

je viens de tester "gc-vplayeroverride"

 

et ca me met ca

 

Choix de l'objet: no function definition: GC-VPLAYEROVERRIDE

 

 

je l'ai bien charger avec un netload

(command-s "_NETLOAD" "LispExtension_19.dll")

 

 

 

 

 

 

 

(defun c:chcoucalFEN (/ acdoc ss ref
;;;                        name
                       new )
 (setq cav (getvar "clayer"))
 (command-s "-calque" "ch" "0" "")
 (setq typeentite (getcfg "APPDATA/TYPEENTITE"))

 (setq sfen (car (entsel "\nSELECTIONNER LA FENETRE DANS LAQUELLE FAIRE LA MODIFICATION DU CALQUE :")))
 (command-s "espaceo")
 (initget "E e S s") 
 (setq tmp (getkword
             (strcat "\nVOULEZ VOUS SELECTIONNER UNE Entité ou UNE Sous entité (E e / S s) <" typeentite "> : ")
           )
 )
 (if tmp
   (setq typeentite tmp)
 )
 (setcfg "APPDATA/TYPEENTITE" typeentite)
 (if (or (= typeentite "E") (= typeentite "e"))
   (progn (setq ent1 (car (entsel "\nSELECTIONNER UNE ENTITE GLOBALE :")))
          (setq name (vlax-get-property (vlax-ename->vla-object (cdr (assoc -1 (entget ent1)))) 'layer))
   )
   (progn (setq ent1 (car (nentsel "\nSELECTIONNER UNE SOUS-ENTITE :")))
          (setq name (vlax-get-property (vlax-ename->vla-object (cdr (assoc -1 (entget ent1)))) 'layer))
   )
 )
 (command-s "espacep")
 (setq couleurnew (acad_colordlg 1))
;;  (gc-vplayeroverride sfen name 1 nil -3) 
 (gc-vplayeroverride (car ( entsel)) "C_MUR" 1 nil 0);; pour tester
 (setvar "clayer" cav)
 (princ)
 )

 

 

 

a+

 

merci

 

Phil

Autodesk Architecture 2023 sous windows 11 64

24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal

Lien vers le commentaire
Partager sur d’autres sites

hello Gile

 

as tu pu tester mon lisp ?

 

et pourquoi j'ai cette erreur ?

 

je pensai que ca venait du fait que la fenetre n'etait pas rectangulaire, mais non.

 

 

SELECTIONNER LA FENETRE DANS LAQUELLE FAIRE LA MODIFICATION DU CALQUE :espaceo

VOULEZ VOUS SELECTIONNER UNE Entité ou UNE Sous entité (E e / S s) <S> :

SELECTIONNER UNE SOUS-ENTITE :espacep

Choix de l'objet: no function definition: GC-VPLAYEROVERRIDE

 

 

merci

 

a+

Phil

Autodesk Architecture 2023 sous windows 11 64

24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Au vu du message d'erreur, le problème vient plutôt du chargement de la DLL.

Regarde bien ce que dit la ligne commande quand tu appelle NETLOAD.

 

Quant au problème de fenêtre non rectangulaire, quand tu fais :

(gc-vplayeroverride (car ( entsel)) "C_MUR" 1 nil 0);; pour tester

et et que tu sélectionnes un fenêtre non rectangulaire, (car (entsel)) retourne l'entité qui a servi à faire la fenêtre.

 

Pour sélectionner une fenêtre (rectangulaire ou pas) il vaut mieux utiliser ssget avec un filtre de sélection (et les options :S et :E si tu veux simuler entsel) :

(if (setq ss (ssget "_+.:E:S" '((0 . "VIEWPORT"))))
 (progn
   (setq viewport (ssname ss 0))
   (gc-vplayeroverride viewport ...)
 )
)

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

salut Gile

 

merci

 

ca fonctionne mieux maintenant en effet

 

je devais avoir un souci de chargement de "lispextension" en effet

 

 

CHCOUCALFEN : force la couleur du calque de l'entite ou sous entite dans la fenetre

CHCOUCALFENanul : annule la couleur forcée du calque de l'entite ou sous entite dans la fenetre

 

 

Grace a Gile voici deux Lisp.

 

(command-s "_NETLOAD" "LispExtension_19.dll")


 (defun c:chcoucalFEN (/ acdoc ss ref name  new )
 (setq cav (getvar "clayer"))
 (command-s "-calque" "ch" "0" "")
 (setq typeentite (getcfg "APPDATA/TYPEENTITE"))
 (command-s "espaceo")
 (initget "E e S s") 
 (setq tmp (getkword
             (strcat "\nVOULEZ VOUS SELECTIONNER UNE Entité ou UNE Sous entité (E e / S s) <" typeentite "> : ")
           )
 )
 (if tmp
   (setq typeentite tmp)
 )
 (setcfg "APPDATA/TYPEENTITE" typeentite)
 (if (or (= typeentite "E") (= typeentite "e"))
   (progn (setq ent1 (car (entsel "\nSELECTIONNER UNE ENTITE GLOBALE :")))
          (setq name (vlax-get-property (vlax-ename->vla-object (cdr (assoc -1 (entget ent1)))) 'layer))
   )
   (progn (setq ent1 (car (nentsel "\nSELECTIONNER UNE SOUS-ENTITE :")))
          (setq name (vlax-get-property (vlax-ename->vla-object (cdr (assoc -1 (entget ent1)))) 'layer))
   )
 )
 (command-s "espacep")
 (setq couleurnew (acad_colordlg 1))
   (prompt "\nSELECTIONNER LA FENETRE DANS LAQUELLE FAIRE LA MODIFICATION DU CALQUE :")

  (if (setq ss (ssget "_+.:E:S" '((0 . "VIEWPORT"))))
 (progn
   (setq viewport (ssname ss 0))
   (gc-vplayeroverride viewport name couleurnew nil -3)
 )
) 
 (setvar "clayer" cav)
 (princ)
 )


(defun c:chcoucalFENanul (/ acdoc ss ref name  new )
 (setq cav (getvar "clayer"))
 (command-s "-calque" "ch" "0" "")
 (setq typeentite (getcfg "APPDATA/TYPEENTITE"))
 (command-s "espaceo")
 (initget "E e S s") 
 (setq tmp (getkword
             (strcat "\nVOULEZ VOUS SELECTIONNER UNE Entité ou UNE Sous entité (E e / S s) <" typeentite "> : ")
           )
 )
 (if tmp
   (setq typeentite tmp)
 )
 (setcfg "APPDATA/TYPEENTITE" typeentite)
 (if (or (= typeentite "E") (= typeentite "e"))
   (progn (setq ent1 (car (entsel "\nSELECTIONNER UNE ENTITE GLOBALE :")))
          (setq name (vlax-get-property (vlax-ename->vla-object (cdr (assoc -1 (entget ent1)))) 'layer))
   )
   (progn (setq ent1 (car (nentsel "\nSELECTIONNER UNE SOUS-ENTITE :")))
          (setq name (vlax-get-property (vlax-ename->vla-object (cdr (assoc -1 (entget ent1)))) 'layer))
   )
 )
 (command-s "espacep")
   (prompt "\nSELECTIONNER LA FENETRE DANS LAQUELLE FAIRE LA MODIFICATION DU CALQUE :")

  (if (setq ss (ssget "_+.:E:S" '((0 . "VIEWPORT"))))
 (progn
   (setq viewport (ssname ss 0))
   (gc-vplayerremoveall viewport name)
 )
) 
 (setvar "clayer" cav)
 (princ)
 )

 

a+

 

Phil

Autodesk Architecture 2023 sous windows 11 64

24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal

Lien vers le commentaire
Partager sur d’autres sites

Hello Gile

 

dans tes extensions

 

tu n'aurais pas un outils qui rend invisible une entite dans une fenetre par hazard ?

tout en la laissant visible dans l'onglet model.

 

bonne nuit

 

Phil

Autodesk Architecture 2023 sous windows 11 64

24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal

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é