Aller au contenu

bonuscad

Membres
  • Compteur de contenus

    5 029
  • Inscription

  • Dernière visite

  • Jours gagnés

    56

Tout ce qui a été posté par bonuscad

  1. bonuscad

    Challenge

    Alors sous forme itérative. (defun asso (l1 l2 / nwlst) (foreach n (mapcar 'list l1 l2) (cond ((assoc (car n) nwlst) (setq nwlst (subst (append (assoc (car n) nwlst) (list (cadr n))) (assoc (car n) nwlst) nwlst)) ) (T (setq nwlst (cons n nwlst)) ) ) ) (reverse nwlst) ) Ce coup-ci devrait faire plus que les doublon ;)
  2. bonuscad

    Challenge

    Comme j'ai donné une réponse incomplète, je donne une version qui est surement perfectible. (defun asso (l1 l2 / lst dbl) (setq lst (mapcar 'list l1 l2 ) ) (foreach n lst (if (setq dbl (member (assoc (car n) (cdr (member n lst))) (cdr (member n lst)))) (setq lst (vl-remove (car (member n lst)) lst) lst (subst (list (caar dbl) (cadr n) (cadar dbl)) (assoc (car n) lst) lst) ) ) ) lst ) Edit : Je m'incline bien sur devant (gile) qui l'a fait sous une forme récursive (J'avais pas vu qu'il l'avais posté sur test) Ma version s'arrête à la double activité, si il y a une triple activité (dans les choux) Avec sa forme récursive (gile) traite bien les liste...
  3. bonuscad

    Challenge

    Bonjour, A mon avis pas vraiment un chalenge car la fonction de base fait cela très bien: (mapcar 'list liste1 liste2) (mapcar 'list '("pierre" "patrick" "sébastien" "sophie" "patrick" "julie" "toto") '("compta" "be" "chantier" "secrétaire" "autocad" "facturation") ) Edit: Je crois que je n'ai pas compris... (lu trop vite) question: comment sait tu que par exemple? ("patrick" "be" "autocad") Il n'y a pas de données d'entrée permettant de connaitre cet état!
  4. Peut être l'astuce de dessiner un autre arc dans ta vue de SCU courant, de coter celui-ci avec "_DIMARC", puis de masquer cet arc dessiné (click-droit après avoir gripper ton objet et dans le menu contextuel prendre "isoler" -> "Masquer les objets" Et enfin si besoin, forcer la dimension de la côte... Ainsi tu peux conserver le symbole d'arc.
  5. bonuscad

    Devenir technicien géomètre

    Bonjour, Comme pour moi, tout ceci est un peu loin, je ne pratique plus depuis longtemps (BT de Technicien Topographe en 1978) Je te renvois vers de la lecture: Un document simple (voir page 16) Un autre plus compliqué, mais plus complet qui te sera certainement utile par la suite(voir page 11)
  6. Bonjour, J'utilise un petit lisp qui se charge de tout (il est exécuter automatiquement; pour ma part j'utilise un MNL ou il y a l'instruction suivante:) Mise à jour du mois de Juin 2022 PROCÉDURE A NE PAS EMPLOYER SI VOUS AVEZ DÉJÀ UTILISÉ L'ANNOTATIF DANS VOS DESSIN (risque d'erreur de demande ADS erronée sur vos objets déjà annotés: même si les échelles redéfinies sont identiques) (if s::startup (setq s::startup (append s::startup '((echel_perso)))) (defun-q s::startup () (echel_perso)) ) Il y a d'autre façon de faire..., mais dans ce cas je ne me préoccupe de rien; les échelles existantes sont purgées et le miennes sont introduites à la place. (defun echel_perso ( / ) (lst-ech (list (list "1:1" 1 1) (list " 10 ème" 100 1) (list " 20 ème" 100 2) (list " 25 ème" 100 2.5) (list " 50 ème" 100 5) (list " 100 ème" 10 1) (list " 200 ème" 10 2) (list " 250 ème" 100 25) (list " 500 ème" 10 5) (list " 1 000 ème" 1 1) (list " 2 000 ème" 1 2) (list " 2 500 ème" 10 25) (list " 5 000 ème" 1 5) (list " 10 000 ème" 1 10) (list " 20 000 ème" 1 20) (list " 25 000 ème" 1 25) (list " 50 000 ème" 1 50) (list "100 000 ème" 1 100) (list "200 000 ème" 1 200) (list "250 000 ème" 1 250) (list "500 000 ème" 1 500) ) ) (princ) ) ; routine modif liste echelle (defun lst-ech (lst / i x n dict ent1) (vl-load-com) (while (assoc 350 (dictsearch (namedobjdict) "ACAD_SCALELIST")) (progn (vla-delete (vlax-ename->vla-object (cdr (assoc 350 (dictsearch (namedobjdict) "ACAD_SCALELIST"))))) ) ) (setq i 1 x (strcat "Z" (rtos i)) ) (repeat (length lst) (setq n (nth (1- i) lst) dict (cdr (assoc -1 (dictsearch (namedobjdict) "ACAD_SCALELIST"))) ) (setq ent1 (entmakex (list '(0 . "SCALE") '(100 . "AcDbScale") '(70 . 0) (cons 300 (car n)) (cons 140 (cadr n)) (cons 141 (caddr n)) '(290 . 0) ) ) ) (dictadd dict x ent1) (setq i (1+ i) x (strcat "Z" (rtos i)) ) ) ) Bien sur tu peux personnaliser ta liste comme tu l'entends (au début- du code)
  7. Pourquoi ne pas modifier le lisp lui même... (defun c:Alti-Prof-versPTRL ; instruction ; n instructions (c:Alti-Prof-versPTRL) ) En plaçant l'instruction (c:Alti-Prof-versPTRL) à la fin, il devrait relancer la procédure... Bémol; seul moyen d'arrêter par la touche ESC (similaire par *^C^C) Donc peut être revoir la fonction error (si elle existe) pour rétablir un environnement propre après un break.
  8. Salut Patrice, Dans l'immédiat je ne peut répondre qu'au dernier souhait. Suite à une mauvaise programmation de ma part, j'avais attribué n records (souvent identiques) à mes objets, voulant m'en débarraser, j'avais écrit ceci (je ne sais pas si cela te conviendra) (defun c:del_record_other0 ( / js n obj tbllist numrec ct lst) (setq js (ssget "_X" (list (cons 67 (if (eq (getvar "CVPORT") 1) 1 0)) (cons 410 (if (eq (getvar "CVPORT") 1) (getvar "CTAB") "Model")) ) ) lst nil ) (cond (js (repeat (setq n (sslength js)) (setq obj (ssname js (setq n (1- n)))) (setq tbllist (ade_odgettables obj)) (cond (tbllist (foreach tbl tbllist (setq numrec (ade_odrecordqty obj tbl)) (cond ((> numrec 1) (setq ct (1- numrec)) (while (not (zerop ct)) (ade_oddelrecord obj tbl ct) (setq ct (- ct 1)) ) (if (not (member tbl lst)) (setq lst (cons tbl lst)) ) ) ) ) ) ) ) ) ) (if lst (mapcar '(lambda (x) (princ (strcat "\nLa table " x " à été nettoyée"))) lst) (princ "\nAucune table à nettoyer.") ) (prin1) )
  9. Bonjour, J'étais tombé sur un sujet sur theswamp J'avais trouvé l'idée intéressante, cela évite d'activer les grips pour avoir les infos des données d'objet. On a, à la place, en dynamique une info bulle donnant ces renseignements quand on survole celle-ci. Ci le post original, fonctionnait bien pour une seule table, ce n'était pas le cas quand plusieurs tables étaient affecté à un objet. J'ai essayé d'améliorer le truc, voici ce que ça donne: (defun c:rod (/ )(c:readobjectdata)) (vl-load-com) (defun c:readobjectdata (/ count *error* ename textename fieldnames fieldstring input strcatlst tablelist usercmdecho) (defun *error* ( msg ) (princ (strcat "\n<" msg ">\n")) (progn (and TextENAME (entdel TextENAME)) ;(vl-cmdf "_.usc" "_previous") (setvar "cmdecho" usercmdecho) );progn (princ) );defun (setq usercmdecho (getvar "cmdecho")) (setvar "cmdecho" 0) ;(vl-cmdf "_.ucs" "_world") (while (and (setq Input (grread T 4 2)) (= (car Input) 5)) (if TextENAME (progn (entdel TextENAME) (setq TextENAME nil)) );if (if (and (setq ename (car (nentselp (cadr Input)))) (not (eq TextENAME ename)) );and (if (setq tablelist (ade_odgettables ename)) (progn (setq count 0 fieldnames nil) (repeat (length tablelist) (foreach x (cdr (assoc "Columns" (ade_odtabledefn (nth count tablelist)))) (if (not (member (cdr (assoc "ColName" x)) fieldnames)) (setq fieldnames (cons (cons (cons (1+ count) (nth count tablelist)) (cdr (assoc "ColName" x))) fieldnames)) ) ) (setq count (1+ count)) ) (if fieldnames (progn (setq fieldnames (reverse fieldnames)) (setq strcatlst (apply 'strcat (mapcar (function (lambda (x) (strcat "{\\C" (itoa (caar x)) ";" (cdar x) "} - " (cdr x) " : " (if (/= (type (setq fieldstring (ade_odgetfield ename (cdar x) (cdr x) 0))) 'STR) (if (eq (type fieldstring) 'INT) (itoa fieldstring) (rtos fieldstring 2 2) ) fieldstring ) "\n") ) );fin function fieldnames );fin mapcar );fin apply );fin setq (setq TextENAME (entmakex (list (cons 0 "MTEXT") (cons 100 "AcDbEntity") (cons 100 "AcDbMText") (cons 1 (strcat "{\\fArial;" strcatlst "}" );strcat );cons 1 (cons 10 (polar (cadr Input) 0 (/ (getvar "VIEWSIZE") 50.0)) ) (cons 40 (/ (getvar "VIEWSIZE") 75.0)); (cons 50 (- 0 (getvar "VIEWTWIST"))) (cons 62 250) (cons 71 1) (cons 72 5) (cons 90 1) (cons 63 255) (cons 45 1.2) );list );entmakex );setq ) ) ) ) );if );fin while (and TextENAME (entdel TextENAME)) ;(vl-cmdf "_.ucs" "_previous") (setvar "cmdecho" usercmdecho) (princ) )
  10. Bonjour, En m'appuyant sur l'extrait de dessin joint, ceci devrait faire l'affaire... ((lambda ( / js ent pt) (setq js (ssget '((0 . "INSERT") (2 . "AEP_VENTOUSE") (8 . "AEP_VENTOUSE")))) (repeat (setq n (sslength js)) (setq ent (ssname js (setq n (1- n))) pt (cdr (assoc 10 (entget ent))) ) (ade_odsetfield ent "EQUIPEMENT" "X" 0 (car pt)) (ade_odsetfield ent "EQUIPEMENT" "Y" 0 (cadr pt)) ) )) A copier-coller directement en ligne de commande de ton dessin.
  11. Cela ne pose pas de problème SI tu garde exactement la MÊME structure que le bloc initial de Covadis. Par contre si les attributs ne sont pas du même nombre et comporte des étiquettes différentes, j'ai bien peur que cela cause des soucis si Covadis doit traiter ces points ultérieurement. exemple de ton code: (2 . "ELEV") ; Tag string ;*** Cette étiquette n'existe pas dans le bloc TCPOINT originel de Covadis. Je pense que Géomédia irait dans le même sens que moi...
  12. Si tu ne veux pas passer par une fenêtre de dialogue, j'avais écrit ça à une certaine occasion: (defun my_replace_text (new_string old_string / js n ename first_blk l_blk n_blk) (vl-load-com) (defun xplore (l / ent cnt msg) (setq ent (entget (cdr (assoc -2 l))) cnt 0) (cond ((eq (cdr (assoc 0 ent)) "INSERT") (mapcar '(lambda (att) (string-subst att) ) (vlax-invoke (vlax-ename->vla-object (cdar ent)) 'GetAttributes) ) (while (setq ent (entnext (cdar ent))) (setq ent (entget ent)) (if (eq (cdr (assoc 0 ent)) "INSERT") (progn (setq cnt (1+ cnt)) (repeat cnt (mapcar '(lambda (att) (string-subst att) ) (vlax-invoke (vlax-ename->vla-object (cdar ent)) 'GetAttributes) ) ) ) ) ) ) ) ) (defun string-subst (nam_obj / value_string nbs tmp_nbs) (setq value_string (vlax-get nam_obj 'TextString) nbs 0) (while nbs (if (setq nbs (vl-string-search old_string value_string (setq tmp_nbs nbs))) (setq value_string (vl-string-subst new_string old_string value_string tmp_nbs) nbs (1+ nbs) ) ) ) (vlax-put nam_obj 'TextString value_string) ) (defun tabl_subst (obj / eRows eColumns R C val nbs tmp_nbs) (setq eRows (vla-get-rows obj) eColumns (vla-get-columns obj) R 0 ) (repeat eRows (setq C 0) (repeat eColumns (setq val (vla-GetText obj R C) nbs 0 tmp_nbs nil) (while nbs (if (setq nbs (vl-string-search old_string val (setq tmp_nbs nbs))) (setq val (vl-string-subst new_string old_string val tmp_nbs) nbs (1+ nbs) ) ) ) (vla-SetText obj R C val) (setq C (+ C 1)) ) (setq R (+ R 1)) ) ) (setq first_blk (tblnext "BLOCK" T)) (cond (first_blk (setq l_blk (list first_blk)) (while (setq n_blk (tblnext "BLOCK")) (setq l_blk (cons n_blk l_blk)) ) (foreach n l_blk (if (/= (logand (cdr (assoc 70 n)) 4) 4) (if (/= (logand (cdr (assoc 70 n)) 16) 16) (xplore n) ) ) ) ) ) (setq js (ssget "_X" '( (-4 . "<OR") (0 . "*TEXT,MULTILEADER,ATTDEF,ACAD_TABLE") (-4 . "<AND") (0 . "INSERT") (66 . 1) (-4 . "AND>") (-4 . "OR>") ) ) ) (cond (js (repeat (setq n (sslength js)) (setq ename (vlax-ename->vla-object (ssname js (setq n (1- n))))) (cond ((vlax-property-available-p ename 'TextString) (string-subst ename) ) ((vlax-property-available-p ename 'Rows) (tabl_subst ename) ) (T (mapcar '(lambda (att) (string-subst att) ) (vlax-invoke ename 'GetAttributes) ) ) ) ) ) ) (prin1) ) Usage en ligne de commande: ( my_replace_text "nouvelle_chaine" "ancienne_chaine") Si ça ne convient pas, je t'invite à regarder sur les routines de Lee Mac
  13. Bonjour, Un petit éclaircissement serait nécessaire. Si le texte fait partie intégrante du bloc, donc sa valeur est la même pour tout les blocs insérés et que tu veux changer sa valeur ponctuellement pour chaque insertion, ce n'est pas possible. Il te faut reconstruire ton bloc avec un attribut: explose ou édite ce dernier, modifies les entités constituante (passer le texte en attribut) et reconstitues ton bloc en le sauvegardant sous le même nom pour le redéfinir. Si la modification est globale tu fais la même démarche que ci-dessus, mais la tu change simplement la valeur du texte (sans convertir en attribut...)
  14. Bonjour Déjà en tout premier point, je trouve que choisir "TCPOINT" comme nom de bloc est une mauvaise idée! Pourquoi? Parce ce que COVADIS utilise dèjà ce type de nom de bloc, donc on peut considérer ce nom de bloc comme réservé (pour éviter des soucis à ceux qui utilisent Covadis) Autrement dans ton code, pas mal d'erreur: On ne fourni pas le code 330 (ni le 5 d'ailleurs: handle), celui-ci est directement pris en charge par Autocad lors de la création par (entmake) On construit les codes chaines avec des guillemet ex: (cons 8 "toto") Et PRINCIPALEMENT tu as oublier de construire ton entité complexe: (cons 0 "INSERT") ne suffit pas si tu as (66 . 1) dans ta définition du bloc, il te faut aussi (cons 0 "ATTRIB"): autant de fois qu'il y a d'attribut suivi à la fin de (cons 0 "SEQEND") ce qui pourrait donner: (if (not (tblsearch "BLOCK" "TCPOINT")) (progn (entmake '((0 . "BLOCK") (100 . "AcDbEntity") (100 . "AcDbBlockBegin") (2 . "TCPOINT") (70 . 2) (8 . "0") (62 . 256) (6 . "ByLayer") (370 . -2) (10 0.0 0.0 0.0)) ) ;|Si un point est désiré, partie à décommenter (entmake '( (0 . "POINT") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 0) (100 . "AcDbPoint") (10 0.0 0.0 0.0) (210 0.0 0.0 1.0) (50 . 0.0) ) ) |; (entmake '( (0 . "ATTDEF") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbText") (10 0.0 0.0 0.0) (40 . 0.1) (1 . "") (50 . 0.0) (41 . 0.7) (51 . 0.0) (7 . "STANDARD") (71 . 0) (72 . 1) (11 0.00 0.00 0.0) (210 0.0 0.0 1.0) (100 . "AcDbAttributeDefinition") (280 . 0) (3 . "ELEV....") (2 . "ELEV") (70 . 0) (73 . 0) (74 . 2) (280 . 0) ) ) (entmake '((0 . "ENDBLK") (100 . "AcDbBlockEnd") (8 . "0") (62 . 256) (6 . "ByLayer") (370 . -2))) ) ) (defun TCPoint2 (pt / ) (entmake (append '( (0 . "INSERT") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "#8.Contre-profils") (100 . "AcDbBlockReference") (66 . 1) (2 . "TCPOINT") (41 . 1.0) (42 . 1.0) (43 . 1.0) (50 . 0.0) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0) ) (list (cons 10 pt) '(210 0.0 0.0 1.0)) ) ) (entmake (append '( (0 . "ATTRIB") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "#8.Contre-profils") (100 . "AcDbText") ) (list (cons 10 pt)) '( (40 . 0.7) ) (list (cons 1 (rtos (caddr pt) 2 2))) '( (50 . 0.0) (41 . 0.7) (51 . 0.0) (7 . "STANDARD") (71 . 0) (72 . 1) ) (list (cons 11 pt)) '( (210 0.0 0.0 1.0) (100 . "AcDbAttribute") (280 . 0) (2 . "ELEV") (70 . 0) (73 . 0) (74 . 2) (280 . 0) ) ) ) (entmake '((0 . "SEQEND") (62 . 256) (6 . "ByLayer") (370 . -2))) )
  15. bonuscad

    WINDOWS 10

    Bonjour, Sur un portable Dell Latitude E6410, j'ai fais la mise à niveau proposée de Windows 7 pro vers Windows 10 pro. La procédure de mis à niveau (assez longue) c'est déroulée sans inconvénients. Mais mon AutocadMap 2014 se fermait instantatément à l'ouverture sans aucun message. Je décide alors (chose possible pendant 1 mois) de rétrograder vers windows 7. Là c'est la cata, Windows 7 se lance bien mais je n'ai plus de réaction ni de mon clavier ni de ma souris. Que faire?... Une "instal clean" de windows 10 pro!... Je tente le coup, avec la clé usb d'install faite avec l'utiltaire sur le site de microsoft. J'en profite pour faire un RAZ complet du PC et de le basculer en UEFI (il été en Legacy) Je lance l'install sur mon SSD (suis surpris!, l'install est très rapide, plus que la mise à niveau...) J'ignore la clé de Licence, (je verrais par la suite que ma licence est bien active, Microsoft stocke la validité de la licence qui est lié à votre carte mère, donc les disques dur ou SSD peuvent être changés, vous pourrez toujours refaire une install propre. Je remets AutocadMap 2014 avec le SP1 et SP2, et là no soucis, tout est fonctionnel. Dans la foulée j'ai fait un dual boot avec une Xubuntu 14.04 LTS, pareil, aucun soucis. Voilà pour mon retour d'expérience, comme quoi une instal clean de windows 10 peut résoudre les problèmes. A part que cette version de windows cause un peu trop (à mon goût), elle semble bien foutue et réactive. Les temps de lancement sont pratiquement équivalent entre les deux OS (un avantage léger à Linux)
  16. bonuscad

    Type de ligne personnalisé

    Bonjour, Dans ton type de ligne tu as défini une longueur de segment de 12.7 Si tu veux 4 tiret, on divise donc 12.7 par 4, ce qui fait 3.175 Cet interval doit donc définir le trait dessiné et l'espace, par exemple 2.175 pour le trait et -1 pour l'espace = 3.175 en tout. Donc en remplaçant 12.7 par une séquence (répété 4 fois) tu devrait obtenir ce que tu souhaites. *COM,COM ----COM----COM----COM----COM----COM----COM-- A,2.175,-1,2.175,-1,2.175,-1,2.175,-1,-5.08,["COM",STANDARD,S=2.54,U=0.0,X=-3.475,Y=-1.27],-6.35
  17. C'est général en effet... Un exemple vécu: Je me rend chez un concessionnaire automobile car ma voiture a un problème. Passage à la valise et diagnotisque de celle-ci: rampe d'injection défectueuse Aucune autre vérification. On m'annonce le prix, je dis que je vais réfléchir. Je vais voir alors mon garagiste de quartier (un vieux de la vieille), il est septique. Il l'essayes, la regarde rapidement sur le pont, et voit sous le siège passager arrière une trace de déformation dut à un impact (une pierre dans un chemin?) sur la pompe de gavage. Pour lui c'est certainement la source de mon ennui. Effectivement, il me la change et ça roule! Sont fort chez les concessionnaire avec leur banc electronique! Nous on paye simplement des réparations qui ne sont même pas indispensables. Merci en tout cas à mon vieux garagiste qui m'a épargné beaucoup de "roros" ;)
  18. Restons léger en effet. Je vois que tu es assez nouveau sur le site: 55 messages. J'avais fais un post aussi à ce sujet, une fois. Car si tu veux sourire; fais une recherche avec le mot claque (au singulier ou pluriel) sur CadXp et tu sera surpris du nombre de résultats que tu auras... (et il n'y a pas que (gile)) C'est une faute de frappe qui revient souvent (ici et sur d'autres forums), je ne me l'expliques pas vraiment, soit les utilisateurs d'autocad sont dislexiques, soit se sont des têtes à "claques" (je fais partie du lot, car je me suis surpris a avoir fais la même faute que j'ai pu corriger ou pas) Plus sérieusement, je pense que ce mot est propice tout simplement à être écrit de mauvaise façon sans heurter notre lecture ET parfois relecture. Mais c'est vrai que ça fait sourire quand on s'en rend compte.
  19. DXF acronyme de Data eXchange File (en Français Fichier de Données d'Echange) Ce format est apparu pratiquement à la naissance des logiciels de CAO, il est sensé être le format d'échange entre divers logiciel de conception graphique. Généralement c'est un fichier parfaitement lisible avec un éditeur de texte, bien qu'Autocad puisse produire des fichier DXF en binaire (Fichier beaucoup plus compact). Ce fichier à une structure bien précise pour reprendre la définition des objets que tu a pu dessiner sous Autocad. En quelque sorte c'est la base de donnée en clair de ton dessin. Dès le début, le lisp s'est appuyé sur ce codage pour pouvoir interagir sur ton dessin en mode programmation: fonction (entget), (entmake), (entmod) Maintenant, bien que toujours accessible, viable en programmation et je pense d'actualité pour encore pas mal de temps, la programmation à évolué vers le language orienté objet. Vlisp, ActiveX, VBA, C+, NET La référence AutoDesk sur le DXF Voir surtout la partie:DXF Entities Section
  20. Bonjour, Je n'ai pas de solution pour ENTREE, ou alors en s'appuyant sur une autre syntaxe que celle de LISTE. Ce que je peux te proposer est la syntaxe DXF (mais il faut connaitre les codes) et tu n'aura pas des renseignements (du moins pas en clair, comme les distances ou les angles) de la même manière que LISTE. Ce qui suit va te produire un fichier CSV en mode séquentiel (comme le DXF) qui sera lisible par excel en mode colonne (les données sont séparées, donc plus facile pour faire des tris ou des calculs) (defun c:list_for_CSV ( / js file2open f_open n dxf_cod lremov) (setq js (ssget)) (cond (js (setq file2open (strcat (getvar "DWGPREFIX") (getvar "DWGNAME") (rtos (getvar "cdate") 2 4) ".CSV")) (setq f_open (open file2open "w")) (repeat (setq n (sslength js)) (setq dxf_cod (entget (ssname js (setq n (1- n)))) lremov nil) (foreach n dxf_cod (if (member (car n) '(5 330 -1)) (setq lremov (cons (car n) lremov)))) (foreach m lremov (setq dxf_cod (vl-remove (assoc m dxf_cod) dxf_cod)) ) (foreach n dxf_cod (princ "\n" f_open) (if (listp (cdr n)) (while (car n) (princ (car n) f_open) (princ ";" f_open) (setq n (cdr n)) ) (progn (princ (car n) f_open) (princ ";" f_open) (princ (cdr n) f_open) (princ ";" f_open)) ) ) ) (close f_open) ) ) (prin1) )
  21. bonuscad

    COTATION COURBES DE NIVEAUX

    Bonjour, Je l'avais posté sur un forum (je ne sais plus où!) Cela créer un texte au milieu d'une/des polylignes optimisées sélectionnées en prenant son/leurs élévations. Je ne sais pas si ça répond vraiment à la demande... (vl-load-com) (defun c:Label_Side_Elevation ( / js htx AcDoc Space n obj ename pr pt deriv rtx nw_obj) (princ "\nSélectionnez des polylignes: ") (setq js (ssget (list '(0 . "LWPOLYLINE") (cons 67 (if (eq (getvar "CVPORT") 1) 1 0)) (cons 410 (if (eq (getvar "CVPORT") 1) (getvar "CTAB") "Model")) ) ) ) (cond (js (initget 6) (setq htx (getdist (getvar "VIEWCTR") (strcat "\nSpécifiez la hauteur du texte <" (rtos (getvar "TEXTSIZE")) ">: "))) (if htx (setvar "TEXTSIZE" htx)) (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)) Space (if (= 1 (getvar "CVPORT")) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) ) (cond ((null (tblsearch "LAYER" "Label Elevation")) (vlax-put (vla-add (vla-get-layers AcDoc) "Label Elevation") 'color 96) ) ) (repeat (setq n (sslength js)) (setq obj (ssname js (setq n (1- n))) ename (vlax-ename->vla-object obj) pr (* 0.5 (vlax-curve-getEndParam ename)) pt (vlax-curve-GetpointAtParam ename pr) deriv (vlax-curve-getFirstDeriv ename pr) rtx (- (atan (cadr deriv) (car deriv)) (angle '(0 0 0) (getvar "UCSXDIR"))) ) (if (or (> rtx (* pi 0.5)) (< rtx (- (* pi 0.5)))) (setq rtx (+ rtx pi))) (setq nw_obj (vla-addMtext Space (vlax-3d-point (setq pt (polar pt (+ rtx (* pi 0.5)) (getvar "TEXTSIZE")))) 0.0 (strcat "{\\fArial|b0|i0|c0|p34;" "%<\\AcObjProp Object(%<\\_ObjId " (itoa (vla-get-ObjectID (vlax-ename->vla-object obj))) ">%).Elevation \\f \"%lu2%pr0\">%" ) ) ) (mapcar '(lambda (pr val) (vlax-put nw_obj pr val) ) (list 'AttachmentPoint 'Height 'DrawingDirection 'InsertionPoint 'StyleName 'Layer 'Rotation 'BackgroundFill) (list 5 (getvar "TEXTSIZE") 5 pt "Standard" "Label Elevation" rtx 0) ) ) ) ) (prin1) )
  22. Cela va être difficile de t'aider car tu es dans une configuration propre à ton activité (dossiers, lisps, dwg, etc...) donc... pour reproduire celui ci dans un autre environnement sans (en plus) aucun fichier source, cela révèle de l'impossible: Il faudrait que j'ai un œil par dessus ton épaule pour pouvoir t'aiguiller dans tes démarches. Ça je ne comprends pas d'où tu sort cette syntaxe, et je ne suis pas surpris du retour: Pour compléter ma réponse précédente, les lisp en script peuvent fonctionner (je l'ai déjà pratiqué), mais il ne faut pas qu'ils comportent des interactions avec l'utilisateur, tel que des sélections manuelle, des introductions de paramètres, de demande de nom de fichier. En résumé il faut que le lisp puisse travailler sans aucune intervention de l'utilisateur: (éviter tous les fonctions lisp comportant un (getxxx), les sélection (ssget)(ormis le (ssget"_x") (entsel) pour les principales me venant à l'esprit). A première vue, celui que tu as posté à l'air de répondre à ces conditions. Si tu veux une aide plus efficace, il faudra donner plus d'éléments, dans l'état je ne peux donner que des pistes.
  23. Tu as le bouton "Actualiser" (2 flèches vertes enroulées) dans la palettes des Xrefs
  24. Bonjour, J'ai un ami qui s'est lancé dans cette aventure... Comme lili2006 il Cela fait plusieurs années qu'il persévère. Les premières ont été très difficile, maintenant il un carnet de clients, mais cela reste en dent de scie. A son désavantage, il a du suivre sa compagne (qui a un boulot stable mais qui assume financièrement les aléas de ses décrochage de job, sans elle je pense qu'il aurait laissé tombé). Actuellement, ça va mais c'est vraiment pas le Pérou, mais ça lui convient car c'est son choix de travailler ainsi. Ce n'est pas mon expérience personnelle, alors je ne saurais t'en dire plus. Alors bon courage
  25. Bonjour, Je pense (sans avoir testé, car il faudrait au moins un ou deux DWG pour pouvoir le faire). Mais lors d'un script, si tu veux utilisé un lisp (s'il n'est pas auto-chargé automatiquement) il te faudrait inclure le chargement de celui ci dans ton script. Par exemple (if (not (c:A2M)) (load "c:/chemin du dossier lisp/nom du fichier lisp a cargé.lsp")) et après dans ton script lancer la fonction (c:A2M) ou (command "A2M") NB: Voir s'il n'y a pas besoin aussi de la fonction (ggselrows ...) qui est absente de ton lisp. Il te faut soit l'inclure, soit la charger dans ton script si elle est indépendante de ton programme.
×
×
  • 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é