jarod34 Posté(e) le 10 septembre 2008 Posté(e) le 10 septembre 2008 Bonjour, Je sollicite un peu d'aide vis à vis d'une question.j'ai un programme LISP qui tourne parfaitement sous 2006, mais en voulant le faire tourner sous 2008 il fait la gueule... Ce qui merdouille c'est que dans mes routines je fait appelle à une sous routine qui me permet d'inserer un bloc. Seulement il n'arrive pas à me l'inserer ce fichu bloc pourtant il peut allé le chercher ... Je ne comprend plus, voici ma routine d'insertion du bloc: (defun block() (vl-load-com) ;(if (= eht nil) (setq eht 0.1) ;) (command "aire" "O" ent) (setq aire(getvar "AREA")) (setq aire (* aire fact)) (setq aire (rtos aire 2 2)) (setq ins (trans tl 1 0)) (command "inserer" "block" tl (* eht 10) (* eht 10) 0 nom aire num) (princ)) Et voici par exemple l'un de mes programmes qui y fait apelle: (defun hplanpti() (vl-load-com) (setvar "ATTDIA" 0) ; Enregistre les paramètres actuel du mode accroche objet (setq ao (getvar "OSMODE")) ; Désactive le mode accroche objet. (setvar "OSMODE" 0) (vl-load-com) ; Enregistrer les paramètres du calque courant (setq cc (getvar "clayer")) (if (= val nil) (setq val 1) ) ; Début Boucle tant que. (while ; Mise en mémoire du point indiquant l'intérieur du contour. (setq PT (getpoint "\nSpécifiez un point intérieur : ")) ; Création du calque Metré plancher et mise de celui-ci en calque courant. (command "-calque" "n" "__METRE_Plancher" "e" "__METRE_Plancher" "co" "3" "" "t" "a" "" "") ; Réalisation du hachurage de l'intérieur du contour créé. (command "_.bhatch" "_properties" "u" 0 val "n" PT "") (setq ent (entlast)) (setq tl (vlax-get (vlax-ename->vla-object ent) 'origin)) (setq nom "Plancher") (setq num " ") [surligneur] (block)[/surligneur] ) ; Restitue le calque qui était courant avant le début de la commande (setvar "clayer" cc) ; Restitue les paramètres du mode accroche objet présent avant le début de la commande. (setvar "OSMODE" ao) (princ)) J'ai essayer de passer par des commandes à savoir mettre c:block, ou bien carrement (command "block") rien ne change, je ne sais pas si c'est un morceau du programme qu'il digère pas... Si certain on eut ce genre de souci, ou possède une idée elle est la bien venu et je vous remerci par avance. ++
bseb67 Posté(e) le 11 septembre 2008 Posté(e) le 11 septembre 2008 Salut jarod34! Juste deux questions: - où est déclaré fact? => (setq aire (* aire fact)) - le bloc "block" existe bien dans le dessin?Pour mes lisps, j'ai fait aussi une petite fonction qui s'appelleinserer_bloc avec pour paramètre le nom du bloc, le chemin (au cas où il n'existe pas encore dans ledessin), le point d'insertion, l'échelle en x et y, l'angle, pour les attributs je met attdia à 0 pour ne pas avoir la boite de dialogue des attributs, et attreq à 0 pour que les attributs prennent leur valeurpar défaut. Ensuite je lance une fonction qui initialise les attributs du (set_attribut entité nom_att val_att) Tous pour lisp, Lisp pour tous!Avec Revit, cela ne vas trop vite...
bseb67 Posté(e) le 11 septembre 2008 Posté(e) le 11 septembre 2008 Et j'oublie une chose, initialiser des variables dans une fonction et y faire appel dans une autreappelée dans la première sans les passer en argument je ne trouve pas ca top. Tous pour lisp, Lisp pour tous!Avec Revit, cela ne vas trop vite...
Bred Posté(e) le 11 septembre 2008 Posté(e) le 11 septembre 2008 Salut,à première vue tu n'utilises pas de fonction qui ont changé de la version 2006 à 2008.Par contre, as-tu bien déclarer ton chemin de bibliothèque dans les fichier supports (si ton bloc ne fait pas partis de la collection de ton dessin, il ne pourras pas le trouver !) Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
bonuscad Posté(e) le 11 septembre 2008 Posté(e) le 11 septembre 2008 Pourquoi vouloir utiliser les blocs pour inscrire les surfaces? Les champs dynamiques sont tellement plus avantageux pour faire cela.Ils gardent le lien avec l'entité qui a servie à faire la mesure, si le contour change, ils changent aussi, si le lien est perdu, cela devient des dièses #. On est sur ainsi de ne pas avoir d'informations erronées. Je te propose ce qui suit pour faire des champs dans la même optique que ton code (vl-load-com) (defun c:surf_plancher ( / AcDoc Space nw_style e_last pt_in htx rtx obj ename nw_obj) (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" "__METRE_Plancher")) (vlax-put (vla-add (vla-get-layers AcDoc) "__METRE_Plancher") 'color 3) ) ) (cond ((null (tblsearch "STYLE" "Romand-Field")) (setq nw_style (vla-add (vla-get-textstyles AcDoc) "Romand-Field")) (mapcar '(lambda (pr val) (vlax-put nw_style pr val) ) (list 'FontFile 'Height 'ObliqueAngle 'Width 'TextGenerationFlag) (list "romand.shx" 0.0 (/ (* 15.0 pi) 180) 1.0 0.0) ) ) ) (setq e_last (entlast)) (while (setq pt_in (getpoint "\nSpécifiez un point intérieur [b]<[/b]Entrée pour finir>: ")) (bpoly pt_in nil '(0 0 1)) (cond ((not (eq e_last (entlast))) (if (not htx) (progn (initget 6) (setq htx (getdist pt_in (strcat "\nSpécifiez la hauteur du champ [b]<[/b]" (rtos (getvar "TEXTSIZE")) ">: "))) (if htx (setvar "TEXTSIZE" htx)) (setq htx (getvar "TEXTSIZE")) ) ) (if (not rtx) (if (not (setq rtx (getorient pt_in "\nSpécifiez l'orientation du champ [b]<[/b]0.0>: "))) (setq rtx 0.0)) ) (setq obj (entlast) ename (vlax-ename->vla-object obj) ) (vlax-put ename 'Layer "__METRE_Plancher") (setq nw_obj (vla-addMtext Space (vlax-3d-point (trans pt_in 1 0)) 0.0 (strcat "%[b]<[/b]\\AcObjProp.16.2 Object(%[b]<[/b]\\_ObjId " (itoa (vla-get-ObjectID ename)) ">%).Area \\f \"%lu2%pr2%ps[s=," "m²]\">%" ) ) ) (mapcar '(lambda (pr val) (vlax-put nw_obj pr val) ) (list 'AttachmentPoint 'Height 'DrawingDirection 'InsertionPoint 'StyleName 'Layer 'Rotation) (list 5 (getvar "TEXTSIZE") 5 (trans pt_in 1 0) "Romand-Field" "__METRE_Plancher" rtx) ) (setq e_last (entlast)) ) (T (princ "\nAucun contour trouvé.") ) ) ) (prin1) ) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
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