Aller au contenu

je dois en faire une grosse mais où ?


Didier-AD

Messages recommandés

ci joint un petit bout de LISP

la commande C:TEST2 demande un nom de calque et le crée

la commande C:TEST demande de pointer une entité, et demande un nom de calque elle est censée créer le calque et basculer l'entité dans ce nouveau calque.

 

 

 

(defun c:test( / e nomcalc olay )
  (setq e (car (entsel)))
  (setq nomcalc (getstring "\nNom du calque à créer ? ")) 
  (setq olay (vla-get-layers (vla-get-ActiveDocument (vlax-get-acad-object))))
  (vlax-invoke-method olay 'Add nomcalc)
  (setq ent (entget e))
  (entmod (subst (cons 8 nomcalc) (assoc 8 ent) ent))
)

;--------------------------------------------------
(defun c:test2(/ nomcalc  olay )
 (setq nomcalc (getstring "\nNom du calque à créer ? ")) 
 (setq olay (vla-get-layers (vla-get-ActiveDocument (vlax-get-acad-object))))
  (vlax-invoke-method olay 'Add nomcalc)
)
;---------------------------------------------------
(vl-load-com)
(princ)

La commande C:TEST2 fonctionne normalement

la commande C:TEST plante rend l'écran instable sur AutoCAD 2007 et plante une erreur fatale sur AutoCAD 2006 9 fois sur 10....

 

J'en conclue que j'ai surement une erreur de concept mais où ?

 

il s'agit de fonctions résumées qui dans mon développement sont un peu plus compliquées (définition de la couleur du calque et du type de ligne) ; jusqu'il y a 2 jours, je n'utilisais pas les fonctions VLA pour créer le calque, je me contentais de récupérer les caractéristiques du calque 0 par

 
(setq infolay (entget (tblobjname "LAYER" "0"))=

puis par une série de modification de la liste infolay je définissais les caractéristiques de mon nouveua calque et terminais par

 
(entmake infolay)

 

Il se trouve que cette ancienne technique que j'utilisais déjà au millénaire dernier met le souk dans la table des layers de le Beta 2008.

je suis donc passé aux fonctions VLA et je vous confie le résultat

 

merci à qui me dira où je me trompe....

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Essaye comme ça, personnellement j'essaye, tant que faire se peut, de ne pas mélanger les entmake, entmod ... avec les fonctions vla-

 

(defun c:test (/ e nomcalc olay)
 (setq e (car (entsel)))
 (setq nomcalc (getstring "\nNom du calque à créer ? "))
 (setq	olay (vla-get-layers
       (vla-get-ActiveDocument (vlax-get-acad-object))
     )
 )
 (vlax-invoke-method olay 'Add nomcalc)
 (vla-put-layer (vlax-ename->vla-object e) nomcalc)
) 

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Salut,

en fait je ne pense pas qu'il ne faille pas mélanger les genres.... c'est juste pour une raison de "propreté" du code... et de faisabilité aussi....

 

 

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Lien vers le commentaire
Partager sur d’autres sites

Des grands spécialistes dont Serge nous ont donné ce conseil. Ca provoquerait une certaine instabilité.

 

Je dois dire, avec 1 mega de lisp que je n'ai pas encore clairement établi de problèmes. Ce qui est sûr, c'est que le VLisp est vraiment plus rapide. Au point que j'ai remarqué sur des routines uniquement VLisp que c'étaient les affichages avec PRINC qui consommait le + !

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Lien vers le commentaire
Partager sur d’autres sites

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é