-
Compteur de contenus
12 247 -
Inscription
-
Dernière visite
-
Jours gagnés
208
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par (gile)
-
manuel de personnalisation d\'Autocad
(gile) a répondu à un(e) sujet de pierredudu dans Débuter en LISP
Re, J'ai retrouvé quelques liens : sur ce site une description des principales fonctions LISP en français. Le cours N°1 sur CADxp ici Les réponses à lexercice du cours N°1 là Et le cours N°2 là En espérant avoir répondu à tes attentes. -
manuel de personnalisation d\'Autocad
(gile) a répondu à un(e) sujet de pierredudu dans Débuter en LISP
Salut, Pour ce qui est de la documentation AutoLISP en français, le sujet a été souvent abordé sur CADxp, mais je ne sais retrouver les sujets. Tu peux faire des recherches dans les forums. Il y a eu des leçons avec exercices et solutions. Personellement, quand je me suis mis au LISP, je me suis aussi remis à l'anglais ! Pour les boites de dialogue, voici 3 petits exemples, chacun avec son *.dcl et le *.lsp qui le controle : 1 _ Pour faire disparître la boite le temps d'une spécification à l'écran Fichier dcl à enregistrer sous hidedcl.dcl dans un dossier du chemin de recherche d'AutoCAD hidedcl:dialog{ label="Hide exemple"; : boxed_column{ label="Sélectionner un point"; :row{ :row{ :retirement_button{ label = "Choisir le point key = "hide"; mnemonic = "H"; alignment= centered; } } :column{ :edit_box{ label="X"; key="x_coord"; value="0.0000"; fixed_width=true; allow_accept=true; } :edit_box{ label="Y"; key="y_coord"; value="0.0000"; fixed_width=true; allow_accept=true; } :edit_box{ label="Z"; key="z_coord"; value="0.0000"; fixed_width=true; allow_accept=true; } } } } ok_cancel; } Le LISP qui le controle : (defun c:hidedcl (/ dcl_id what_next pt) (setq dcl_id (load_dialog "hidedcl.dcl")) (setq what_next 2) (while (>= what_next 2) (if (not (new_dialog "hidedcl" dcl_id)) (exit) ) (action_tile "accept" "(setq pt (list (atof (get_tile \"x_coord\")) (atof (get_tile \"y_coord\")) (atof (get_tile \"z_coord\")))) (done_dialog 1) (princ pt))" ) (action_tile "hide" "(done_dialog 4)" ) (if pt (progn (set_tile "x_coord" (rtos (car pt))) (set_tile "y_coord" (rtos (cadr pt))) (set_tile "z_coord" (rtos (caddr pt))) ) ) (setq what_next (start_dialog)) (cond ((= what_next 4) (setq pt (getpoint "\nSélectionnez un point: ")) ) ((= what_next 0) (prompt "\nFONCTION ANNULEE") ) ) ) (unload_dialog dcl_id) (princ) ) 2 _ Pour une liste déroulante : Fichier dcl à enregistrer sous pop_up.dcl dans un dossier du chemin de recherche d'AutoCAD pop_up:dialog{ label="Pop_up exemple"; :boxed_column{ label="Choisissez un nombre"; :popup_list{ label="Nombre :"; key="nbr"; edit_width=10; } } ok_cancel; } Le LISP qui le controle : (defun c:pop_up (/ liste n nbre) (setq liste (list "10" "20" "30" "40")) (setq dcl_id (load_dialog "pop_up.dcl")) (if (not (new_dialog "pop_up" dcl_id)) (exit) ) (start_list "nbr") (mapcar 'add_list liste) (end_list) (action_tile "accept" "(setq nbre (atof (nth (atoi (get_tile \"nbr\")) liste))) (done_dialog))" ) (start_dialog) (unload_dialog dcl_id) (princ nbre) (princ) ) 3 _ Pour un curseur (version modifiée) Fichier dcl à enregistrer sous slider.dcll dans un dossier du chemin de recherche d'AutoCAD curseur:dialog{ label="Slider exemple"; :boxed_row{ label="Choisissez un nombre"; :edit_box{ label="Nombre:"; key="nb"; value="12"; edit_width=4; allow_accept=true; } :slider{ key="slider_info"; value="12"; min_value=2; max_value=24; big_increment=1; small_increment=1; width=20; is_tab_stop=false; } } ok_cancel; } Le LISP qui le controle : (defun c:curseur (/ n dcl_id what_next) (setq dcl_id (load_dialog "slider.dcl") what_next 2 ) (while ( (if (not (new_dialog "curseur" dcl_id)) (exit) ) (action_tile "slider_info" (strcat "(if (or (= $reason 1) (= $reason 3))" "(progn (set_tile \"nb\" $value)" "(setq n (atoi $value))))" ) ) (action_tile "nb" "(if (or (= $reason 1) (= $reason 2)) (progn (set_tile \"slider_info\" $value) (setq n (atoi $value))))" ) (action_tile "accept" "(setq n (atoi (get_tile \"nb\"))) (done_dialog 1))" ) (setq what_next (start_dialog)) ) (unload_dialog dcl_id) (princ n) (princ) ) À plus ...[Edité le 28/9/2005 par (gile)] -
J'ai trouvé :P : La collection de blocs du document actif contient 2 blocs spéciaux ModelSpace Collection et PaperSpace Collection qui contiennent toutes les entités des espaces objet et papier. Donc, l'imbrication des deux vlax-for permet d'accéder à toutes les entités contenues dans tous les blocs du document actif (y compris les 2 blocs spéciaux). Sinon, les commandes vla-... ne sont pas documentées dans l'aide à "AutoLISP Functions" mais dans "ActiveX and VBA Reference" sans les préfixe vla- ou vla-get- ou vla-put ... Si tu travailles dans l'éditeur VisualLISP, sélectionner un nom de commande dans la fenêtre active et cliquer sur l'icone avec un "?" dans un phylactère ouvre directement l'aide à la page concernée. En espérant avoir répondu à ta demande. À plus ... [Edité le 28/9/2005 par (gile)]
-
Salut, J'apprends en même temps que toi. L'aide nous dit : Le premier argument (bl) est donc un symbole -comme n dans (foreach n ....)- et le second (a) la collection de blocs. L'expression à évaluer est un nouveau vlax-for qui evalue le if pour toutes les entités (ent) de chaque bloc (bl). Il me semble que la comparaison vlax-for / foreach n'est pas trop mauvaise, avec des collections à la place de listes. Je ne comprends pas bien à quel niveau sont les entités "point" non contenues dans les blocs sont évaluées. [Edité le 28/9/2005 par (gile)]
-
J'ai essayé ta macro. Escalier_quart_tournant fonctionne très bien et trace un escalier bien mieux balancé que sur certains plans d'archi. Juste une petite remarque, tu devrais pouvoir limiter le nombre de décimales affichées dans les champs "hauteur de marche" "Longueur de giron" et "Valeur du pas" pour une meilleure lisibilité (mais c'est vraiment un détail !) Bravo !
-
à l\'aide sur les blocs dynamiques
(gile) a répondu à un(e) sujet de thierry.garré dans AutoCAD 2006
Désolé ... :mad2: Je n'ai jamais eu qu'un petit aperçu des blocs dynamiques, mais il y a peut-être moyen avec un paramètre sur X Y et plusieurs actions d'étirement sur ce même paramètre mais agissant seulement sur la distance X (ou Y) avec des valeurs différentes. Je n'ai pas de version 2006 sous la main, ce ne sont que des souvenirs. -
Salut, Je vais essayer, je débute aussi en VisualLISP. Charge les fonctions ActiveX (il semble que ce ne soit plus indipensable depuis la version 2004) Attribue à "a" la collection de blocs du document actif de l'objet application AutoCAD. les deux (vlax-for ...) sont des fonctions itératives imbriquées pour soumettre toutes les entités (y compris celles contenues dans les blocs) à la conditionnelle (if ...) et les effacer si la réponse est "True". Un peu comme le ferait un (mapcar ...) pour une liste. Régénère la fenêtre active du document actif de l'objet application AutoCAD.
-
à l\'aide sur les blocs dynamiques
(gile) a répondu à un(e) sujet de thierry.garré dans AutoCAD 2006
Salut, Dans l'exemple que tu donnes, un action d'échelle devrait fonctionner, s'il s'agit de conserver des proportions. -
Il y a un lexique du vocabulaire spécifique aux escalier assez exhaustif ici Voilà un LISP qui place les points suivant la méthode de la herse de balancement : Nouvelle version ;;; H_BAL place des points déterminant les collets suivant la méthode de la herse de balancement (vl-load-com) ;;; bal_err Redéfinition de *error* (defun bal_err (msg) (if (or (= msg "Fonction annulée") (= msg "quitter / sortir abandon") ) (princ) (princ (strcat "\nErreur: " msg)) ) (vla-endundomark AcDoc) (setq *error* m:err m:err nil ) (princ) ) ;;; hers_bal Création des points sur un côté (defun hers_bal (pt ang col / ptf) (setq l1 (vla-addLine ModSp (vlax-3d-point pt) (vlax-3d-point (polar pt (+ ang (/ pi 2)) 1)) ) ptf (vlax-safearray->list (vlax-variant-value (vla-IntersectWith obj l1 acExtendOtherEntity) ) ) ptf (list (car ptf) (cadr ptf) (caddr ptf)) d_pt (vlax-curve-getDistAtPoint obj ptf) d_pt0 (vlax-curve-getDistAtPoint obj pt0f) foul (abs (- d_pt d_pt0)) dist (distance pt pt0c) alpha (atan foul dist) beta (- pi (* 2 alpha)) compt 1 ) (while ( (setq alpha (atan (* compt gir) dist) d_pt (/ dist (+ (/ (* (cos alpha) (sin beta)) (sin alpha)) (cos beta)) ) compt (1+ compt) ) (vla-addPoint ModSp (vlax-3d-point (polar pt ang d_pt))) (vla-put-color (vlax-ename->vla-object (entlast)) col) ) (vla-delete l1) ) ;;; Fonction principale (defun c:h_bal (/ AcDoc ModSp obj d_pt1 pt1f d_pt0 pt0f pt1c pt2c pt0c dist ang gir foul alpha beta compt d_pt l0 l1 ) (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)) ModSp (vla-get-ModelSpace AcDoc) m:err *error* *error* bal_err ) (vla-StartUndoMark AcDoc) ;; Entrées utilisateurs (while (or (not obj) (not (member (vla-get-ObjectName (setq obj (vlax-ename->vla-object obj))) (list "AcDbArc" "AcDbLine" "AcDbPolyline" "AcDbSpline" "AcDbEllipse") ) ) ) (setq obj (car (entsel "\nSélectionnez la ligne de foulée: " ) ) ) ) (initget 1) (setq pt1c (getpoint "\nPoint au premier collet balancé: ")) (initget 1) (setq pt0c (getpoint pt1c "\nPoint à l'angle des limons: ")) (initget 1) (setq pt2c (getpoint pt0c "\nPoint au dernier collet balancé: ")) (initget 7) (setq gir (getdist "\nSpécifiez le giron: ")) ;; Calculs (foreach pt '(pt1c pt2c pt0c) (set pt (trans (eval pt) 1 0)) ) (setq ang1 (angle pt1c pt0c) ang2 (angle pt2c pt0c) bis (/ (+ ang1 ang2) 2.0) l0 (vla-addLine ModSp (vlax-3d-point pt0c) (vlax-3d-point (polar pt0c bis 1)) ) pt0f (vlax-safearray->list (vlax-variant-value (vla-IntersectWith obj l0 acExtendOtherEntity) ) ) ) (cond ((equal ang1 ang2 1e-009) (cond ((equal pt1c pt2c 1e-009) (hers_bal pt1c ang1 256) ) (T (hers_bal pt1c ang1 1) (hers_bal pt2c ang2 3) ) ) ) (T (hers_bal pt1c ang1 256) (hers_bal pt2c ang2 256) ) ) (vla-delete l0) (vla-EndUndoMark AcDoc) (setq *error* m:err m:err nil ) (princ) ) Avec son petit dessin explicatif : http://img83.imageshack.us/img83/5582/hbal8pz.jpg. À plus ...[Edité le 27/9/2005 par (gile)][Edité le 30/11/2005 par (gile)] [Edité le 1/12/2005 par (gile)]
-
Super ton site, Il me semble que çà répond exactement à la demande première de ce fil. jifi, Christian (rebcao), il est déjà tout prêt votre cours sur le dessin d'un escalier ;)
-
Salut nazemrap, Je suis vivement intéressé par la manière dont tu as automatisé une herse de balancement. Je ne connais pas le VBA (si ce n'est à travers le peu que je connais de VisualLISP) mais c'est une bonne occasion d'essayer. En attendant l'adressse de ton site, pour ceux qui ne savent pas ce que c'est, la herse de balancement est une méthode graphique de calcul du balancement des escaliers (comme le trapèze de proportion décrit plus haut). On peut en trouver un exemple ici.
-
Salut bigsyke, Quand tu crées une barre d'outil, sa définition est automatiquement enregistrée dans le fichier *.MNS en cours d'utilisation (Versions antérieures à 2006). Tu peux donc, soit copier le code de définition de cette barre d'outil dans un fichier texte (bloc-note) et la recoller dans le fichier *.MNS de l'autre poste, soit copier tout le fichier *.MNS, l'enregistrer sous un autre nom (MonMenu.mns) dans un dossier du chemin de recherche et charger ce fichier avec la commande MENU.
-
Effectivement, çà marche tout de suite beaucoup mieux, merci
-
Bonsoir, Je ne sais pas si c'est dû à ce nouveau service, mais ce soir il me faut environ 3 minutes pour me connecter à CADxp et la même chose à chaque changement de page. La fenêtre reste bloquée avec comme message en bas de page : "En attente de sms.rentabiliweb.com..." Je suis sous Firefox, j'ai essayé avec IE, même topo.
-
Salut, Autre exemple : Tu soustrait un solide à plusieurs autre qui ne se touchent pas, après la soustraction les solides restants seront unis et là tu peux avoir besoin de les séparer.
-
Salut, Je ne suis pas sûr d'avoir bien compris mais avec : (setq safid (caddr (cadr (assoc -3 entite)))) et (setq entite (subst (cons -3 (list "SAF_ID" '(1002 . "{") (cons 1000 (itoa (+ increment (atoi (cdr safid))))) '(1002 . "}") ) ) (assoc -3 entite) entite ) ) çà semble marcher.
-
Commande espace papier ...
(gile) a répondu à un(e) sujet de lenoil dans Pour aller plus loin en LISP
Si, c'est dans l'onglet présentation que tu veux faire basculer une fenêtre de l'espace papier à l'espace objet (et vice-versa) les commandes sont : _MSPACE et _PSPACE -
Commande espace papier ...
(gile) a répondu à un(e) sujet de lenoil dans Pour aller plus loin en LISP
Re, Pour basculer de l'onglet "Objet" à l'onglet" Présentation", tu peux utiliser la variable sytème TILEMODE : (setvar "tilemode" 1) Active l'onglet objet. (setvar "tilemode" 0) Active le dernier onglet de présentation sélectionné (espace papier). [Edité le 21/9/2005 par (gile)] -
[lisp] Sélection d\'entités sur le dessin ...
(gile) a répondu à un(e) sujet de lenoil dans Pour aller plus loin en LISP
Salut, Tu peux créer des jeux de sélection avec la fonction (ssget), ses options et des filtres, et ce, avec ou sans intervention de l'utilisateur. Tu peux ensuite les modifier avec (entmod) et les mettre à jour dans la fenêtre avec (entupd). -
Salut, J'ai essayé aussi, çà marche :D Trop puissant, dirait-on à Marseille, à la limite çà fait même un peu peur :exclam: Je crois que je vais attendre d'être plus à l'aise en programmation pour jouer avec les réacteurs :cool: En tous cas merci, Patrick_35, pour les exemples, c'est très clair. À plus. [Edité le 21/9/2005 par (gile)]
-
Salut, Tu peux aller voir là
-
[DCL] et (lisp] Désactiver un bouton
(gile) a répondu à un(e) sujet de lenoil dans Pour aller plus loin en LISP
J'ai un peu modifié le code dcl (celui de gile) ci-dessus (enlevé des lignes qui ne servaient à rien) Tu trouvera des explications (en anglais) dans l'Aide aux développeurs -> AutoLISP Developer's Guide -> Working with Programmable Dialog Boxes -> Managing Dialog Boxes -> Functions for Hiding Dialog Boxes La réponse me semble être non, mais on peut la faire disparaître momentanément. [Edité le 20/9/2005 par (gile)] -
[DCL] et (lisp] Désactiver un bouton
(gile) a répondu à un(e) sujet de lenoil dans Pour aller plus loin en LISP
Un petit exemple qui, j'espère répond à tes questions : la boite de dialogue disparaît le temps de la sélection des objets, puis se ré-ouvre. Définition de la boite : test:dialog{ label="Test"; :button{ label="Choix des objets key="objt"; fixed_width=true; alignment=centered; } ok_cancel; } Le LISP qui la controle : (defun c:test (/ dcl_id boucle objets) (setq dcl_id (load_dialog "test.dcl")) (setq boucle 2) (while (>= boucle 2) (if (not (new_dialog "test" dcl_id)) (exit) ) (if objets (mode_tile "accept" 0) (mode_tile "accept" 1) ) (action_tile "objt" "(done_dialog 3)") (action_tile "accept" "(done_dialog 1)") (action_tile "cancel" "(done_dialog 0)") (setq boucle (start_dialog)) (cond ((= boucle 3) (setq objets (ssget)) ) ) ) (unload_dialog dcl_id) (princ) ) [Edité le 20/9/2005 par (gile)] -
Menu contextuel cotation
(gile) a répondu à un(e) sujet de (gile) dans Personnalisation, macros, DIESEL
J'ai essayé avec un AutoCAD.mns "vierge" et "shortcutmenu" à 11 : toujours la même chose ! Çà vient peut-être du poste ? De toute façons, ce n'est pas bien grave puisque çà marche en plaçant la commande en fin de menu. -
[DCL] et (lisp] Désactiver un bouton
(gile) a répondu à un(e) sujet de lenoil dans Pour aller plus loin en LISP
Les fonctions (action_tile key action-expression) (get_attr key attribute) (get_tile key) (mode_tile key mode) (set_tile key value) sont décrites dans l'Aide aux développeurs -> AutoLISP Reference -> AutoLISP Functions ou -> AutoLISP Developer's Guide -> Working with Programmable Dialog Boxes -> Programmable Dialog Box Reference -> Programmable Dialog Box Function Synopsis -> Tile and Attribute-Handling Functions Alors là, aucune idée !!! Je ne sais pas ce que veulent dire "modeless" et "modal".
