Aller au contenu

Messages recommandés

Posté(e)

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 ?

Posté(e)

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

Posté(e)

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;}
}
}

Posté(e)

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 if

pour 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

Posté(e)

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 bloc

cela fonctionne bien avec 1 texte, mais lorsque je modifie le code pour une selection

cela ne marche plus.

 

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • 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é