Aller au contenu

Messages recommandés

Posté(e)

Bonjour à tous,

 

Bon le titre fait un peu peur mais j'ai un soucis assez inexpliqué,

 

j'ai une routine qui me permet de supprimer plusieur élément en allant chercher leur handle dans un dictionnaire, jusque la tout va bien rien de phénoméne paranormal^^.

Donc ma routine supprime tout bien tout les objets.

Mais quand je relance ma routine il me supprime bien un autre groupe d'objet mais me fait réaparaitre l'objet supprimé précédemment!!! et quand je continue à supprimer des objets ça fonctionne de cette façon :

 

Imaginons que j'ai 6 goupe d'objet numéroté de 1 à 6.

je les supprimes en commençant par le 1 puis le 2,3 etc...

quand je supprime par exemple l'objet 5 le 3 et le 1 vont etres supprimé et le 2 ,4 vont apparaitre (alors que j'avais déja supprimé), quand je supprime le 6 le 2 4 vont etre suppirmé et le 1 3 5 vont apparaitre.

ça fonctionne par paire, alors est ce mon code qui à une anomalie qui créer ça ou c'est un bug dut à une variable autocad ?

Qui à une idée?

 

PS : j'ai l'impression qu'il m'arrive toujours des trucs fou de ce genre!!

Posté(e)

Ce que j'efface manuellement avant réaparait aussi,

 

je met mon lisp des fois que quelqu'un voit quelque chose :

 

