Aller au contenu

Messages recommandés

Posté(e)

Bonjour à tous

 

je débute en LISP.... peut être dans le but de remplacer le VBA

 

dans le lisp suivant, je souhaite "passer" à la commande ULS la valeur X qui correspond au fichier LAS à importer, retaurer.

 

J'excute : (uls "PLANCHER", j'ai en retour NO FUNCTION DEFINITION

 

Merci de votre aide ...

 

 

(defun c:uLS ( x / vportlist vport)
 (layerstate-import (strcat "c:\\" x ".las"))
 (if (/= (getvar "ctab") "model")
   (progn
     (setq vportlist (vl-sort (vports) '(lambda (v1 v2) (< (car v1) (car v2)))))
     (if (> (length vportlist) 1)
(progn
  (command "_mspace");activate vport
  (foreach vport (cdr vportlist)
    (setvar "cvport" (car vport))
    (layerstate-restore x
      (vlax-vla-object->ename (vla-get-activepviewport (vla-get-activedocument (vlax-get-acad-object)))) 4);restore
    );foreach
  (command "_pspace");deactivate vport
  );progn
);if
     );progn
   );if
 );defun

Posté(e)

Salut,

 

Tu as cette erreur parce que le nom de ta fonction est : 'c:uls' et pas : 'uls'.

 

Le fait de préfixer un nom de fonction LISP avec 'c:' est un artefact pour pouvoir appeler la fonction sans préfixe depuis la ligne commande commme une commande AutoCAD, mais dans ce cas la fonction ne peut pas avoir d'arguments.

 

Quand on définit une fonction avec argument(s), on ne la préfixe pas avec 'c:' sauf, cas particulier, quand on veut exposer cette fonction à une application extérieure ObjectARX (ou .NET) qui pourra l'appeler avec acedInvoke (ou Invoke).

 

Donc, si tu n'est pas dans ce cas particulier, il vaut mieux nommer ta fonction 'uls' tout simplement (defun uls ...).

Sinon, pour l'appeler, il faut faire : (c:uls "PLANCHER")

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

Posté(e)

Le beurre et l'argent du beurre.

 

(defun c:uls (/ layerState lasFile)
 (uls (getstring "\nEntrez le nom de l'état de calque: "))
 (princ)
)

(defun uls (x / vportlist vport)
 (if (layerstate-import (strcat "c:\\" x ".las"))
   (if	(/= (getvar "ctab") "model")
     (progn
(setq vportlist (vl-sort (vports) '(lambda (v1 v2) (< (car v1) (car v2)))))
(if (> (length vportlist) 1)
  (progn
    (command "_mspace") ;_ activate vport
    (foreach vport (cdr vportlist)
      (setvar "cvport" (car vport))
      (layerstate-restore
	x
	(vlax-vla-object->ename
	  (vla-get-activepviewport
	    (vla-get-activedocument (vlax-get-acad-object))
	  )
	)
	4
      ) ;_ restore
    ) ;_ foreach
    (command "_pspace") ;_ deactivate vport
  ) ;_ progn
) ;_ if
     ) ;_ progn
   ) ;_ if
 ) ;_ if
) ;_ defun

 

Tu peux entrer ULS en ligne de commande et tu seras invité à spécifier le nom de l'état de calque.

Ou entrer directement (uls "PLANCHER")

 

PS: j'ai ajouté un (if avant (layerstate-import ...) pour éviter une erreur au cas où le fichier n'existe pas.

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

Posté(e)

Merci à Brice et Gile,

 

Entre temps j'avais trouvé en retirant que vous l'indiquez le c:

 

Oups... c'est mon premier Lisp

 

Pour info, j'avais besoin de ce code pour l'intégrer dans ma programmation existante détaillée ci-après :

J'ai un plan d'intérieur (Autocad), un premier programme VB, analyse le plan en fonction d'une charte graphique donnée, alimente un base Access des diverses surfaces (SHOB, SHON, SUB, SUN, CAREZ, inf 1.80, PLANCHER.... Nature des espaces)

 

Dans Access, j'ai un formulaire que permet de spécifier les couleurs des shadings pour chacun des types de surfaces, et également en fonction de la nature des espaces.

 

Un autre programme VB, interroge Access pour générer les hachures classifiées dans des calques spécifiques, génère les espaces papiers, insère les cartouches légendes en renseignant les attributs (à partir des données d'Access), gère les ordres d'affichage.....

 

Une mise en page, (liée à un type de surface et liée à un fichier LAS) doit intégrer la visibilité restrictive de certains calques

Votre aide m'est précieuse car maintenant je suis en mesure de lors du traitement des mises en page de charger dans l'objet du papier les fameux fichiers LAS...

Il est important que je puisse appeler ce lisp en indiquant le nom du fichier LAS à restaurer.

 

Il n'y a plus qu'à imprimer... même si cette dernière est également faite via un autre programme (impression sur imprimante ou en pdf dénommés en automatique et stockés dans une arborescence précise.

 

:rolleyes: Merci à vous deux, je ne manquerai pas de vous solliciter prochainement

 

Mon objectif : peut-être porter tout mon vb en lisp B)

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é