ASTERIXII Posté(e) le 2 février 2007 Posté(e) le 2 février 2007 ci-joint 2 lisps dont la fonction est de transformer un texte en bloc avec un point et des attributs. Le premier lisp fonctionne bien pour la selection d'une entité (defun C:alain () (progn (setq txt (entget (car (nentsel "\nPointer l'altitude a copier :")))) (setq ins_pt (cdr (assoc 10 txt))) ; Point d'insertion (setq txt (cdr ( assoc 1 txt ))) (if (= (vl-string-search "=" txt) nil) (setq val (atof txt)) (setq val (atof (substr txt 3))) ) ;_ Fin de if (setq z (atof txt)) (setq Point (list (car ins_pt) (cadr ins_pt) z)) (setq z (rtos z 2 2)) ) ;_ Fin de progn (command "_insert" blk_nom (list (car point) (cadr point)) "1" "1" "" ) ;_ Fin de command (upd_ent (entlast) 8 blk_layer) (upd_blk (entlast) blk_mat 1 n) (xd_ins (entlast) z) (upd_blk (entlast) blk_alt 1 z) (command "-hyperlien" "i" "o" (entlast) "" "" "" (strcat "N° " n " Alt " z) ) ;_ Fin de command ) ;_ Fin de defun le second lisp ne fonctionne pas, il est pour un selection multiple (defun C:alain () (Prompt "\n\nSélectionner les Textes à extraires...") (setq ss (ssget '((0 . "TEXT,MTEXT")))) (progn (setq cnt 0) (while (setq toto (ssname ss cnt)) (setq txt (cdr (assoc 1 toto ) ) X (rtos (nth 1 (assoc 10 (entget toto) ) ) 2 8 ) Y (rtos (nth 2 (assoc 10 (entget toto) ) ) 2 8 ) cnt (1+ cnt) );setq (if (= (vl-string-search "=" txt) nil) (setq val (atof txt)) (setq val (atof (substr txt 3))) ) ;_ Fin de if (setq z (atof txt)) (setq Point (list x y z)) (setq z (rtos z 2 2)) ) ;_ Fin de progn (command "_insert" blk_nom (list (car point) (cadr point)) "1" "1" "" ) ;_ Fin de command (upd_ent (entlast) 8 blk_layer) (upd_blk (entlast) blk_mat 1 n) (xd_ins (entlast) z) (upd_blk (entlast) blk_alt 1 z) (command "-hyperlien" "i" "o" (entlast) "" "" "" (strcat "N° " n " Alt " z) );while ) ;_ Fin de command ) ;_ Fin de defun Une idée sur l'erreure ?
bonuscad Posté(e) le 2 février 2007 Posté(e) le 2 février 2007 Où sont les fonctions (defun upd_ent (......)) , (defun upd_blk (.....)) et (defun xd_ins (....)) ??? :o Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
ASTERIXII Posté(e) le 5 février 2007 Auteur Posté(e) le 5 février 2007 En fait voila le code complet (defun incremen () (setq incre_pt $value) (if (= incre_pt "0") (setq n "0") (setq n (itoa (+ (getvar "useri5") 1))) ) ;_ Fin de if (set_tile "NUME" n) ) ;_ Fin de defun (defun table_plus (a) (if (= a 1) (progn (setq ajoute 1) (mode_tile "ALTZ" 1) (mode_tile "ALTPLUS" 0) ) ;_ Fin de progn (progn (setq ajoute 0) (mode_tile "ALTZ" 0) (mode_tile "ALTPLUS" 1) ) ;_ Fin de progn ) ;_ Fin de if ) ;_ Fin de defun (defun C:NP () (if (not c:gpl) (load "acad.lsp") ) ;_ Fin de if (setq oldos (getvar "osmode")) (setq ech_attrib (rtos (getvar "useri1") 2 0)) (setq z "0.00") (if (not valplus) (setq valplus "0.00") ) ;_ Fin de if (if (not ajoute) (setq ajoute 0) ) ;_ Fin de if (if (not incre_pt) (setq incre_pt "0") ) ;_ Fin de if (setq id_dcl (load_dialog "topobloc.dcl")) (if (not (new_dialog "NEWPT" id_dcl)) (exit) ) ;_ Fin de if (if (= incre_pt "0") (progn (setq n "0") (set_tile "incre_pt" "0") ) ;_ Fin de progn (progn (setq n (itoa (1+ (getvar "useri5")))) (set_tile "incre_pt" "1") ) ;_ Fin de progn ) ;_ Fin de if (cond ((= ajoute 0) (setq a 1) (table_plus 0) (set_tile "ADZ" "0") (set_tile "UNZ" "1") ) ((= ajoute 1) (setq a 0) (table_plus 1) (set_tile "ADZ" "1") (set_tile "UNZ" "0") ) ) ;_ Fin de cond (set_tile "NUME" n) (set_tile "ALTPLUS" valplus) (set_tile "ALTZ" z) (action_tile "ALTPLUS" "(setq valplus $value)") (action_tile "NUME" "(setq n $value)") (action_tile "ALTZ" "(setq z $value)") (action_tile "ADZ" "(table_plus 1)") (action_tile "UNZ" "(table_plus 0)") (action_tile "CANCEL" "(exit)") (action_tile "incre_pt" "(incremen)") (start_dialog) (unload_dialog id_dcl) (If (Not (tblsearch "BLOCK" blk_nom)) (creabloc) ) ;_ Fin de If (setvar "osmode" 0) (progn (setq txt (entget (car (nentsel "\nPointer l'altitude a copier :")))) (setq ins_pt (cdr (assoc 10 txt))) ; Point d'insertion (setq txt (cdr ( assoc 1 txt ))) (if (= (vl-string-search "=" txt) nil) (setq val (atof txt)) (setq val (atof (substr txt 3))) ) ;_ Fin de if (setq z (atof txt)) (setq Point (list (car ins_pt) (cadr ins_pt) z)) ;; alain (setq z (rtos z 2 2)) ) ;_ Fin de progn (command "_insert" blk_nom (list (car point) (cadr point)) "1" "1" "" ) ;_ Fin de command (upd_ent (entlast) 8 blk_layer) (upd_blk (entlast) blk_mat 1 n) (xd_ins (entlast) z) (upd_blk (entlast) blk_alt 1 z) (command "-hyperlien" "i" "o" (entlast) "" "" "" (strcat "N° " n " Alt " z) ) ;_ Fin de command (setvar "osmode" oldos) (if (= incre_pt "1") (setvar "USERI5" (atoi n)) ) ;_ Fin de if ) ;_ Fin de defun boite DCL NEWPT:dialog {label="CREATION D'UN NOUVEAU POINT"; : boxed_column { label = "Format du Point à créer"; spacer; //:row{ :radio_button {label = "Additionner en Z";key = "ADZ";} <-- selection : radio_button {label = "Nouveau Z";key = "UNZ";} spacer; :toggle {label = "Incrémentation des points";key = "incre_pt";} <--- selection // } :edit_box{label="Numero du point";key="NUME";edit_width=15;} :edit_box{label="Valeur de l'altitude"; key="ALTZ";edit_width=15;} :edit_box{label="Valeur à additionner"; key="ALTPLUS";edit_width=15;} } :row{ :button {label="OK";key="APRES";is_default=true;fixed_width=true;width=12;} :button {label="Annuler";key="CANCEL";is_cancel=true;width=12;} } }
bonuscad Posté(e) le 6 février 2007 Posté(e) le 6 février 2007 J'ai voulu faire un effort pour t'aider, mais ton lisp est a priori trop spécifique a ton environnement, (en gros il n'est pas portable d'une machine à l'autre sans erreur) Déjà j'ai du mettre en remarque ;(if (not c:gpl);(load "acad.lsp"); ) ;_ Fin de ifpour aller plus loin! Que fait cette commande GPL qui est automatiquement chargée ???D'ailleurs cette instruction est illlogique, tu demande à rechargé le AutoCAD.lsp qui est normalement chargé automatiquement ??? après (If (Not (tblsearch "BLOCK" blk_nom)) (creabloc) ) ;_ Fin de If Ou est défini cette variable blk_nom? pour moi elle est à nil et entraine une erreur Les fonctions évoquées dans mon précédent post sont toujours indisponibles. Donc tu comprendras qu'il est difficile de t'aider même avec la meilleure volonté [Edité le 6/2/2007 par bonuscad] Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
ASTERIXII Posté(e) le 7 février 2007 Auteur Posté(e) le 7 février 2007 Mea culpa, effectivement mon environnement et trop perso, en fait il manque beaucoup trop d’élément de déclaration.Pour AutoCAD.lsp il s’agit d’un second fichier , chargé suivant un profil, mais le code initial n’est pas de moi mais de PHILIPPE CAPDEVILA pour son logiciel CapTOPO.Il ma déjà modifié en partie une fonction, mais je cherche à l’étendre.la fonction est de transformer un texte en bloc avec un point et des attributs.sa fonction demande un point d'insertion et le choix d'un texte, moi je veux selectionner plusieurs texte , le point d'insertion du bloc correspondant au point d'insertion du texte -->(setq ins_pt (cdr (assoc 10 txt))) ; Point d'insertion du texte ->(setq Point (list (car ins_pt) (cadr ins_pt) z)) Point d'insertion du bloccela fonctionne bien avec 1 texte, mais lorsque je modifie le code pour une selectioncela ne marche plus.
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant