-
Compteur de contenus
12 247 -
Inscription
-
Dernière visite
-
Jours gagnés
209
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par (gile)
-
De mon côté, j'ai modifié ta première routine et j'ai conservé le (osnap (cadr (entsel)) "_near") plutôt que (vlax-curve-getClosestPointTo ... et je n'ai pas eu de "plantage", peut-être que les tests que j'ai fait ne sont pas assez poussés ? Je me suis aussi inspiré d'une remarque que faisait Tramber (ici) concernant le fait que (vlax-curve-getParamAtPoint accepte aussi bien un ENAME qu'un VLA-OBJECT comme argument. ;;; CLOSEST_VERTICES Retourne la liste des coordonnées (dans le SCG) ;;; des deux sommets d'un segment de polyligne (liste entsel) ou nil (defun closest_vertices (ent / par pt) (cond ((and (listp ent) (vl-every 'numberp (cadr ent)) (= (length (cadr ent)) 3) (= (type (car ent)) 'ENAME) (or (= (cdr (assoc 0 (entget (car ent)))) "LWPOLYLINE") (and (= (cdr (assoc 0 (entget (car ent)))) "POLYLINE") (zerop (logand 118 (cdr (assoc 70 (entget (car ent)))))) ) ) ) (vl-load-com) (setq pt (trans (osnap (cadr ent) "_near") 1 0) ent (car ent) par (vlax-curve-getParamAtPoint ent pt) ) (list (vlax-curve-getPointAtParam ent (fix par)) (vlax-curve-getPointAtParam ent (1+ (fix par))) ) ) ) ) Et pour tester la routine : ;;; pt_vtx Dessine deux points sur les sommets du segment de polyligne sélectionné (defun c:pt_vtx (/ AcDoc ModSp obj lst) (vl-load-com) (setq AcDoc (vla-get-activedocument (vlax-get-acad-object)) ModSp (vla-get-ModelSpace AcDoc) ) (vla-startUndoMark AcDoc) (while (not (setq obj (entsel "\nSélectionnez le segment de polyligne à utiliser: " ) ) ) ) (cond ((setq lst (closest_vertices obj)) (vla-addPoint ModSp (vlax-3d-point (car lst))) (vla-addPoint ModSp (vlax-3d-point (cadr lst))) ) (T (princ "\nErreur: entité non valide.")) ) (vla-endUndoMark AcDoc) (princ) ) [Edité le 23/4/2006 par (gile)]
-
Salut Didier, Je ne pense pas qu'il y ait d'éditeur VisualLISP dans les LT (si elles sont "bridées" pour l'interprétation, il serait étrange qu'elles aient un outil de création/modification de LISP). :casstet:
-
Salut et bienvenue, Je ne connais pas les possibilités de LT Extender, et je ne cripte pas mes LISP, je préfère partager et soumettre à la critique (constructive). Il y a dans la Faq AutoLISP de Reini Urban un chapitre consacré à la protetion et au criptage des LISP avec des propositions de softs, çà date sûrement, mais certains sont peut-être toujours valables. Il y a aussi Protect.exe dans la zone Téléchargements proposés par les membres. [Edité le 22/4/2006 par (gile)]
-
C'est curieux, parceque la fonction cop_err contient (if sel (command "_.ersae" sel "")) qui devrait effacer la sélection. Je corrige le problème d'accentuation dans le code donné plus haut.
-
Salut, Une fonction erreur pour pour c:cop, faite en aveugle dans un cyber-pub avec un clavier qwerty, pas d'AutoCAD sous la main, donc a verifier. (defun c:cop (/ cop_err sel pA pB) (defun cop_err (msg) (if (= msg "Fonction annulée") (princ) (princ (strcat "\nErreur: " msg)) ) (if sel (command "_.erase" sel "") ) (setq *error* m:err m:err nil ) (princ) ) (setq m:err *error* *error* cop_err ) (command "_.copy" (setq sel (ssget)) "" "" "") (setq pA (getpoint "\nSpécifiez le point de base: ")) (command "_.move" sel "" pA pause) (setq pB (getvar "lastpoint")) ;;;(command "_.erase" sel "") (setq *error* m:err m:err nil ) ) [Edité le 20/4/2006 par (gile)]
-
Salut, Pour le premier LISP (qui copie tout dans un tableau Excel) apres avoir copier/coller le code dans le bloc note, tu l'enregistres sous le nom que tu veux avec l'extension .lsp, puis tu le charges dansAutoCAD et tu tapes listbylayer sur la ligne de commande, c'est ce qui est ecrit apres le (defunc: au debut du code. Pour le code de Bonuscad qui s'execute automatiquement (c'est une fonction lambda et pas un defun donc il suffit de copier/coller le code sur la ligne de commande) si tu veux relire tranquilement, tape F2 apres l'execution. Dans le dialogue suivant entre Bonus et moi il est surtout une question de "style".
-
Salut, Pour aligner ton image et la mettre a l'echelle, tu peux utiliser la methode decrite ici.
-
Il m'est venu une illumination, sur la route des vacances. Plutot que les attributions de variables, une liste associative : (("LINE" . 6) ("POINT" . 5) ...) (if (setq nbr (assoc typ_ent lst_ent)) (setq lst_ent (subst (cons typ_ent (1+ (cdr nbr))) nbr lst_ent)) (setq lst_ent (cons (cons typ_ent 1) lst_ent)) ) et ensuite : (itoa (cdr (assoc typ_ent lst_ent))) C'est fait en aveugle, a verifier.
-
Merci, Interéssant les attributions de variables. Dans le même genre, on peut écrire : (setq x (read (strcat "nbr_" typ_ent))) (if (not (member typ_ent lst_ents)) (progn (setq lst_ents (cons typ_ent lst_ents)) (set x (cons 1 typ_ent)) ) (set x (cons (1+ (car (eval x))) typ_ent)) ) À la place de : (if (not (member typ_ent lst_ents)) (progn (setq lst_ents (cons typ_ent lst_ents)) (eval (read (strcat "(setq nbr_" typ_ent " (cons 1 typ_ent))"))) ) (eval (read (strcat "(setq nbr_" typ_ent " (cons (1+ (car nbr_" typ_ent ")) typ_ent))"))) ) Salut, et bonnes vacances, pour moi en tout cas ;)
-
En récupérant les SCU enregistrés. NOTA : Les noms de SCU ne doivent pas contenir d'espaces et avoir chacun une (ou plusieurs) majucule différente (et pas G de General) ou un numéro à taper au clavier (exemple : Face, DRoite, Gauche, DEssus ou scu1 scu2 ...) Vois la fonction initget dans l'aide. Version commentée ;;; Demande à l'utilisateur des spécifier un des SCU enregistrés et lance la commande ligne (defun c:ucs_line (/ concat scu lst) ;;Concaténtion de "General" et de la liste de noms de scu avec un séparateur ;; exemple (concat "/" '("scu2" "scu1")) retourne "General/scu1/scu2" (defun concat (s l) (strcat "General" (apply 'strcat (mapcar '(lambda (x) (strcat s x)) (reverse l)) ) ) ) ;; Création de la liste des SCU enregistrés (setq scu (tblnext "UCS" T)) (while scu (setq lst (cons (cdr (assoc 2 scu)) lst) scu (tblnext "UCS") ) ) ;; Invite pour le choix du SCU à activer (initget (concat " " lst)) (setq scu (getkword (strcat "\nChoix du SCU à activer [" (concat "/" lst) "]: " ) ) ) ;; Activation du SCU sélectionné (if (= scu "General") (command "_.ucs" "_world") (command "_.ucs" "_restore" scu) ) ;; Donne la main à l'utilisateur pour la commande "_line" (command "_.line" (while (not (zerop (getvar "cmdactive"))) (command pause) ) ) ) [Edité le 15/4/2006 par (gile)]
-
Oui, par la fenêtre Propriétés, par exemple.
-
Ou encore, une petite boite de dialogue ici http://xs76.xs.to/pics/06156/Echltp.PNG
-
Salut, Un premier jet pour enregistrer dans un fichier Excel, liste toutes les entités présentes dans le dessin et seulement elles. Nouvelle version (defun c:ListByLayer (/ ss n typ e_lst descr lay name file) (setq ss (ssget "_x")) (cond (ss (repeat (setq n (sslength ss)) (if (not (member (setq typ (cdr (assoc 0 (entget (ssname ss (setq n (1- n)))))) ) e_lst ) ) (setq e_lst (cons typ e_lst)) ) ) (setq e_lst (vl-sort e_lst ' descr (apply 'strcat (cons "LAYER\t" (mapcar '(lambda (x) (strcat x "\t")) e_lst) ) ) lay (tblnext "LAYER" T) ) (while lay (setq name (cdr (assoc 2 lay)) descr (strcat descr "\n" name "\t" (apply 'strcat (mapcar '(lambda (x / ss) (strcat (if (setq ss (ssget "_X" (list (cons 0 x) (cons 8 name)) ) ) (itoa (sslength ss)) "0" ) "\t" ) ) e_lst ) ) ) ) (setq lay (tblnext "LAYER")) ) (setq file (open (getfiled "Créez ou sélectionnez un fichier" "" "xls" 1) "w" ) ) (princ descr file) (close file) ) (T (alert "Aucune entité dans le dessin !")) ) (princ) ) [Edité le 15/4/2006 par (gile)]
-
Essaye le COMPILO de Tramber.
-
Patrick propose aussi un utilitaire pour Firefox ici
-
Toutes les explications dans Menu principal (en haut à gauche) -> Support -> CADxp, le site, il y a un chapitre sur l'utilisation du BBCode.
-
tblsearch et style de texte et de ligne ?
(gile) a répondu à un(e) sujet de DenisHen dans Débuter en LISP
Oui, çà correspond bien à else (if (condition) (action_si_condition_remplie) (action_si_condition_non_remplie) ; optionnel ) Consulte l'aide, même si c'est en anglais, c'est bien foutu et aussi ce lien que je t'avais déjà donné. -
Nouveauté 2006, la saisie des coordonnées est, par défaut, en coordonnées relatives. Vas voir ici ou là. [Edité le 14/4/2006 par (gile)]
-
Çà je ne sais pas le faire, et je ne suis pas sûr que ce soit possible. La compilation en .fas ou .vlx est aussi une forme de cryptage (pour ceux qi ne veulent pas parteger leur LISP), la manoeuvre inverse est donc, à priori, impossible c'est pourquoi il faut conserver les codes sources (en cas de modifications ou améliorations à apporter).
-
Un petit LISP qui met tous les composants des blocs sélectionnés sur le calque 0. Faire Entrée, Espace ou clic droit sélectionne tous les blocs du dessin. Version "allégée" ;;; C:BLOC->0 Place tous les composants des blocs sélectionnés sur le calque 0 (defun C:BLOC->0 (/ bloc_err echo ss n bloc nom pt) ;; Redéfinition de *error* (defun BLOC_ERR (msg) (if (= msg "Fonction annulée") (princ) (princ (strcat "\nErreur: " msg)) ) (command "_undo" "_end") (setvar "cmdecho" echo) (setq *error* m:err m:err nil ) (princ) ) ;; Fonction principale (setq m:err *error* *error* BLOC_ERR echo (getvar "cmdecho") ) (command "_undo" "_begin") (setvar "cmdecho" 0) (princ "\nSélectionnez les blocs à modifier ou : ") (if (not (setq ss (ssget '((0 . "INSERT"))))) (setq ss (ssget "_X" '((0 . "INSERT")))) ) (repeat (setq n (sslength ss)) (setq bloc (ssname ss (setq n (1- n))) nom (cdr (assoc 2 (entget bloc))) pt (cdr (assoc 10 (entget bloc))) ) (command "_explode" bloc) (command "_chprop" "_p" "" "_layer" "0" "") (command "_-block" nom "_y" pt "_p" "") (command "_-insert" nom "_non" pt "" "" "") (princ (strcat "\nLe bloc \"" nom "\" a été redéfini.")) ) (command "_undo" "_end") (setvar "cmdecho" echo) (setq *error* m:err m:err nil ) (princ) ) [Edité le 14/4/2006 par (gile)]
-
Oui, tu peux les supprimer. Le fichier .prv contient les options définies à l'aide de Créer une application, un "historique" en quelque sorte. Le fichier .fas est une compilation du ou des sources LISP compilé ensuite dans le .vlx avec les aurtres fichiers (.dcl et/ou .lsp) s'il y en a. Si tu n'as compilé que des LISP (mode Simple), charger le fichier .fas est équivalent à charger le .vlx.
-
Salut, Je me permets de te répondre à la place de Didier à la seconde question. Dans l'éditeur VisualLISP (Depuis AutoCAD Outils -> AutoLISP -> Editeur VisulLISP) : Fichier -> Créer une application -> Assistant Nouvelle apllication... Dans la boite de dialogue Mode Assistant : - si ton application ne contient pas d'autres fichiers qu'un ou des fichiers LISP (pas de .dcl pour les boites de dialogue) choisis le mode Simple, Suivant> spécifie l'emplacement et le nom de l'application, Suivant> ajoute le ou les sources LISP à compiler, Suivant> Fin. - si ton application contient aussi un ou des fichiers .dcl, choisis le mode Expert, Suivant> spécifie l'emplacement et le nom de l'application, Suivant> ne coche pas la case Espace nom différent Suivant> ajoute le ou les sources LISP à compiler, Suivant> ajoute le ou les sources .dcl, Suivant> laisse Standard coché Suivant> Fin.
-
Rien de divin la dedans, c'est parceque le hasard des choses m'a fait rencontrer ce problème avec (apply ... que je peux te donner une réponse.
-
Salut, Si tu veux juste récupérer la "copie" du jeu de sélection, tu peux inverser la manoeuvre, copier le jeu de sélection sans déplacement, puis le déplacer : (command "_.copy" (setq sel (ssget)) "" "" "") (command "_.move" sel "" (setq pA (getpoint)) pause) (setq pB (getvar "lastpoint")) (command "_.erase" sel "")
-
(setq n "c:\\toto.lsp") (vl-catch-all-apply 'load (list n)) Si tu fait '(n) n n'est pas évalué : c'est la liste contenant la variable n, (list n) tu fais une liste avec la valeur de n. Si (setq n "c:\\toto.lsp") '(n) retourne (n) (list n) retourne ("c:\\toto.lsp")
