Aller au contenu

bseb67

Membres
  • Compteur de contenus

    833
  • Inscription

  • Dernière visite

Tout ce qui a été posté par bseb67

  1. Tient comme c'est bizarre :exclam: , j'ai des fois le même problème lorsqu'un de mes lisps mouline pas mal. Et quand ca arrive à un des dessinateur:"seb, t'as fait quoi, ya plus de licence!?" Je me demande si ce n'est pas le faite de "cramer" mon cpu, et que cela ralenti le petit message de sorti qu'autocad fait régulièrement pour vérifier la licence :casstet: Revenons sur le bug de rebcao, tu t'es déjà fait démagnétiser? ou pris un flux d'ondes positives? Sinon faudrai y penser ;)
  2. Re, action_tile se fait comme ceci: (action_tile clé "todo") ou (action_tile clé "(todo1)(todo2)") et non (action_tile clé "todo1" "todo2") mais le mieux si tu veux exécuter plusieurs choses c'est d'appeler une fonction dans laquelle tu fais tout (en la déclarant avant le action_tile: (defun todo_cle1() (setq a 2 b 3) (print "blabla") (mettre_image image1) ) (action_tile clé1 "(todo_cle1)") [Edité le 20/1/2009 par bseb67]
  3. bseb67

    Distribution qui Bug

    Re, J'ai le même _vernum, donc là je ne sais pas trop d'où peut venir le bug. Sinon contacte moi par mp, je te laisserai alors mon mail perso pour que tu m'envoies un fichier d'exemple où ca bug.
  4. bseb67

    Distribution qui Bug

    Salut! Chez moi, j'ai une MEP 2008, mais pas ce bug :casstet: . J'ai fermé le fichier puis rouvert => ok, toujours en distribuer fermé autocad puis rouvert autocad => ok, toujours en distribuer As-tu mis à jour autocad?
  5. Salut paulinedubois! Tout d'abord il faut donner les deux dimensions pour l'image dans la dcl: ... :image_button{ key="image"; width=25; height=25; } ... : radio_button { label = "chaise"; key = "ch"; value = 1; } : radio_button { label = "table"; key = "ta"; } : radio_button { label = "canape"; key = "ca"; } Ensuite dans ton lisp: (defun mettre_image( sld / MonImage width height) (setq MonImage "image") ; on récupère les dimensions (setq width (dimx_tile MonImage) ; Largeur de la case height (dimy_tile MonImage) ; Hauteur de la case ) ; on lance le chargement de l'image (start_image MonImage) (fill_image 0 0 width height 0) ; Couleur de fond (slide_image 0 0 width height sld) ; Image (end_image) ) ; mettre_image et cette fonction tu la mets dans celle qui gère la dcl: (defun test_dcl() ... ; on définit les actions (action_tile "chaise" "(mettre_image ma_chaise_sld)") (action_tile "table" "(mettre_image ma_table_sld)") (action_tile "canape" "(mettre_image mon_canape_sld)") ) ; test_dcl Mais avant cela, il faut générer un sld avec tes blocs avec cette commande: _mslide. Voilà, en espérant que cela t'aidera ;) [Edité le 19/1/2009 par bseb67]
  6. bseb67

    L\'EEE TOP, c\'est top!

    Salut patrick! Tu l'as eu où?
  7. bseb67

    Lisp generator

    Au peu que j'ai lu, c'est un générateur par menu. Si tu veux faire quelque chose, tu utilises le bouton qu'il faut, et il te pond le code lisp avec commentaire. Mais c'est bof bof, il faudra quand même mettre les mains dedans, car tu veux bien accéder à des variables, optimiser le code. Moi, j'ai mon super générateur manuel: mes mains et mes multiples petites et grosses fonctions.
  8. Bon, voilà ma petite sauce, la fonction renvoie uniquement une liste de points, il faut donc faire ainsi: (if (= (type (setq lp (get_polygone_de_selection 1))) 'LIST) (setq sel (ssget "_cp" lp)) ) ; VARIABLES GLOBALES (setq VAR_EPSILON 1e-6 ; codes touches clavier VAR_KEYBOARD_ENTER 13 VAR_KEYBOARD_SPACE 32 VAR_KEYBOARD_F3 6 VAR_KEYBOARD_F4 20 VAR_KEYBOARD_F5 5 VAR_KEYBOARD_F6 4 VAR_KEYBOARD_F7 7 VAR_KEYBOARD_F8 15 VAR_KEYBOARD_F9 2 VAR_KEYBOARD_F10 21 VAR_KEYBOARD_F11 23 VAR_KEYBOARD_F12 31 ) ;--------------------------------------; ; nom: get_polygone_de_selection ; ; role: renvoie les coordonnées des ; ; points formant un polygone que ; ; l'utilisateur saisi à l'écran ; ; par la souris ; ; param: flag => style d'affichage pour; ; la sélection: ; ; 0 -> fenêtre ; ; autre -> capture ; ; retour: une liste de points 3D ; ; -1 si échap ; ; nil si erreur ; ; date: 13/01/2009 ; ; BLAES Sébastien ; ;--------------------------------------; (defun get_polygone_de_selection( flag / fonc_name res loop plist end_msg msg gr poly pt vla_obj) (setq fonc_name "get_polygone_de_selection: " res nil loop T plist '() end_msg "Point (Clic)[gauche ajout/ droit retrait]:" msg (strcat "Premier " end_msg) ) (while (= loop t) (cond ; gestion de la touche échap ((= (vl-catch-all-error-p (setq gr (vl-catch-all-apply 'grread (list T 8 0)))) t) (setq loop -1 res -1) (and poly (/= (entget poly) nil) (entdel poly) (setq poly nil)) ) (t ; on construit le message à afficher (cond ((= (length plist) 0) (setq msg (strcat "1er " end_msg)) ) ((> (length plist) 0) (setq msg (strcat (itoa (1+ (length plist))) "ème " end_msg)) ) (t (setq msg end_msg) ) ) ; cond ; on test si on doit ré-afficher le message (if (/= msg (getvar "lastprompt")) (progn (setq lastprompt (append lastprompt (list (getvar "lastprompt")))) (princ (strcat "\n" msg)) (princ) ) ; progn ) ; if ; on supprime la polyligne s'il le faut (and poly (/= (entget poly) nil) (entdel poly) (setq poly nil)) (setq pt (cadr gr)) (cond ; mouvement souris ((= (car gr) 5) (cond ((> (length plist) 0) (setq poly (entmakex (append (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline") ; nombre de point (cons 90 (1+ (length plist))) ; largeur de la polyligne (cons 43 0.0) (cons 70 1)) ; mapcar pour les sommets (mapcar '(lambda (x) (cons 10 x)) (append plist (list pt)))))) ; on test le flag, si c'est différent de 0, on highlight la polyligne ; pour mettre en tiret les lignes de la polyligne (cond ((= flag 0) ) ((= poly nil) ) ((/= (type (setq vla_obj (vlax-ename->vla-object poly))) 'VLA-OBJECT) ) (t (vla-Highlight vla_obj :vlax-true) ) ) ; cond ) (t (setq poly nil) ) ) ; cond ) ; clic gauche ((= (car gr) 3) (cond ; on test si pt n'appartient pas à plist ((/= (apply '+ (mapcar '(lambda (point_to_test) (if (= (equal pt point_to_test VAR_EPSILON) t) 1 0)) plist)) 0) (princ (strcat fonc_name "ERREUR ce point à déjà été choisi")) ) ; on test s'il n'y a pas d'intersection entre la ligne que l'on veut créer et celles formées par plist ((= (check_intersection plist pt) t) (print "croisement") ) (t (setq plist (append plist (list pt))) ) ) ; cond ) ; clic droit ((= (car gr) 25) (princ (strcat "\nAnnulation du dernier point saisi.")) (princ) (setq plist (vl-remove (last plist) plist)) ) ; on gère le clavier ((= (car gr) 2) (cond ((or (= pt VAR_KEYBOARD_ENTER) (= pt VAR_KEYBOARD_SPACE)) ; on fini la boucle ; et on stocke la liste des points (setq loop nil res plist ) ; setq ) (t (princ (strcat "\nCette touche du clavier est non gérée.")) (princ) ) ) ; cond ) (T (setq res nil loop nil) ) ) ; cond ) ) ; cond ) ; while (princ "\n") res ) ; get_polygone_de_selection ;------------------------------------------; ; nom: check_intersection ; ; role: test si la ligne allant du premier ; ; point contenu dans list_pt à pt ou ; ; la ligne allant du dernier point à ; ; pt ne croisent pas une des lignes ; ; formées par deux points consécutifs; ; de list_pt : ; ; list_pt(i) et list_pt(i+1) ; ; param: list_pt => liste de points 3D ; ; pt => point 3D ; ; retour: t si croisement ; ; nil sinon ; ; date: 13/01/2009 ; ; BLAES Sébastien ; ;------------------------------------------; (defun check_intersection( list_pt pt / fonc_name res list_pt_tmp p_start p_end) (setq fonc_name "check_intersection: " res nil list_pt_tmp list_pt p_start (car list_pt) p_end (last list_pt)) (cond ; il doit y avoir au moins 3 points dans list_pt_tmp sinon il n'y a pas intersection ((or (= list_pt_tmp nil) (< (length list_pt_tmp) 3)) ) (t ; on va boucler sur la liste, afin de tester si les lignes pt-p_start ou pt-p_end ; ne croisent pas une autre ligne formée des points list_pt_tmp(i) list_pt_tmp(i+1) (while (and (= res nil) (> (length list_pt_tmp) 1)) (if (or (= (croisement_lignes (car list_pt_tmp) (cadr list_pt_tmp) pt p_start) t) ; on test si la ligne ligne_tmp croise pt-p_start (= (croisement_lignes (car list_pt_tmp) (cadr list_pt_tmp) pt p_end) t)) ; on test si la ligne ligne_tmp croise pt-p_end (setq res t) ) ; if ; on retire le premier élément de la liste temporaire de travail (setq list_pt_tmp (cdr list_pt_tmp)) ) ; while ) ) ; cond res ) ; check_intersection ;--------------------------------------; ; nom: croisement_lignes ; ; role: test si la ligne P11-P12 croise; ; la ligne P21-P22 ; ; param: P11 => point 3D n°1 ligne 1 ; ; P12 => point 3D n°2 ligne 1 ; ; P21 => point 3D n°1 ligne 2 ; ; P22 => point 3D n°2 ligne 2 ; ; retour: t si croisement ; ; nil sinon ; ; date: 13/01/2009 ; ; BLAES Sébastien ; ;--------------------------------------; (defun croisement_lignes( P11 P12 P21 P22 / fonc_name res inter) (setq fonc_name "croisement_lignes: " res nil) ;on charge la calculatrice géométrique si besoin (if (not (member "geomcal.arx" (arx))) (arxload "geomcal.arx")) (cond ; on test s'il y a intersection ((= (setq inter (cal "ill(P11, P12, P21, P22)")) nil) ) ; s'il y en a une, on vérifie que ce n'est pas P11 ((= (equal inter P11 VAR_EPSILON) t) ) ; s'il y en a une, on vérifie que ce n'est pas P12 ((= (equal inter P12 VAR_EPSILON) t) ) ; s'il y en a une, on vérifie que ce n'est pas P21 ((= (equal inter P21 VAR_EPSILON) t) ) ; s'il y en a une, on vérifie que ce n'est pas P22 ((= (equal inter P22 VAR_EPSILON) t) ) ; il faut vérifier aussi si inter se trouve bien sur les segments [P11-P12] et [P21-P22] ((and (= (compris_entre_2D inter P11 P12) t) (= (compris_entre_2D inter P21 P22) t)) ; c'est bien une intersection (setq res t) ) ) ; cond res ) ; croisement_lignes ;------------------------------------; ; nom: compris_entre_2D ; ; role: test si le point p_test est ; ; compris entre les coordonnées; ; de L_p1 et L_p2 ; ; param: p_test => point 3D à tester ; ; L_p1 => premier point ; ; L_p1 => deuxième point ; ; retour: t si vrai ; ; nil sinon ; ; date: 11/03/2008 ; ; BLAES Sébastien ; ;------------------------------------; (defun compris_entre_2D( p_test L_p1 L_p2 / fonc_name xt yt x1 y1 x2 y2) (setq fonc_name "compris_entre_2D: " res nil) (cond ; p_test ((= (setq xt (car p_test)) nil) ) ((= (setq yt (cadr p_test)) nil) ) ; L_p1 ((= (setq x1 (car L_p1)) nil) ) ((= (setq y1 (cadr L_p1)) nil) ) ; L_p2 ((= (setq x2 (car L_p2)) nil) ) ((= (setq y2 (cadr L_p2)) nil) ) ((and (or (<= x1 xt x2) (<= x2 xt x1)) (or (<= y1 yt y2) (<= y2 yt y1))) (setq res t) ) ) ; cond res ) ; compris_entre Voilà. [Edité le 14/1/2009 par bseb67]
  9. Euh, usegomme ne s'incrimine pas, car: fautes de conjugaison uniquement. [Edité le 14/1/2009 par bseb67]
  10. Re, En fait je cherchai a reproduire la même chose que (command "_select" "_cp"), mais je viens de faire un truc à ma sauce. Et étant un peu tordu, j'ai voulu tester un truc, qui bien-sur devrai ne pas être valable mais marche quand même. Etant curieux, j'ai fait la même chose avec select, et bien...... Il y a le même bug :D faites un triangle, et pour le 4 ème, si on croise le polygone, autocad nous jette en disant qu'il ne faut croiser, mais si vous alignez le 3ème point avec le 1er et le 4ème, et bien ca marche. Je vais mettre mon code en plus jolie forme, et le poserai plus tard. merci encore.
  11. Tramber: ce n'est pas vraiment ca que je cherche. Patrick_35: je pensais que terpri serai une fonction miracle, mais en fait non :( . Oui je sais qu'un (ssget "_cp" suivi_d_une_liste_de_points) marche, mais ce n'est pas tout à fait ca. L'utilisateur doit choisir les objets, d'abord je lançai un menu demandant si capture ou si polygone, et boucler là-dessus afin de permettre à l'utilisateur d'annuler la dernière sélection. Mais je crois que je vais simplement lancer un ssget, stocker les objets choisis, trouver la zone graphique concernée pour faire un zoom sur la sélection au cas ou.
  12. Salut! Pour un de mes lisps, j'aimerai pouvoir faire une sélection par polygone. J'ai essayé ceci: (command "_select" "_cp") mais le problème c'est que le lisp continu sans attendre que la sélection soit finie :mad: La fonction ssget, en entrant l'option cp dans "choix des objets" lance la sélection par polygone. Mais je ne veux pas que l'utilisateur tape le cp. Et le (ssget "_cp") attend comme 2ème argument la liste des points. J'ai trouvé quelque chose qui pourrai aller, mais je ne souhaites pas l'utiliser, car c'est une fonction des express tools: (acet-ui-polygon-select flag) avec flag: 0 si trait plein ou autre si trait en tiret. Cette fonction demande les points du polygone et les renvoie simplement. une fonction équivalente me conviendrai aussi, afin de l'envoyer dans le ssget Merci.
  13. bseb67

    Avis sur config svp

    Salut phil! Moi je suis plutot pro intel. Mais le cpu amd à l'air pas mal: fréquence de 3.1Ghz, cache L1 de 2*128Ko, mais le cache L2 à 2*1Mo c'est un peu bête de mettre si peu. Car le E8400 n'a que 2*32Ko de cache L1, mais 2*3Mo en L2 pour une fréquence de 3Ghz. En ram les 3*1Go je trouve ca nul, le mieux c'est 4*1Go ou 2*2Go. Pour la CG, celle de la deuxième config me parait un peu juste. Chez nous au bureau, nos 3 derniers PC reçus (il y a 6 mois) ont le E8400, il tourne super bien, avec 2*2Gb PC2-6400 (400MHz) un Seagate ST316081 5AS 160Go SATA2 (7200 tpm) comme DD et une nVidia Quadro FX4600 (768Mo) comme CG. Avec l'écran 24pouces, on était à 2400HT. Si tu veux bosser sur plusieurs plans en même temps, achetes sinon deux PC à 1.000€ aulieu d'un à 2.000. ;)
  14. Salut, Pour l'avoir essayer plusieurs fois, l'exportation de clé ne marche pratiquement jamais. Lorsque l'on acheté nos nouveaux pc, j'ai voulu l'utiliser: sur les 10PC, cela n'a fonctionné qu'une seule fois. :mad: Les autres fois c'était: clé invalide, licence expirée,.... Donc petit mail à autodesk: authcodes.neu@autodesk.com en donnant la version d'autocad, le nom de l'entreprise, le numéro de licence, le code de requête et un petit message disant que l'on voulait l'activer sur un nouveau pc remplaçant un ancien. J'ai fait de même pour les images disques lors de remise à plat de machines.
  15. bseb67

    Numéro de révision

    Propulate fait parti des express tools, si tu tappes la commande propulate et qu'il te dit commande inconnue, c'est que tu n'as pas les express tools d'installés. Pour la quantité de bloc, avec un champ je ne pense pas que se soit possible. Et puis il y a quantité et quantité, car quantité quelque soit le bloc, par nom de bloc, par nom de bloc présent sur l'espace encours (objet ou papier), et bloc dans bloc aussi ??? pour ca, il faut faire un lisp (ou autre prog).
  16. bseb67

    Numéro de révision

    Salut sergio, Est-ce que tu as l'onglet personnaliser dans ta fenêtre propriété du dessin? Si oui, sert toi de ca alors. Tu peux créer une propriété de nom "numéro de révision" et lui affecter une valeur que tu peux mettre dans un champ. PS: Par contre pour modifier la valeur sans passer par fichier/propriété du dessin je ne sais. a moins de faire un petit lisp pour ca. Ben voilà, maintenant je sais quoi faire entre midi et deux. Un petit lisp qui créer la propriété, renvoie sa valeur, la modifie ou la supprime. :)
  17. Bonne année, bonne santé et bon autocad 2009 ;) ;) ;) .
  18. Salut! Lorsque tu déclares une fonction, tu peux l'appeler à la fin du fichier lisp en faisant simplement ceci: (defun ma_fonction( arg1) (princ arg1) (princ) ) ; ma_fonction (ma_fonction) pour une commande: (defun c:ma_commande( arg1) (princ arg1) (princ) ) ; c:ma_commande (c:ma_commande) Ainsi, lorsque tu charges un lisp, il lancera la fonction au commande. Mais si en plus u veux qu'elle se lance à l'ouverture d'un plan, suit le conseil de rebcao.
  19. bseb67

    Copie equidistante

    Re, En fait pour le 3, cela dépend de l'utilisateur, et puis j'ai relut le début du code: "Copier à équidistance entre l'original et la première copie" => c'est donc clair ;) et moi qui ne suit plus trop réceptif :P. Normal, c'est bientot les vacances, avec peut-être une nouvelle voiture pour noël pour moi :D , et un tas de bredele qui m'attend à la maison (que j'ai fait ces deux derniers week-end) :cool:
  20. bseb67

    Copie equidistante

    Salut Matt666! Chez moi ca marche très bien, mais il y a des petits trucs : 1- il demande deux fois le "point de base", au lieu de "point de base" et "point d'arrivée". 2- on peut copier avec un déplacement de 0, à part faire le cochon dans le dessin, ce serai mieux de le bloquer 3- le nombre de copies équidistantes est interne, je m'explique: je choisi 5 copies, mais en fait je me retrouve avec 6 fois mes éléments, celui qui à servi pour le point d'arrivée et donc 5 copies entre le point de base et ce point. Sinon, je pense l'ajouter dans ma fonction de copie. Car travaillant avec des groupes, il faut que je rajoute dans le groupe existant les entités et non créer un nouveau groupe sans nom. [Edité le 18/12/2008 par bseb67]
  21. ZoomObject de (Gile) prend en argument une liste d'objets vl. Je vais faire la une variante de ma fonction, mais demain, là j'ai encore un fichier à traité puis direct à la maison :D
  22. Voilà mon premier jet: ;---------------------------------------; ; nom: faire_selection ; ; role: renvoie une sélection d'entités ; ; définie par une suite de handels; ; stockés dans chaine avec une ","; ; comme séparateur ; ; param: chaine => chaine de caractères ; ; contenant une suite ; ; de handels ; ; retour: une sélection ; ; (qui peut être vide) ; ; nil si erreur ; ; date: 17/12/2008 ; ; BLAES Sébastien ; ;---------------------------------------; (defun faire_selection( chaine / res sep ch_tmp pos_sep hand) (setq res nil sep ",") (cond ; on test si chaine est bien une string ((/= (type chaine) 'STR) ) (t (setq ch_tmp chaine res (ssadd)) (while (/= ch_tmp "") (cond ; on test pour enlever le séparateur ((= (substr ch_tmp 1 1) sep) (setq ch_tmp (substr ch_tmp 2)) ) ; sinon on cherche la position du séparateur ((= (setq pos_sep (vl-string-search sep ch_tmp)) nil) ; il n'y a plus pas de séparateur, donc il reste le dernier handel (if (/= (handent ch_tmp) nil) (setq res (ssadd (handent ch_tmp) res)) ) ; if (setq ch_tmp "") ) (t ; on extrait le handel (setq hand (substr ch_tmp 1 pos_sep) ch_tmp (substr ch_tmp (1+ pos_sep))) (if (/= (handent hand) nil) (setq res (ssadd (handent hand) res)) ) ; if ) ) ; cond ) ; while ) ) ; cond res ) ; faire_selection PS: par contre c'est toujours nul que la mise en forme saute avec la tabulations
  23. Salut! Premièrement, t'es blocs sont-ils dynamiques? Si c'est non, tu fais simplement un: (setq s (ssget "x" (list (cons 0 "INSERT") (cons 2 nom_du_bloc)))) (sslength s) te donnera le nombre d'éléments. Puis tu peux boucler dessus et pour chaque bloc chercher ses dimensions X,Y et Z. Autre question: un bloc de même nom peut être présent plusieurs fois et avoir plusieurs dimensions? exemple: bloc_123 x:1 y:1.25 z:1 et un autre bloc_123 x:1.42 y:1 z:1
  24. Si j'ai bien compris: tu veux une fonction de ce type (faire_selection "DE1R,45FE,...") => pour renvoyer une sélection comme ssget mais qu'avec les entités existantes contenues dans la chaine. et une pour le zoom. Pour celle-ci, une fois celle du ssget de faite, c'est simple, il suffit de faire (command "_zoom" "_o" select) où select est la sélection générée dans la première fonction. Je veux bien faire un truc, mais le temps de la faire, je que quelqu'un d'autre aura poser une solution. ;) Bon, je m'y mets.
  25. bseb67

    Manque de memoire systeme

    Salut, Lorsqu'il te met ce message, ouvre le gestionnaire de tâches et regarde combien utilise le processus acad.exe en mémoire. car sous XP (32bits) un processus n'a droit que d'utiliser 2Go, mais autocad (2006 à 2008, je ne sais pas pour la 2009) plante lorsque tu dépasses les 1.5Go d'utilisation en ram pour le processus. a+ [Edité le 17/12/2008 par bseb67]
×
×
  • 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é