Aller au contenu

Lisps de gile


(gile)

Messages recommandés

Salut,

 

Au vu du message, je vois deux possibilités :

- première possibilté, la DLL est sur un serveur, il faut alors modifier les autorisations (recherche CASPOL)ou, plus simple mettre la DLL en local.

- deuxième possibilité (je penche plutôt vers celle là) il faut "débloquer" la DLL (fichier chargé depuis internet, voir ici.

 

Bonjour gile,

té génial !:D

C’était en effet la deuxième possibilité : il fallait débloquer la dll comme tu l'avais déjà indiqué dans le sujet que tu à mis en référence.

 

Merci encore et bonne journée.:wub:

 

Ciao.

" Celui qui a déplacé la montagne, c'est celui qui a commencé par enlever les petites pierres "

Lien vers le commentaire
Partager sur d’autres sites

Bonjour Gile,

Bonjour à tous,

 

Ayant eu besoin de ta fonction instopo et l'ayant testé avant avec un petit fichier de points voici le message d'erreur produit à l'issue du test.

 

Commande: instopo

Erreur: caractère lu incorrect (octal): 0

 

Je suis sur Windows XP avec AutoCAD MAP 2007.

 

Merci de tes et (vos) lumières.

 

Fabrice

POINTS.txt

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

Apparemment c'est l'encodage de ton fichier txt qui est "bizarre".

J'avais la même erreur, et après l'avoir ouvert dans Notepad++ et fait "Encodage > Convertir en ANSI" c'est passé sans problème... :huh:

Lien vers le commentaire
Partager sur d’autres sites

Bonjour à tous,

 

A propos d'incr.

J'utilise fréquemment ce lisp pour numéroter mes schémas et plans - merci (gile) - :) .

Dans ces plans, j'ai souvent du matériels en plusieurs exemplaires avec le même numéro. Pour cela, je suis obligé de sortir de la commande, copier mon étiquette autant de fois que nécessaire puis de reprendre la commande là où j'en étais. :huh:

Ma méthode n'est peut-être pas la bonne, mais si une petite option répétée apparaissait au moment de chaque demande insertion, cela me serais utile.

Ce lisp est trop complexe pour que je le modifie moi même. Il n'y a pas d'urgence, et si personne n'est intéressé, j'esserais de me créer une petite commande plus simple adaptée à mon besoin.

 

Merci par avance,

Olivier

Lien vers le commentaire
Partager sur d’autres sites

Merci Bryce,

Il y a effectivement un problème d'encodage depuis le "nouveau" CADxp.

 

-Olivier-

Tu peux toujours spécifier une valeur d'incrément de 0.

Je ne me suis plus occupé de ce LISP depuis longtemps et j'ai fait quelque chose de "mieux" en .NET en téléchargement sur Autodesk Exchange Apps (en fait il n'est pas accessible aujourd'hui parce que j'ai fait une mise à jour et il semble qu'Autodesk ait des problèmes avec son site...).

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

Lien vers le commentaire
Partager sur d’autres sites

Pour la version .net, seras t'elle utilisable sur la version 2011 ?

Hélas non, pour être validées par Autodesk pour Exchange Apps, les applications doivent utiliser le mode de chargement automatique AutoLoader apparu avec 2012.

Mais je posterais peut-être une version ici...

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

Lien vers le commentaire
Partager sur d’autres sites

J'utilise fréquemment ce lisp pour numéroter mes schémas et plans - merci (gile) - :) .

Dans ces plans, j'ai souvent du matériels en plusieurs exemplaires avec le même numéro. Pour cela, je suis obligé de sortir de la commande, copier mon étiquette autant de fois que nécessaire puis de reprendre la commande là où j'en étais. :huh:

Ma méthode n'est peut-être pas la bonne, mais si une petite option répétée apparaissait au moment de chaque demande insertion, cela me serais utile.

 

Bonjour,

je fais comme Olivier, donc s'il y a une autre méthode (plus rapide) je suis preneur aussi ;)

 

Ciao.

" Celui qui a déplacé la montagne, c'est celui qui a commencé par enlever les petites pierres "

Lien vers le commentaire
Partager sur d’autres sites

Salut Gile

 

J'ai tester le LISP PLINE_BLOCK

Elle me donne seulement le périmètre et pas la surface

 

(defun c:pline_block (/ AcDoc Space bloc nom ent obj ins op reg ech id long aire ref)
 (vl-load-com)
 (setq	AcDoc (vla-get-ActiveDocument (vlax-get-acad-object))
Space (if (= (getvar "CVPORT") 1)
	(vla-get-PaperSpace AcDoc)
	(vla-get-ModelSpace AcDoc)
      )
 )
 (if (or
(tblsearch "BLOCK" (setq bloc "Pline_block"))
(findfile (setq bloc "Pline_block.dwg"))
     )
   (progn

     ;; attribut "nom de la pièce"
     (if (not (setq nom (getname "Nom de la pièce")))
(setq nom "")
     )

     (while (not (setq ent (car (entsel)))))
     (setq	obj  (vlax-ename->vla-object ent))
     (if (= "AcDbPolyline" (vla-get-ObjectName obj))
(progn
  (if (not
	(setq
	  ins
	   (getpoint
	     "\nSpécifiez le point d'insertion ou < Centre >: "
	   )
	)
      )
    (progn
      (if (= (vla-get-closed obj) :vlax-false)
	(progn
	  (vla-put-closed obj :vlax-true)
	  (setq op T)
	)
      )
      (setq reg	(vlax-invoke space 'addRegion (list obj))
	    ins	(vlax-get (car reg) 'Centroid)
      )
      (if op
	(vla-put-closed obj :vlax-false)
      )
      (vla-delete (car reg))
    )
  )
  (if (not (vlax-ldata-get "Pline_block" "ech"))
    (vlax-ldata-put "Pline_block" "ech" 1)
  )
  (if (not (setq
	     ech
	      (getreal
		(strcat	"\nEntrez le facteur d'échelle <"
			(rtos (vlax-ldata-get "Pline_block" "ech"))
			">: "
		)
	      )
	   )
      )
    (setq ech (vlax-ldata-get "Pline_block" "ech"))
    (vlax-ldata-put "Pline_block" "ech" ech)
  )
  (setq	id   (vla-get-ObjectID obj)

	;; Attribut surface (mm² -> m²)
	aire (strcat "%<\\AcObjProp Object(%<\\_ObjId "
		     (itoa id)
		     ">%).Area \\f \"%lu2%pr2%ct8[1e-006]\">%"
	     )

	;; Attribut périmètre (mm -> m)
	long (strcat "%<\\AcObjProp Object(%<\\_ObjId "
		     (itoa id)
		     ">%).Length \\f \"%lu2%pr2%ct8[0.001]\">%"
	     )

	  )

  (setq	ref
	 (vla-InsertBlock
	   Space
	   (vlax-3d-point (trans ins 1 0))
	   bloc
	   ech
	   ech
	   1
                  (angle '(0 0 0) (trans (getvar 'ucsxdir) 0 (trans '(0 0 1) 1 0 T)))
	 )
  )

  ;; attribution de leur valeur aux attributs
  (mapcar '(lambda (x y) (vla-put-TextString x y))
	  (vlax-invoke ref 'GetAttributes)
	  (list nom  aire long)
  )

  (vla-regen AcDoc acActiveViewport)
)
(alert "L'objet sélectionné n'est pas une polyligne.")
     )
   )
   (alert "Le bloc \"Pline_block\" est introuvable.")
 )
 (princ)
)

Modifié par (gile)
Ajout de bbcodes
Lien vers le commentaire
Partager sur d’autres sites

Car je suis actuellement d'améliorer mon lisp, c'est petit programme qui sert à faire des zone de stockage sur un plan de chantier: on donne le nom et sa surface

 

voici mon lisp:

 

(defun c:stock()
	(command "-calque" "n" "stock" "co" 125 "stock" "ch" "stock" ""); Création du calque stockage
    (setq pt(getpoint "\nPoint d'origine de votre aire de stockage : ")); affecte a pt le point de départ 
    (command "polylign" pt "la" 0.015 0.015);debut de la polyligne
    (while pt ; boucle
             (setq pt (getpoint "\nPoint suivant(Return pour FIN): ")); repete l'action
             (command pt)
    )
    (setq xg 0) (setq yg 0) (setq nc 0) (setq n 0);les variables "Ox et Oy" sont associées aux coordonnées des points l'air de stockage.
    (setq nom (entlast))
    (setq lt (entget nom))
    (setq len (length lt))
(repeat len
         	(setq p1 (car (nth n lt)))
	(if (= p1 10) 
		(progn
            		(setq xg (+ xg(cadr(nth n lt))))
                	(setq yg (+ yg(caddr(nth n lt))))
                	(setq nc(1+ nc))
	 	)
            	)
(setq n(+ n 1))
)
     (setq p1 (list(/ xg nc)(/ yg nc)))
            (setq txt(getstring "\nNom du matériau stocké: "))
            (command "aire" "O" (entlast))
            (setq surfa(getvar "AREA"))
            (command "texte" "m" p1 1 0 txt)
            (command "texte" "" (strcat "Surface : " (rtos surfa 2 2) " m2"))
            (command "calque" "ch" "0" "")
 
 )

 

 

Mon problème est de metre un champ a ma surface

Modifié par (gile)
Ajout de bbcodes
Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

S'il te plait, pour que le code soit plus lisible, utilise les bbcodes :

[code] ici le code [/code]

donne :

 ici  le code 

Accessible via l'icône :

bbcode.png

 

Le plus simple pour intégrer un champ à un texte est d'exécuter la commande CHAMP (_FIELD), de formater le champ selon ses souhaits et de copier l'expression de champ (en bas de boite de dialogue).

Il faut ensuite intégrer cette expression dans le LISP en prenant soin d'utiliser le caractère d'échappement (anti-slash : \) partout où il est nécessaire (devant les guillemets et les anti-slashes).

Si le champ est un champ "Objet", il faut remplacer l'identifiant (ObjectId) de l'objet utilisé pour le test par une expression LISP qui retourne celui de l'objet utilisé par le LISP.

Pour ce faire, le plus simple est d'utiliser Visual LISP (pas de panique, c'est assez simple).

Au début du LISP, ajoute (vl-load-com) pour charger les fonctions Visual LISP.

Dans la construction de la chaîne pour l'expression de champ, il faut utiliser une expression qui retourne l'ObjectId de l'entité sous forme de chaîne.

 

Par exemple, dans ton LISP, remplace :

 

(setq p1 (list(/ xg nc)(/ yg nc)))
            (setq txt(getstring "\nNom du matériau stocké: "))
            (command "aire" "O" (entlast))
            (setq surfa(getvar "AREA"))
            (command "texte" "m" p1 1 0 txt)
            (command "texte" "" (strcat "Surface : " (rtos surfa 2 2) " m2"))

 

par :

 

(setq p1 (list (/ xg nc) (/ yg nc)))
(setq txt (getstring "\nNom du matériau stocké: "))
(setq util (vla-get-Utility (vla-get-ActiveDocument (vlax-get-acad-object))))
(command "texte" "m" p1 1 0 txt)
(command "texte"
 ""
        (strcat
   "%<\\AcObjProp.16.2 Object(%<\\_ObjId "
   (if (vlax-method-applicable-p util 'GetObjectIdString)
     (vla-GetObjectIdString util (vlax-ename->vla-object nom) :vlax-false)
     (itoa (vla-get-ObjectId pl))
   )
   ">%).Area \\f \"%lu2%ps[surface : , m2]\">%"
        )
)

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

Lien vers le commentaire
Partager sur d’autres sites

Oupss !

J'avais oublié un (strcat ...)

J'ai corrigé l'exemple ci-dessus.

 

PS1 : tu n'apprendras pas correctement le LISP si tu te contentes de faire des copier/coller sans essayer de comprendre le code que tu copies.

 

PS2 : essaye de faire un effort pour l'orthographe. Si l'interpréteur LISP ne supporte aucune faute de syntaxe, certains lecteurs (dont moi) ne supportent pas beaucoup plus les fautes qui n'aident pas du tout à la compréhension des messages.

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

Lien vers le commentaire
Partager sur d’autres sites

Merci Gile

 

Oui c'est vrai, mais voilà je viens à peine de commencer le LISP et j'essai de comprende au mieux le language

 

Et en se moment je suis sur un projet en licence pro projeteur CAO DAO,je dois faire un programme d'installation de chantier

 

Donc je m'efforce a travailler sur le programme, essaié de comprendre ce que je peux comprendre

Mais je pense qu'il me faut adopter un méthodes de travaille, donc si je peux avoir un conseil de votre part sa m'aiderait a pouvoir mieux comprendre le LISP et pouvoir progrésser à la suite

 

Je voudrais avoir de donne base au niveau du lisp, comment raisonner dans le lisp?

Lien vers le commentaire
Partager sur d’autres sites

  • 9 mois après...
  • 2 semaines après...

Hello

petite remarque concernant edit_bloc qui jusqu'à présent fonctionnait à merveille, j'ai le message suivant qui s'affiche (aors que je sélectionne l'ensemble des éléments du fichier)

Erreur: Erreur Automation Clé introuvable

Je peux te faire suivre le fichier si tu le souhaites

++

Phil

Projeteur Revit Indépendant - traitement des eaux/CVC

Lien vers le commentaire
Partager sur d’autres sites

  • 3 mois après...
  • 8 mois après...

hello gilles

 

est ce que chez toi ton lisp "ETCP" fonctionne correctement sous autocad 2015?

( ca marchait sous autocad 2014 )

 

moi il fait bien un zoom bien sur la polyligne sélectionnée mais ne sélectionne pas les entites qui sont a l intérieur, puis il sort sans rien proposé

 

est ce une histoire de "command" qu'il faut modifier en "command-s" ?

 

 

(defun c:etcp (/ ent elst plst)
 (setvar "cmdecho" 0)
 (setq osm (getvar "osmode"))
 (setvar "osmode" 0)
 (and (setq ent (car (entsel)))
      (setq elst (entget ent))
      (= "LWPOLYLINE" (cdr (assoc 0 elst)))
      (setq plst (mapcar (function (lambda (x) (trans (cdr x) ent 1)))
                         (vl-remove-if-not (function (lambda (x) (= (car x) 10))) elst)
                 )
      )
      (command "zoom" "ob" ent "")
      (command "_.stretch" "_cp")
      (mapcar 'vl-cmdf plst)
      (command "" "")
      (command "_.erase" ent "")
 )
 (setvar "osmode" osm)
 (princ)
)

 

merci

 

bonne journée

 

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

Je n'avais pas eu le temps de tester.

Ceci semble fonctionner :

(defun c:etcp (/ ent elst plst)
 (if
   (and (setq ent (car (entsel)))
 (setq elst (entget ent))
 (= "LWPOLYLINE" (cdr (assoc 0 elst)))
 (setq plst (mapcar (function (lambda (x) (trans (cdr x) ent 1)))
		    (vl-remove-if-not
		      (function (lambda (x) (= (car x) 10)))
		      elst
		    )
	    )
 )
   )
    (progn
      (command "_zoom" "_ob" ent "")
      (command "_.erase" ent "")
      (command "_.stretch" "_cp")
      (foreach p plst (command p))
      (command "" "")
    )
 )
 (princ)
)

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

Lien vers le commentaire
Partager sur d’autres sites

Bonjour

 

Serait il possible d'ajouter au lisp spécial sélection une fonction pour sélectionner par type de hachures svp ?

 

Je reçois souvent des plans archi avec des motif personnalisé aux noms exotiques qui sont non éditables. La sélection rapide est bien sur utilisable, mais un petit "ssh" me faciliterai la vie.

 

Merci pour ton temps...

Lien vers le commentaire
Partager sur d’autres sites

Hello

 

Dans l'onglet Objet avec une ligne du genre :

(setq sel (ssget "_X" '((0 . "HATCH") (2 . "ANSI31"))))

Tu "choppes" toutes les Hachures dont le nom est "ANSI31" ...

et apres tu fais ce que tu veux car c'est ton jeu de selection precedent ...

 

Tu peux ecrire N lignes de ce genre dans un Script et les supprimer ou les transferer sur un calque special ...

 

Voir l'exemple de Script sur mon message :

http://cadxp.com/topic/40134-calque-0/page__pid__224177__st__20#entry224177

Ou je transfere sur un calque "0_A_VOIR" tous les objets du calque ZERO ...

 

En attendant, une superbe modif de Gilles ...

 

Bye, lecrabe

Autodesk Expert Elite Team

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é