(defun c:pp ( / ent dict data nom_ref situ type_piquage dict_piquage fct_extract_angle fct_recherche_angle_similaire fct_extract_angle
     fct_suppr_1_piquage debut_suppr nouveau_list_handle nouveau_list_handle1 list_handle_suppr
     fct_extract_handle_tableau fct_extract_tout_handle_piq fct_recherche_angle_similaire fct_extract_tout_handle_tableau
     fct_ename fct_data_xrecord_angle_1 fct_nbr_piquage fct_dict_nouveau_nbr fct_dict_nouveau_lg fct_suppr_angle
     fct_dict_nouveau_angle fct_correction_lg_nm fct_data_xrecord_lg_40 fct_data_xrecord_handle_tableau fct_data_xrecord_handle_dessin
     nbr_angle nom_dict_nbr list_handle_suppr )
 
(defun debut_suppr ()
 (setq ent  (car(entsel "Séléctionné l'objet à supprimer ?")))
 (setq dict (cdadr (member '(102 . "{ACAD_XDICTIONARY") (entget ent))))
 (setq data (dictsearch dict "reference"))
 (setq nom_ref (cdr(assoc 1 data)))
 ;(alert nom_ref)
 (setq situ (substr nom_ref 4 1))
 ;(alert situ)
 (cond ((or(= situ "t")(= situ "r"))
	(cond ((= situ "t"); cas trou d'homme sur toit 
	       (setq situ "toit")
	       (setq type_piquage "th")
	       (setq dict_piquage "piquage_toit")
	       )
	      ((= situ "r"); cas trou d'homme sur robe 
	       (setq situ "robe")
	       (setq type_piquage "th")
	       (setq dict_piquage "piquage_robe")
	       ))
 )
((= situ "u")
 (setq situ (substr nom_ref 9 1))
 	(cond ((= situ "t"); cas trou d'homme sur toit 
	       (setq situ "toit")
	       (setq type_piquage "piquage")
	       (setq dict_piquage "piquage_toit")
	       )
	      ((= situ "r"); cas trou d'homme sur robe 
	       (setq situ "robe")
	       (setq type_piquage "piquage")
	       (setq dict_piquage "piquage_robe")
	       ))
 ))
 ;(alert (strcat "c'est un " type_piquage " situer sur le/la " situ "."))
 (fct_extract_angle dict_piquage nom_ref )
 (fct_recherche_angle_similaire situ)
 (cond ((or (< 2 nbr_angle) (= nbr_angle 2))
 (alert "plusieur piquage")
 )
((= nbr_angle 1)
 ;(alert "1 seul piquage")
 (fct_suppr_1_piquage situ type_piquage nom_ref dict_piquage ename_info_piquage dict_list_angle)
 ))
 )
;				;
(defun fct_suppr_1_piquage (situ type_piquage nom_ref dict_piquage ename_info_piquage nom_dict_angle / pt1 pt2)
 (setq nom_dict_nbr (strcat "nbr_"type_piquage"_"situ))
 (fct_nbr_piquage ename_info_piquage nom_dict_nbr)
 (fct_suppr_angle ename_info_piquage dict_list_angle nom_dict_angle)
 (fct_correction_lg_nm ename_info_piquage "info_nommenclature")
 (fct_extract_handle_tableau dict_piquage nom_ref)
 (fct_extract_tout_handle_tableau situ tableau_handle_piq)
 (fct_extract_tout_handle_piq dict_piquage nom_ref )
 (foreach n list_handle_suppr (entdel(handent n)))
;;;   (setq lg_list_handle_suppr (1-(length list_handle_suppr)))
;;;   (while (> lg_list_handle_suppr 0)
;;;    (setq eff (handent (nth lg_list_handle_suppr  list_handle_suppr)))
;;;    (entdel eff)
;;;    (setq lg_list_handle_suppr (1- lg_list_handle_suppr))
;;;)
 (entdel (eval(read(strcat "ename_"nom_ref))))
 (setq pt1 '(0 0 0))
 (setq pt2 '(0 9.7 0))
 

 
  
;;;  (command "_layout" "_set" "a2")
;;;  (foreach n handle_extract_1_partie (command "_move" (handent n) "" pt1 pt2))
;;;  (command "_layout" "_set" "objet")
)
;				;




;----------------------------BOITE----A -----OUTILS-------FONCTIONS-----------------------------;
;												;
(defun fct_extract_angle (  dict_piquage nom_ref /)
 (fct_ename (namedobjdict) dict_piquage)
 (fct_ename (eval(read(strcat "ename_"dict_piquage))) nom_ref)
 (fct_ename (eval(read(strcat "ename_"nom_ref))) "info_piquage")
 (fct_data_xrecord_angle_1 ename_info_piquage "angle")
)
;				;
(defun fct_extract_handle_tableau (  dict_piquage nom_ref /) 
 (fct_ename (namedobjdict) dict_piquage) 
 (fct_ename (eval(read(strcat "ename_"dict_piquage))) nom_ref)
 (fct_ename (eval(read(strcat "ename_"nom_ref))) "handle_piquage")
 (fct_data_xrecord_handle_tableau ename_handle_piquage "tableau")
 
 
)
;				;
(defun fct_extract_tout_handle_piq (  ename_handle_piquage nom_ref /)
 (fct_ename (namedobjdict) dict_piquage)
 (fct_ename (eval(read(strcat "ename_"dict_piquage))) nom_ref)
 (fct_ename (eval(read(strcat "ename_"nom_ref))) "handle_piquage")
 (fct_data_xrecord_handle_dessin ename_handle_piquage "dessin")
 (setq list_handle_suppr (cons tableau_handle_piq dessin_handle_piq_2 ))
)
;				;
(defun fct_recherche_angle_similaire (situ / )
 (fct_ename (namedobjdict) "info")
 (fct_ename ename_info "info_piquage")
 (setq dict_list_angle (strcat "angle_inserer_"situ))
 (fct_ename ename_info_piquage dict_list_angle)
 (setq angle_identique (vl-remove-if-not '(lambda(x)(and(eq (car x) 1)(eq(cdr x) angle_value))) (entget (eval(read (strcat "ename_angle_inserer_"situ))))))
 (setq nbr_angle (length angle_identique))
)
;				;
(defun fct_extract_tout_handle_tableau (situ handle_suppr / test_number nbr_handle )
 (setq nom_dict_list_handle (strcat "handle_ligne_"situ))
 (fct_ename ename_info_nommenclature nom_dict_list_handle)
 (setq list_handle (vl-remove-if-not '(lambda(x)(eq (car x) 1)) (entget (eval(read (strcat "ename_handle_ligne_"situ))))))
 (setq lg_list_handle (1-(length list_handle)))
 (setq handle_extract_2_partie nil)
 (setq handle_extract_1_partie nil)
 (while (/= (cdr(nth lg_list_handle list_handle)) handle_suppr)
  (setq dict_obj (cdr(nth lg_list_handle list_handle)))
  (setq handle_extract_2_partie (cons dict_obj  handle_extract_2_partie))
  (setq lg_list_handle (1- lg_list_handle))
 )
 (setq lg_list_handle (1- lg_list_handle))
 (while (or(> lg_list_handle 0)(= lg_list_handle 0))
  (setq dict_obj (cdr(nth lg_list_handle list_handle)))
  (setq handle_extract_1_partie (cons dict_obj  handle_extract_1_partie))
  (setq lg_list_handle (1- lg_list_handle))
 )
(cond ((null handle_extract_1_partie )
(setq nouveau_list_handle1 handle_extract_2_partie))
      
      ((null handle_extract_2_partie )
(setq nouveau_list_handle1 handle_extract_1_partie))
      
      ((and(/= handle_extract_1_partie 0)(/= handle_extract_2_partie 0))
(setq nouveau_list_handle1  handle_extract_2_partie)
(setq lg_handle_extract_1_partie (1-(length handle_extract_1_partie)))
(while (or(> lg_handle_extract_1_partie 0)(= lg_handle_extract_1_partie 0))
  (setq dict_obj (nth lg_handle_extract_1_partie handle_extract_1_partie))
  (setq nouveau_list_handle1 (cons dict_obj  nouveau_list_handle1))
  (setq lg_handle_extract_1_partie (1- lg_handle_extract_1_partie))
)))
 (setq lg_nouveau_list_handle1 (1-(length nouveau_list_handle1)))
 (while (or(> lg_nouveau_list_handle1 0)(= lg_nouveau_list_handle1 0))
   (setq dict_obj (cons 1 (nth lg_nouveau_list_handle1 nouveau_list_handle1)))
   (setq nouveau_list_handle (cons dict_obj nouveau_list_handle))
   (setq lg_nouveau_list_handle1 (1- lg_nouveau_list_handle1))
   )

(entdel (eval(read (strcat "ename_handle_ligne_"situ))))
(setq xrec (entmakex(append '((0 . "XRECORD") (100 . "AcDbXrecord") ) nouveau_list_handle)))
(dictadd ename_info_nommenclature (strcat "handle_ligne_"situ) xrec)
)
;				;
(defun fct_ename (dict_parent nom_dict / )
  (setq ename_ (strcat "ename_"nom_dict))
  (set (read(eval ename_)) (cdr(assoc -1 (dictsearch dict_parent nom_dict))))
)
;				;
(defun fct_data_xrecord_angle_1 (dict_parent nom_xrecord)
   (set (read(strcat(eval nom_xrecord)"_value")) (cdr(assoc 1 (dictsearch dict_parent nom_xrecord))))
)
;				;
(defun fct_data_xrecord_lg_40 (dict_parent nom_xrecord)   
   (set (read(eval nom_xrecord)) (cdr(assoc 40 (dictsearch dict_parent nom_xrecord))))
)
;				;
(defun fct_data_xrecord_handle_tableau (dict_parent nom_xrecord)
   (set (read(strcat(eval nom_xrecord)"_handle_piq")) (cdadr(vl-remove-if-not '(lambda(x)(eq (car x) 5)) (dictsearch dict_parent nom_xrecord))))
)
;				;
(defun fct_data_xrecord_handle_dessin (dict_parent nom_xrecord)
   (set (read(strcat(eval nom_xrecord)"_handle_piq")) (cdr(vl-remove-if-not '(lambda(x)(eq (car x) 5)) (dictsearch dict_parent nom_xrecord))))
   (setq lg_dessin_handle_piq (1-(length dessin_handle_piq)))
   (while (or (>  lg_dessin_handle_piq 0)(=  lg_dessin_handle_piq 0))
     	   (setq dict_obj (cdr(nth lg_dessin_handle_piq dessin_handle_piq)))
  	   (setq dessin_handle_piq_2 (cons dict_obj  dessin_handle_piq_2))
  	   (setq lg_dessin_handle_piq (1- lg_dessin_handle_piq))
  )
 
) 
;				;
(defun fct_nbr_piquage (ename_info_piquage nom_dict_nbr / nbr_piquage)
   (setq nbr_piquage (cdr(assoc 90 (dictsearch ename_info_piquage nom_dict_nbr))))
   (setq nouveau_nbr_piquage (1- nbr_piquage))
   (fct_dict_nouveau_nbr ename_info_piquage nom_dict_nbr nouveau_nbr_piquage)
)  
;				;
(defun fct_dict_nouveau_nbr (ename_info_piquage nom_xrecord  data /  lst_data xrec)
   (setq dict_nbr_piquage (dictsearch ename_info_piquage nom_xrecord))
   (setq lst_data(cons  '90 (eval  data)))
   (entdel (handent (cdr(assoc 5 dict_nbr_piquage))))
   (setq xrec (entmakex(append '((0 . "XRECORD") (100 . "AcDbXrecord") )(list lst_data))))
   (dictadd ename_info_piquage nom_xrecord xrec)
)
;				;
(defun fct_dict_nouveau_lg (ename_info_piquage nom_xrecord  data /  lst_data xrec)
   (setq dict_lg_nm (dictsearch ename_info_piquage nom_xrecord))
   (setq lst_data (cons  '40 (eval  data)))
   (entdel (handent (cdr(assoc 5 dict_lg_nm))))
   (setq xrec (entmakex(append '((0 . "XRECORD") (100 . "AcDbXrecord") )(list lst_data))))
   (dictadd ename_info_piquage nom_xrecord xrec)
)
;				;
(defun fct_suppr_angle (ename_info_piquage dict_list_angle nom_dict_angle /)
(setq data_liste_angle (vl-remove-if-not '(lambda(x)(and (eq (car x) 1) (/= (cdr x) angle_value))) (entget (eval(read (strcat "ename_angle_inserer_"situ))))))
(fct_dict_nouveau_angle (eval(read (strcat "ename_angle_inserer_"situ))) data_liste_angle)
)
;				;
(defun fct_dict_nouveau_angle (ename_angle_inserer data /  lst_data xrec)
 (entdel (handent (cdr(assoc 5 (entget ename_angle_inserer)))))
 (setq xrec (entmakex(append '((0 . "XRECORD") (100 . "AcDbXrecord")) data)))
 (dictadd ename_info_piquage (strcat "angle_inserer_"situ) xrec)
)
;				;
(defun fct_correction_lg_nm (ename_info_piquage nom_dict /)
 (fct_ename ename_info nom_dict)
 (setq nom_dict_lg (strcat "lg_nm_"situ))
 (fct_data_xrecord_lg_40 ename_info_nommenclature nom_dict_lg)
 (setq nouveau_lg_nommenclature (- (eval(read nom_dict_lg)) 9.7))
 (fct_dict_nouveau_lg ename_info_nommenclature nom_dict_lg nouveau_lg_nommenclature)
)
;-----------------------------------------------------------------------------------------------;
;-----------------------------------------------------------------------------------------------;

(debut_suppr)

)



 

Posté(e)

Bonjour,

Mais quand je relance ma routine il me supprime bien un autre groupe d'objet mais me fait réaparaitre l'objet supprimé précédemment!!!

 

Sans voir la routine... mais d'après ta description, je pense que c'est l'usage de la fonction (entdel ename) pour lequel le c'est le fonctionnement normal.

 

Pour le même nom d'entité cela fait une fonction à bascule, un coup ça l'efface, un coup cela restore celle-ci.

 

Extrait de l'aide lisp

ENTDEL

Deletes objects (entities) or restores previously deleted objects

 

(entdel ename) The entity specified by ename is deleted if it is currently in the drawing. The entdel function restores the entity to the drawing if it has been deleted previously in this editing session. Deleted entities are purged from the drawing when the drawing is exited. The entdel function can delete both graphical and nongraphical entities.

 

Arguments

 

ename

Name of the entity to be deleted or restored.

 

Return Values

 

The entity name.

 

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

En effet d'après l'aide ça à l'air ça mais j'utilise pas le même ename la première et la deuxième fois donc c'est pas censé me le restaurer.

Sinon y à un moyen autre que de sortir du dessin pour purger les entités?

Posté(e)

Bon j'ai vu que tu as posté le code entre temps.

 

j'utilise pas le même ename la première et la deuxième fois

 

Pourtant tu utilise (handent) ce qui justement te permet d'obtenir le bon ename sans le connaître.

Sans mettre plonger dans ton lisp, tu dois mal gérer ta liste de handles que tu veux référencer.

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)
Pourtant tu utilise (handent) ce qui justement te permet d'obtenir le bon ename sans le connaître.

 

ça veut dire que c'est bien ou pas d'utiliser le handent

 

Sans mettre plonger dans ton lisp,

ce que je comprend c'est assez barbare brut comme ça!!

tu dois mal gérer ta liste de handles que tu veux référencer.

 

ma liste je la ressort la

(foreach n list_handle_suppr (entdel(handent n)))

il y a 5 ou 6 handle ça dépent elle est remise à zéro en sortant...

...Je vien de vérifier et oui j'ai fait une boulette, la liste

list_handle_suppr

était bien remise à zéro mais les deux listes qui étaient crées pour la composer non du coup elles contenanient tout les handles que j'avais déja supprimé donc un coup elle supprimait un coup elle restaurait!!

 

Bon désolé du dérangement et merci a tous et surtout bonuscad

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é