Aller au contenu

Messages recommandés

Posté(e)

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 :)

Posté(e)

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

 

 

 

 

Posté(e)

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)))

post-41726-0-70746200-1365415183_thumb.png

Posté(e)

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

Posté(e)

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

post-41726-0-37611400-1365424274_thumb.png

Posté(e)

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

Posté(e)

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...

Posté(e)

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

Posté(e)

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?

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é