mateus Posté(e) le 8 avril 2013 Posté(e) le 8 avril 2013 Bonjour à tous je voudrais savoir comment faire pour obtenir une distance entre deux polylignes avec la commande mesurer sachant que mes deux polylignes sont mémorisées en variable, je voudrais utiliser la commande "_dist" mais lorsque je l'utilise, autocad ne reconnait pas mes variables voici la partie concernée du lisp avec la commande distance: IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII (command "decaler" D1 ch pt ""); décalage niveau Réseaux ECP(setq nreseau (entlast))(command "_chprop" nreseau "" "_layer" "ICI-RES-ECP" "") ;calque ICI-RES-ECP pour la nouvelle polyligne décaléee(command "-calque" "e" "ICI-RES-ECP-candelabre" "co" "vert" "" "TL" "CONTINUOUS" "" "");Chargement du calque candélabre(command "decaler" D2 ch pt ""); décalage niveau candélabre(setq ncande (entlast));mise en variable de la poly(command "_chprop" ncande "" "_layer" "ICI-RES-ECP" ""); calque ICI-RES-ECP pour la nouvelle polyligne décaléee (setq PtInsertion (getpoint "\nCliquez sur un côté du plan: "))(command "inserer" "candelabre" PtInsertion 1 1 0 "") ; insere le bloc candélabre ;récupération des coordonnées de la poly réseau(setq reseau(entget nreseau))(setq rx(cadr(assoc 10 reseau)));récupération du x(setq ry(cddr (assoc 10 reseau)));récupération du y ;récupération des coordonnées de la poly candélabre(setq cande(entget ncande))(setq cx(cadr (assoc 10 cande)));récupération du x(setq cy(cddr (assoc 10 cande)));récupération du y ;obtention de la distance réseau/candélabre: (command "_dist" nreseau ncande "") Merci par avance :)
Olivier Eckmann Posté(e) le 8 avril 2013 Posté(e) le 8 avril 2013 Bonjour,la commande distance attend 2 points pour calculer la distance entre ces 2 points.il faut utiliser la fonction lisp (distance PT1 PT2) plutôt que la commande Distance d'AutoCAD dans ton cas : (distance (list cx cy) (list rx ry)) Olivier
mateus Posté(e) le 8 avril 2013 Auteur Posté(e) le 8 avril 2013 Merci Olivier pour ta réponse j'ai essayé avec ta méthode, seulement un message d'erreur est parvenu : "; erreur: type d'argument incorrect: point 2D/3D: (30.5751)" ;récupération des coordonnées de la poly réseau(setq reseau(entget nreseau))(setq rx(cadr(assoc 10 reseau)));récupération du x(setq ry(cddr (assoc 10 reseau)));récupération du y ;récupération des coordonnées de la poly candélabre(setq cande(entget ncande))(setq cx(cadr (assoc 10 cande)));récupération du x(setq cy(cddr (assoc 10 cande)));récupération du y ;obtention de la distance réseau/candélabre:(setq dcr (distance (list cx cy) (list rx ry)))
Olivier Eckmann Posté(e) le 8 avril 2013 Posté(e) le 8 avril 2013 Cela veut dire que l'une de tes 4 valeurs CX ou CY ou RX ou RY n'est pas correcte et vaut nil Vérifier en mode debug avec l'espion laquelle n'est pas lue correctement Olivier
mateus Posté(e) le 8 avril 2013 Auteur Posté(e) le 8 avril 2013 J'ai vérifier et aucunes valeurs ne vaut "nil" mais seulement les coordonnées en y de mes points sont entre parenthèse, est-ce normal?
(gile) Posté(e) le 8 avril 2013 Posté(e) le 8 avril 2013 Salut, En faisant :(setq ry(cddr (assoc 10 reseau)))ry sera une liste, par un nombre... il faudrait faire :(setq ry(caddr (assoc 10 reseau))) ou plus simplement, sans décomposer les coordonnées de chaque points :(distance (cdr (assoc 10 reseau)) (cdr (assoc 10 cande))) Bien comprendre les fonctions fondamentales car et cdr, ainsi que leur possibles imbrications, est essentiel. On pourrait presque dire que tout le LISP est construit sur ces fonctions. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
mateus Posté(e) le 8 avril 2013 Auteur Posté(e) le 8 avril 2013 Merci Giles pour ton aide précieuse, maintenant je voudrais réaliser les raccordements de mes candélabres, ci-joints "aide3" les étapes avec lesquelles j'aimerai poursuivre mon programme La partie du programme concernée (command "decaler" D1 ch pt ""); décalage niveau Réseaux ECP (setq nreseau (entlast)) (command "_chprop" nreseau "" "_layer" "ICI-RES-ECP" "") ;calque ICI-RES-ECP pour la nouvelle polyligne décaléee (command "-calque" "e" "ICI-RES-ECP-candelabre" "co" "vert" "" "TL" "CONTINUOUS" "" "");Chargement du calque candélabre (command "decaler" D2 ch pt ""); décalage niveau candélabre (setq ncande (entlast));mise en variable de la poly (command "_chprop" ncande "" "_layer" "ICI-RES-ECP" ""); calque ICI-RES-ECP pour la nouvelle polyligne décaléee (setq PtInsertion (getpoint "\nCliquez sur un côté du plan: ")) (command "inserer" "candelabre" PtInsertion 1 1 0 "") ; insere le bloc candélabre ;récupération des coordonnées de la poly réseau (setq reseau(entget nreseau)) (setq rx(cadr(assoc 10 reseau)));récupération du x (setq ry(caddr(assoc 10 reseau)));récupération du y ;récupération des coordonnées de la poly candélabre (setq cande(entget ncande)) (setq cx(cadr(assoc 10 cande)));récupération du x (setq cy(caddr(assoc 10 cande)));récupération du y ;obtention de la distance réseau/candélabre et début du tracé de l'antène candélabre (setvar "orthomode" 1) (setq dcr (distance (list cx cy) (list rx ry))) (command "polylign" ptInsertion dcr "") Je bute au niveau de cette commande : (command "polylign" ptInsertion dcr "") la variable "dcr" est pourtant bien la distance entre la poly réseau et la poly candélabre mais le tracé ne se lance pas... Merci d'avance
(gile) Posté(e) le 8 avril 2013 Posté(e) le 8 avril 2013 la variable "dcr" est pourtant bien la distance entre la poly réseau et la poly candélabre mais le tracé ne se lance pas...Normal "dcr" est une distance, un nombre (type REAL en LISP) et la commande POLYLIGN attend un point (liste de deux ou trois nombres en LISP).Il faut faire attention au type des arguments passés à command (et aux fonctions en général). Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
mateus Posté(e) le 8 avril 2013 Auteur Posté(e) le 8 avril 2013 Je n'arrive pas trop à assimiler la différence désolé comment puis-je procéder dans ce cas pour tracer mon raccordement? Merci et désolé pour les lacunes et les explications de bases à me donner...
-Olivier- Posté(e) le 8 avril 2013 Posté(e) le 8 avril 2013 Bonjour Mogo,Je vois dans ton code que tu passe la variable orthomode à 1.Je suppose donc que tu as l'habitude de mettre le mode orto, donner une direction au curseur puis entrer la distance.Tu ne pourras pas donner la direction dans ton programme, donc une distance seule ne peut fonctionner. La commande attend donc une suite de points et non une ou des distance(s).En espérant t'avoir aidé. Olivier
mateus Posté(e) le 8 avril 2013 Auteur Posté(e) le 8 avril 2013 Bonsoir Olivier, et merci pour ta réponse ! Je comprends ce que tu veux dire, ce que je veux c'est tout simplement indiquer la distance qui correspond à celle calculée précédemment dans mon code (entre la poly réseau et celle des candélabres) Etant donné que je l'ai mis en variable, comment puis-je faire pour la rentrer dans ma commande polyligne?
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