PB lisp "vlax-ename->vla-object"

Fermé
Polo - 23 mai 2012 à 14:33
 Polo - 18 juin 2012 à 13:56
Bonjour,

Si parmi vous quelqu'un pouvait m'expliquer pourquoi j'ai cette erreur:
type d'argument incorrect: consp <Nom d'entité: 7ffff605a90>

	
(command "_.pline"(while (not (zerop (getvar "cmdactive")))(command pause)))
(setq zone(entlast))
		
(setq Objzone(vlax-ename->vla-object (car zone)))
(vla-put-TextString aire(strcat "%<\\AcObjProp Object(%<\\_ObjId "(itoa (vla-get-ObjectID Objzone))">%).Area \\f \"%lu2\">%"))


En vous remerciant

10 réponses

Bonjour,

c'est plutot
(setq Objzone(vlax-ename->vla-object zone))

;)
0
Merci pour ta réponse, j'avais également fait ce test... Mais sans plus de réussite
Je cherche toujours...
0
UP ! svp

Si je mets:
[code]
(setq Objzone(vlax-ename->vla-object (car zone)))
[/code]
j'ai: type d'argument incorrect: consp <Nom d'entité: 7ffff605a90>

Si je mets
[code]
(setq Objzone(vlax-ename->vla-object zone))
[/code]
j'ai: type d'argument incorrect: VLA-OBJECT

Je m'en sort pas...
Merci
0
Bonjour,
Avant d'utiliser les fonctions vl-vlax, tu dois lancer cette fonction Lisp:
(vl-load-com)

recopie ce lisp et fais un essai en tapant test sur la ligne de commande, tu devrais avoir en retour quelque chose comme ça:
#<VLA-OBJECT IAcadLWPolyline 0a75ca24>

(defun c:test()
(vl-load-com)
(setq zone(entlast))
(setq Objzone(vlax-ename->vla-object zone))
)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Merci Yoda de ta patience

J'ai bien mis le (vl-load-com), je poste mon code peut-être que ce sera plus clair

(defun c:zoning (/)
(vl-load-com)
(setvar "CMDECHO" 1)
(setq
angl 0
)
(initget (+ 1 2 4)) (setq ech (getreal "\nEchelle de hachurage: "))
(setq echb (* 10 ech))

(while T
(setq Tzone (strcase (getstring T "Nom de la Zone: ")))
(command "_.pline"(while (not (zerop (getvar "cmdactive")))(command pause)))
(setq zone(entlast))
(command "-fhach" "_p" "ANSI31" ech angl "_s" zone "" "")
(setq hach(entlast))

(setq Objzone (vlax-ename->vla-object zone)) ; <-- ICI toujours le même soucis

(vla-put-TextString aire(strcat "%<\\AcObjProp Object(%<\\_ObjId "(itoa (vla-get-ObjectID Objzone))">%).Area \\f \"%lu2\">%"))
(setq aire(strcat "Aire: " aire))


(vla-put-TextString peri(strcat "%<\\AcObjProp Object(%<\\_ObjId "(itoa (vla-get-ObjectID Objzone))">%).Length \\f \"%lu2\">%"))
(setq peri(strcat "Périmètre: " peri))


(setq cdg (cdgpol zone))
(setq pt(strcat (rtos (car cdg) 2 3) "," (rtos (cadr cdg) 2 3) ",0"))
(command "inserer" "Y:\\Franck\\blocs\\zoningrep.dwg" pt echb echb angl Tzone aire peri)

(command "_.change" zone "_properties" "_color" 6 "")
(command "_.change" hach "_properties" "_color" 6 "")
)
(princ)
)

(defun cdgpol (pol / ent lp)
(if (and pol (= "LWPOLYLINE" (cdr (assoc 0 (setq ent (entget pol))))))
(setq lp (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= 10 (car x))) ent)))
(print "pas une polyligne !!! ")
)
(if lp
(List
(/ (apply '+ (mapcar 'car lp)) (length lp))
(/ (apply '+ (mapcar 'cadr lp)) (length lp))
)
)
)

Voili voilou
0
Le problème c'est que dans ma config ça marche.

Est-ce que tu as bien installé Express Tools et est-ce que les fonctionnalités fonctionnent bien. Essaye de lancer SuperHatch par le menu Express-> Draw par exemple.
0
En faite au départ tout fonctionnais très bien mais le contenu du fichier à était effacé par erreur, j'ai donc tenté de la refaire ... A priori je pensais avoir fait la même chose mais le lisp ne fonctionne pas !
Oui les oputils Express sont installé, super hach fonctionne aussi.

En bref je sèche depuis 5 jours!
0
J'ai essayé ton lisp

Il hachure bien la zone mais s'arrête sur cette ligne

(vla-put-TextString aire(strcat "%<\\AcObjProp Object(%<\\_ObjId "(itoa (vla-get-ObjectID Objzone))">%).Area \\f \"%lu2\">%"))

il semble que c'est l'argument aire(strcat "%<\\AcObjProp Object(%<\\_ObjId "(itoa (vla-get-ObjectID Objzone))">%).Area \\f \"%lu2\">%") qui pose problème.
0
Re...

J'ai fini par trouver une solution
Au-lieu de:
(vla-put-TextString aire(strcat "%<\\AcObjProp Object(%<\\_ObjId "(itoa (vla-get-ObjectID Objzone))">%).Area \\f \"%lu2\">%"))

Je fais...
(setq aire(strcat "%<\\AcObjProp Object(%<\\_ObjId "(itoa (vla-get-ObjectID Objzone))">%).Area \\f \"%lu2\">%"))

Enfin ça fonctionne, toutefois je n'ai toujours pas compris d'où venait l'erreur.
Merci Yoda pour ton aide
0
Re...

J'ai cherché un peu aussi, et j'ai trouvé que aire doit être un objet texte pour que ça marche.

Essaye ça, dans ton dessin tu crées une ligne de texte avec n'importe quel texte, c'est pour pouvoir selectionner cet objet par la suite, puis tu executes cette macro.
Quand la zone sera hachurée, sélectionne le texte qui prendra la valeur de la surface de la zone

(defun c:zoning (/)  
(vl-load-com)  
(setvar "CMDECHO" 1)  
(setq  
angl 0  
)  
(initget (+ 1 2 4)) (setq ech (getreal "\nEchelle de hachurage: "))  
(setq echb (* 10 ech))  


;(setq Tzone (strcase (getstring T "Nom de la Zone: ")))  
(command "_.pline"(while (not (zerop (getvar "cmdactive")))(command pause)))  
(setq zone(entlast))  
(command "-fhach" "_p" "ANSI31" ech angl "_s" zone "" "")  
(setq hach(entlast))  

(setq Objzone (vlax-ename->vla-object zone)) 

(setq Obj1 (car (entsel "\nSelectionnez un objet texte"))) 

(setq aire (vlax-ename->vla-object Obj1)) 

(vla-put-TextString aire (strcat "%<\\AcObjProp Object(%<\\_ObjId "(itoa (vla-get-ObjectID Objzone))">%).Area \\f \"%lu2\">%")) 

)
0
Merci pour ces explications
0