Aller au contenu

bseb67

Membres
  • Compteur de contenus

    833
  • Inscription

  • Dernière visite

Tout ce qui a été posté par bseb67

  1. Salut! Que ton fichier ne fasse pas 620Ko (500+ 3*40) je comprends encore, car chaque fichier contient un en-tête plus ou moins gros mais pour les images, du fait d'insérer un dessin en plus peut faire diminuer ou augmenter la taille, car l'algorithme de compression est sensible à la couleur. Mais que la taille de ton fichier soit multiplié par 7, là je suis surpris comme toi :casstet: ?! T'as essayé en ne copiant que 2 fois l'image que t'insères? t'obtiens combien de ko alors?
  2. Salut! Comme toujours, il y en a qui réfléchissent tard le soir encore ;) Bon, j'ai essayé les différentes méthodes que vous m'avez donnés et bien aucune ne marche pour mes MTEXT contenant (1 . " ") :cool: . La chose qui franchement me paraît louche (mais je commence a être habitué avec autocad): c'est que je peux supprimer de n'importe où des MTEXT contenant (1 . "") et (1 . "{ }") alors qu'ils peuvent être n'importe où, mais pas le (1 . " ") :casstet: . Donc je dois quand même passer dans chaque présentation pour supprimer ces MTEXT. ;-------------------------------; ; nom: netoye_txt ; ; role: supprime les *TEXT vides; ; param: aucun ; ; retour: le nombre de *TEXT ; ; supprimés ; ; date: 26/07/2007 ; ; Sébastien BLAES ; ;-------------------------------; (defun netoye_txt( / s cpt cpt2 lg el e) (setq s (ssget "X" '((0 . "*TEXT")))) (setq cpt 0 lg (sslength s)) (setq cpt2 0) (while (< cpt lg) (if (and (assoc 1 (setq el (entget (setq e (ssname s cpt))))) (or (= (cdr (assoc 1 el)) "") (= (cdr (assoc 1 el)) "{ }"))) (progn (entdel e) (setq cpt2 (1+ cpt2)) ) ; progn ) (setq cpt (1+ cpt)) ) ; on s'occupe des *TEXT (1 . " ") ; on passe dans chaque présentation (setq llist (layoutlist)) (command "regenmode" 0) (while llist (command "presentation" "etablir" (nth 0 llist)) (setq s (ssget "X" (list (cons 0 "*TEXT") (cons 410 (nth 0 llist)) (cons 1 " ")) )) (if s (setq cpt 0 lg (sslength s)) (setq cpt 0 lg 0) ) (while (< cpt lg) (setq e (ssname s cpt)) (entdel e) (setq cpt2 (1+ cpt2)) (setq cpt (1+ cpt)) ) ; while (setq llist (cdr llist)) ) ; while ; on passe dans l'espace objet pour finir (command "objet") (setq s (ssget "X" (list (cons 0 "*TEXT") (cons 410 "Model") (cons 1 " ")) )) (if s (setq cpt 0 lg (sslength s)) (setq cpt 0 lg 0) ) (while (< cpt lg) (setq e (ssname s cpt)) (entdel e) (setq cpt2 (1+ cpt2)) (setq cpt (1+ cpt)) ) ; while (command "regenmode" 1) (print (strcat (itoa cpt2) " entités supprimés")) cpt2 ) ; netoye_txt
  3. Re-salut! Je comprends plus rien! Avant j'étais sur la présentation où se trouvait le mtext, mais rien ne marchait. Maintenant j'ai réessayé: miracle sa marche :o ! La seule chose à faire, c'est de parcourir alors chaque présentation pour supprimer ceux se trouvant sur elle.
  4. Salut! Etant un peu toqué sur les bords (j'aime bien quand c'est carré et clean, pardon propre) Je cherche à nettoyé le plus possible nos dessins. Et bien j'ai pu trouver des MTEXT non visibles et non sélectionnable avec la souris. Je me retrouve avec 3 types de cas: - (1 . "") => ceux-là j'arrive à les supprimer avec un entdel - (1 . "{ }") => idem - (1 . " ") => et bien ceux-là ca marche pas :mad: ! J'ai essayé un entdel, ca marche pas, un entmod et entupd (en remplacant l'espace par du texte) sans résultat. J'ai fait le compte, sur le dessin sur lequel je test j'ai 300 MTEXT de ce type!! Si j'arrive à les dégager je ganerai un peu de place, mais comme je l'ai dit, mon but n'est pas de gagner de la place mais d'avoir un fichier propre. :cool:
  5. Salut! le problème du 0 pour atoi m'a aussi ennuyer il y a quelques moi. Pour contrer le problème je suis passé par un (read tmp) où tmp est le résultat de getstring. Et si tu fais (type (read tmp)) il te renvoye SYM pour symbole si ce que tu as tappé est différent d'un nombre (entier ou réel) (type (read (getstring))) de 5.3 => REAL (type (read (getstring))) de 5.3.2 => SYM (type (read (getstring))) de entrée => nil Par contre, il ne prend pas les Fx, fléches...
  6. Salut Phil! Cala rejoint un peu ce que tu veux, lors de mes débuts en lisp (il y a 6 mois) j'ai fait ce petit truc qui permet de détruire un groupe en cliquant sur un des éléments qui le compose ;-------------------------------------------; ; nom: casse_groupe ; ; casse (explose) un groupe en ; ; sélectionnant un élément du groupe ; ; param: aucun ; ; date: 27/02/2007 ; ; créateur: S. BLAES ; ;-------------------------------------------; (defun C:DGR () ; on demande à l'utilisateur de sélectionner un élément du groupe (setq e (car (entsel))) ; on test si e est non nil (if (/= e nil) (progn (setq l (entget e)) ; si l'élément appartient à un groupe, il existe alors le code ADN 102 ; et celui-ci contient "{ACAD_REACTORS" ; on test alors son existence (if (and (/= (assoc 102 l) nil) (= (cdr (assoc 102 l)) "{ACAD_REACTORS")) (progn ;(alert "oki") ; maintenant il faut aller dans l'entité pointé par le code ADN 330 ; c'est en fait la déclaration du groupe (setq gp (cdr (assoc 330 l))) ;(print gp) (setq lgp (entget gp)) ;(print lgp) ; dans cette déclaration de groupe, on a la liste des éléments ; qui le compose dans le code ADN 340 ; il faut donc retiré tous les codes 340 ; tant qu'il y a un code 340 (while (/= (assoc 340 lgp) nil) ; on retire le code 340 est on stocke le résultat (setq lgp (vl-remove (cons 340 (cdr (assoc 340 lgp))) lgp)) ;(print lgp) ) ; while ; maintenant on fait un entmod de lgp ; afin que les éléments du groupe soient séparés (entmod lgp) ; on supprime la déclaration du groupe (entdel gp) (print "groupe cassé") ) ; progn (alert "élément ne faisant pas partie d'un groupe") ) ; if ) ; progn (print "élément non sélectionné") ) ; if (princ) ) ; C: DGR (print "commande pour casser les groupes: DGR") (C: DGR) [Edité le 25/7/2007 par bseb67]
  7. Salut! On récupère des plans fait comme des cochons :mad: ! Je dois passer dans une liste de plans, aller sur le cartouche dans la présentation et récupérer des attributs. Le hic, c'est que c'est un tableau (plusieurs lignes et colonnes). EN interne on nomme les attributs du style : att_x1 att_y1 att_z1 att_x2 att_y2 att_z2 ... sauf que là j'ai ca: att_x att_y att_z att_x att_y att_z => je fait comment pour savoir quel att_x va avec quels att_y et att_z :casstet: ? Par contre, j'ai vu que l'invite comportait un numéro, donc ma question se résume à : où peut trouver l'invite de l'attribut? Merci.
  8. bseb67

    VACANCES

    Salut! Et bien pour moi c'est pas les vacances :( ! C'est normal, je viens de commencer à travailler que depuis le début de l'année. ;) Par contre je migre quand même un peu: je quitte mon appartement en location pour celui que j'ai acheté avec ma femme à 20 km au sud. Le déménagement sera fera du vendredi 10/08 au dimanche 12/02, et oui, on a un paquet de truc et de meubles à déplacer. J'ai profité d'autocad pour me faire un plan vite fait du nouvel appart et du mobilier pour voir pour le placement. Bonne vacances à ceux qui partent (ou restent chez eux) :D
  9. Resalut! La zone correspond plus ou moins à la présentation de l'espace papier. Comme on travail sur des batiments, mais par niveau et par zone, le fichier ne doit contenir que ce qui appartient au niveau et à la zone. et non celle d'a coté. Je simule l'effacement afin que la sélection de tous l'espace objet ne renvoie que ce qui est en-dehors. Sauf que la commande effacer ou le ssget sur un "cadre" rate les éléments non visibles :mad: . C'est pourquoi je cherchai de l'aide la-dessus. après j'ai intégré la méthode, que j'avais utiliser en C++ lors d'un projet à la fac, qui est de prendre un point que l'on sait être en-dehors du polygone (Pref), de prendre le point à tester (Ptest). Puis on compte le nombre de fois que le segment [Pref-Ptest] intersecte les bords du cadre. Si le nombre d'intersection est impair, ptest est dans le polygone, sinon non. Enfin, bref. mon truc marche. Si j'ai le temps je fais une vidéo sur mon dessin de test et je la mettrai (faut que je trouve comment) en ligne.
  10. salut stephan, euh, non. apparement je ne suis pas très bon pour les explications :cool: Le but final est de zoomer en gros sur l'objet posant problème , s'il y en a bcp c'est plus pratique de pouvoir stopper et relancer "l'affichage".
  11. Salut à tous! Bon, ben j'ai résolu mon problème en utilisant ma deuxième méthode: test d'appartenance au polygone. Elle ne marchait qu'à 80%, j'ai nettoyé mon plan de test, pour ne garder que les éléments qui posaient problèmes = > c'est à nouveau un put... de problème de chiffres après la virgule :mad: J'ai contourné le pb en mettant une marge d'erreur. Je mettrai le lisp complet un peu plus tard (pour ceux qui sont intéressé)
  12. Salut patrick! Le but est de trouver ce qui est "hors zone", c'est-à-dire qu'en fonction du nom du fichier, je cherche le cadre (fichier contenant une polyligne) qui correspond à cette partie, je l'insère en tant que bloc, je l'explose afin de récupérer les points de contour. Je simule l'effacement de éléments contenus dans le cadre et donc en faisant une sélection après l'effacement je devrai récupèrer ce qui est en dehors du cadre, afin que le dessinateur puisse virer ce qui dépasse. voici le code pour hors_zone: ;----------------------------------------; ; nom: hors_zone ; ; role: test si des éléments sont ; ; hors zone ; ; param: niveau => niveau du cadre ; ; ex: "U" ; ; zone => zone du cadre ; ; ex "02" ; ; retour: (nb_elem . sélection d'entités); ; nb_elem = ; ; >0 si éléments trouvés ; ; 0 si aucun élément ; ; nil s'il y a eu un problème ; ; sélection d'entités = ; ; non vide si éléments trouvés ; ; vide sinon ; ; date: 10/07/2007 ; ; BLAES Sébastien ; ;----------------------------------------; (defun hors_zone ( niveau zone / iu ech cadre polycadre lpolycadre listpoints cpt lg s news diff) ; on pose une marque pour annuler (command "_undo" "m") (if (or (/= (type niveau) (type "c")) (/= (type zone) (type "c"))) (progn (alert "les types des paramètres sont incorrects!") (cons nil nil) ) ; progn (progn ; on test si le répertoire niveau existe dans CADRES_PATH (if (= (dos_dirp (strcat CADRES_PATH "/" niveau)) nil) (progn (alert "répertoire de niveau non existant!") (cons nil nil) ); progn (progn ; on test si le fichier de découpage de la zone existe (if (= (dos_filep (strcat CADRES_PATH "/" niveau "/Découpage " niveau zone ".dwg" )) nil) (progn (alert "fichier de découpage de zone non existant!") (cons nil nil) ); progn (progn ; on passe en espace objet (command "objet") ; on fait un zoom étendu (command "zoom" "etendu") ; on stocke le mode d'accrochage aux objets (setq var_osmode (getvar "OSMODE")) (setvar "OSMODE" 0) ; on calcul d'abord l'échelle d'insertion (setq iu (getvar "insunits")) (cond ; même unités donc échelle de 1 ((= iu 6) (setq ech 1)) ((= iu 5) (setq ech (/ 100.0 1000.0))) ((= iu 4) (setq ech (/ 10.0 1000.0))) ((= iu 3) (setq ech (/ 1690000.0 1000.0))) ((= iu 2) (setq ech (/ 304.8 1000.0))) ((= iu 1) (setq ech (/ 25.4 1000.0))) (t (exit (alert "insunits non gérée"))) ) ; cond ; on insère le cadre de découpage (command "_insert" (strcat CADRES_PATH "/" niveau "/Découpage " niveau zone ".dwg" ) "0,0,0" ech ech 0) ; on récupère le cadre (setq cadre (entlast)) ; on l'explose (command "_explode" cadre) ; on récupère la polyligne (setq lpolycadre (entget (setq polycadre (entlast)))) ; on annule l'explosion (command "u") ; on annule l'insertion (command "u") ; on sauvegarde l'état des calques (sauve_calques) ; maintenant on supprime les éléments se trouvant à l'intérieur du cadre ; on fabrique la liste des points du cadre (setq listpoints '() lg (length lpolycadre) cpt 0 ) (while (< cpt lg) ; si le cpt-ième élément à pour code 10 (point 3D) on le garde (if (= (car (nth cpt lpolycadre)) 10) (setq listpoints (append (list (list (cadr (nth cpt lpolycadre)) (caddr (nth cpt lpolycadre)))) listpoints)) ) ; if (setq cpt (1+ cpt)) ) ; while ; on fait un ssget sur les éléments contenus dans le polygone (setq cadresel (ssget "_CP" listpoints )) ; on les supprime (while (and cadresel (> (sslength cadresel) 0)) (setq ent (ssname cadresel 0)) (entdel ent) (ssdel ent cadresel) ) ; while ; on fait un ssget pour attraper ce qui reste (setq s (ssget "X" '((410 . "Model")))) ; on annule tout (command "_undo" "f" "_undo" "r" "o") (if s (cons (sslength s) s) (cons 0 nil) ) ; if ) ; progn ) ; if ) ; progn ); if ) ; progn ) ; if ) ; hors_zone (defun c:hz() (setq VAR_ELEM_HZ nil VAR_CPT_AHZ 0) ;(setq Chemin (getvar "DWGPREFIX")) (setq NomDessin (getvar "DWGNAME")) (setq niveau (substr NomDessin 13 1) zone (substr NomDessin 14 2)) (setq VAR_ELEM_HZ (hors_zone niveau zone)) (cond ((= (car VAR_ELEM_HZ) nil) (print "il y a eu une erreur")) ((= (car VAR_ELEM_HZ) 0) (print "il n'y aucun élément hors zone")) (t (print (strcat "il y a " (itoa (car VAR_ELEM_HZ)) " éléments hors zone"))) ) ; cond (princ) ) ; c:hz
  13. J'oubliais, merci bred pour l'info ;)
  14. VOilà le dcl restart_hors_zone_dialog : dialog { label = ""; : boxed_row { label = "Voulez-vous reprendre l'affichage à partir du dernier arrêt?"; ok_cancel; } // boxed_row } hors_zone_dialog : dialog { label = ""; : boxed_row { label = "Vue centrée sur l'élément hors zone"; : text { key = ahz_txt; value = ""; } // text } // boxed_row : boxed_row { label = "Voulez-vous continuez l'affichage?"; ok_cancel; } // boxed_row } Ahz ne sert que pour "voir" les éléments, mon pb c'est la sélection qui bug.
  15. C fait, les variables en MAJUSCULES sont des variables globales
  16. Salut stephan! Je veux bien mettre mon lisp, mais je ne connais pas la balise pour le code :casstet: Si tu peux me la donner (j'ai cherché sous "balise" "code", mais rien trouvé) je poste le lisp.
  17. Salut! J'ai à nouveau un mystère que je cherche à résoudre: Afin de vérifier que le dessin ne comporte que la zone concernée, j'ai fait un lisp qui insère une polyligne fermée (donc un polygone). Cette polyligne me sert à créer une suite de points pour faire un (ssget "_cp" listdepoints), je supprime les entités obtenue par la sélection. Puis je fais un (ssget "x" '((410 . "Model"))), si ce ssget renvoi une sélection c'est qu'il y a des éléments hors zone. Puis j'annule tout afin de retrouver le dessin d'origine. Pour connaitre les éléments hors zone, je lance un autre lisp qui zoom sur chacun d'eux. Pour l'instant, je pensais que cela marcherai, mais mon 2ème ssget me renvoie des éléments contenus dans le polygone, mais ceux sont des éléments "invisibles": càd bloc avec attributs invisibles, mtext vides ou avec des "{". Ma question est: est-ce normal que le ssget cp ne sélectionne-t-il pas ces éléments? PS: j'ai essayé une méthode plus longue, avec un test d'appartenance au polygone en comptant le nombre d'intersection entre les bords du polygone et le segment formé d'un point extérieur et celui du point d'insertion de l'objet invisible => mais elle ne marche pas à 100% :( Merci. [Edité le 23/7/2007 par bseb67]
  18. Salut circus, Si tu es technicien, le préavis est de 1 mois si tu as moins de 2 ans d'ancienneté, mais comme c'est plus pour toi cela passe à 2 mois comme te l'a mis daweed. Ces durées sont celles plus ou moins appliquées. Mais pour être sur, il faut relire ton contrat de travail et sinon ta convention collective. Il est toujours possible de négocier ce préavis avec ton employeur.
  19. Salut Bonuscad! Trop cool :D , c'était exactement ce que je cherchais à faire. Maintenant il ne mes reste plus qu'à comprendre le code et voir pour les LWPOLYLINE. donc le jeune padawan du lisp dit mille fois merci à maitre yoda! ;)
  20. Re-salut, Je me doutais qu'il devait y avoir un problème de ce genre, car si je déplace manuellement le bloc, son code contient +50 pour le Z alors que le Z de la fenetre des propriétés est bien à 0.0. Ta commande est bizarre :casstet: , je l'ai essayé sur mon dessin de test, je ne vois plus gd chose! Il ne mes reste que des petits points :exclam: Mon but est de mettre uniquement le Z à zéro, afin que lorsque l'on regarde le dessin avec la vue gauche ou droite, on obtienne une belle droite (multicolore) et pas des traits partout, afin d'éviter les bugs avec autofluid lorsque les dessinateur font des raccords. Merci
  21. Salut Gile, Le pseudo code du lisp est du genre: ssget type (je fais type par type : insert, line, polyline) je boucle sur les éléments: je test le code qui contient les coordonnées, je test le Z: si (> (abs (Z -0.0)) epsilon) alors je change le code en mettant (code X Y 0.0) Je ne sais pas comment mettre du code pour l'afficher correctement sur le site.
  22. Salut! J'ai fait un petit lisp afin que toutes les entités se retrouvent en altitude 0. Mais cela ne fonctionne pas correctement :( Pour exemple: il me reste des blocs qui si j'ouvre la fenêtre des propriétés, pour le Z je trouve -50 alors que si je fait un entget sur le bloc dans le Z il y a 0.0 :casstet: par contre pour les valeurs en X et Y ceux sont les mêmes (à peu de chose près, car le entget me retourne un arrondi) Merci. :)
  23. Pour utiliser un lisp il suffit de cliquer sur le fichier lisp, et de le glisser sur ton autocad ouvert. Après, si dans le lisp il y a une exécution automatique ca part tout seul, sinon il faut taper le nom de la fonction ex de bonuscad: rxref ou (c:rxref)
  24. Re-salut! Pour tester s'il y a des xrefs dans un dessin, j'utilise un lisp qui parcourt la table des "block": (tblnext "BLOCK" param[t ou nil] ) Si un des bloc possède dans son code (1 . "chaine de caractères") cela veut dire que c'est un xref et "chaine de caractères" correspond au chemin. Il suffit de faire un lisp qui parcourt la table des blocs et remplace "chaine de caractères" par "nouvelle chaine de caractères".
  25. Salut thiery! C'est bizarre, mais normalement les chemins des xrefs sont des chemins complets?! Dans ton fichier de départ (où ca marche) il faut que tes xrefs (si tu clic dessus) ont un chemin du genre "lecteur:\chemin\fichier" si ce n'est pas le cas, alors c'est normal que tu perdes le lien. Tu dois alors avoir un truc du genre ..\chemin\fichier. Je vais voir si je trouve un truc pour ca.
×
×
  • 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é