Aller au contenu

Messages recommandés

Posté(e)

Bonsoir!

 

J'ai un lisp que J'ai pris sur le forum et je veux le modifier en insérant une autre petite routine.

Ce que je n'arrive même pas à faire!

http://dl.free.fr/mbpb7Ppb6

http://dl.free.fr/tKXcG5M1v

 

Le problème est que je veux remplacer les coordonnée en dim

pour mon petit lisp, de façon à retourner les coordonnée Nord et Est, si possible y inclure le Rayonde la courbe en question.

 

Merci!

Acadnadien

Posté(e)

Tu veux une réponse franche ?!

 

Ca m'enquiquine d'aller ouvrir des fichiers qui font 3 lignes et de les manipuler là comme ça alors que ttu n'avais qu'à publier le code.

Normal pour un débutant d'avoir des questions.

 

Enthousiasme de ma part quant à donner des coups de mains aux novices :cool:

 

 

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Posté(e)

Bonjour Tramber

C'est que je ne voulais pas prendre trop de place dans le forum.

J'essayais d'être bref le plus possible, mais enfin, c'est le deuxième fichier qui est le plus important pour moi.

 Le problème est que je veux remplacer les coordonnée en dim 
pour mon petit lisp, de façon à retourner les coordonnée Nord et Est, si possible y inclure le Rayonde la courbe en question.

 

Merci de ton attention

Acadnadien

Posté(e)

Bonjour!

Je demande juste de corriger mon erreur sur le lisp suivant, suite à ma demande du début

 

 (vl-load-com)
(defun c:Dim_PolyCenArc ( / js ename obj pr pt_sel seg_bulge pt_cen)
(princ "\nSélectionner une polyligne.")
(while (null (setq js (ssget "_+.:E:S" '((0 . "LWPOLYLINE")))))
(princ "\nCe n'est pas une LWPolyLine!")
)
(setq
ename (ssname js 0)
obj (vlax-ename->vla-object ename)
pr -0.5
)
(command "_.undo" "_begin")
(repeat (fix (vlax-curve-getEndParam obj))
(setq
pt_sel (vlax-curve-GetPointAtParam obj (setq pr (1+ pr)))
seg_bulge (vla-GetBulge obj (- pr 0.5))
)
(setvar "clayer" "0")
(if (not (tblsearch "LAYER" "cen_arc"))
(command "_layer" "_N" "cen_arc" "_CO" "3" "cen_arc" "")
)
(setvar "clayer" "cen_arc")
(if (not (zerop seg_bulge))
(command
[surligneur] "_.shape" "coin"(osnap "_cen") "1" "0"
"_.point" "0" "1" "0"  "0" [/surligneur]

(setq pt1(getpoint pt1 p_cen ))
 (initget 16)
 (
  setq pt2 (getpoint "La Location du text? ")   
         e (strcat "N " (rtos (cadr   pt1)))       
         n (strcat "E " (rtos (car  pt1)))  
)	
 (
  command "text" pt2 0 E         
          "text" "" N      
            )

)
)
)
(command "_.undo" "_end")
(prin1)
)

 

Le problème est que je ne peux pas l'insérer au centre de mon rayon, pour ensuite continuer la commande c.a.d. retourner les coordonnées Nord et Est, j'aimerais également y retourer le rayon, si possible.

 

Merci à l'avance!

 

Acadnadien

Posté(e)

Salut,

 

À vue de nez,

 

- il manque une parenthèse fermante

- il manque un argument pour la fonction LISP osnap (regarde l'aide pouer cette fonction)

- les arguments pour la commande "_.point" ne sont pas valides.

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

Posté(e)

Non,

 

Si tu veux apprendre le LISP, tu as intérêt à apprivoiser l'éditeur Visual LISP et l'aide aux développeurs d'AutoCAD, notamment la rubrique AutoLISP Reference, chaque fonction LISP y est décrite (arguments requis et type de retour).

 

Par exemple pour la fonction osnap, on lit (extrait) :

(osnap pt mode)

Arguments

 

pt

 

A point.

 

mode

 

A string that consists of one or more valid Object Snap identifiers, such as mid, cen, and so on, separated by commas.

 

Return Values

 

A point; otherwise nil,

 

La fonction osnap requiert donc 2 arguments :

- un premier de type point (à savoir une liste de 2 ou 3 nombres ou une variable à laquelle est affectée un point valide)

- un second de type chaîne de caractère représentant un ou plusieurs modes d'accrochage.

Elle retourne un point ou nil.

 

Je te recommandes aussi la lecture de ce sujet.

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

Posté(e)

Ce n'est pas un question de don et tu t'attaques à quelque chose qui n'est pas si simple.

 

Il faut un peu de logique et de méthode.

Dans l'éditeur, tu peux sélectionner chaque expression de ta routine en double cliquant devant la parenthèse ouvrante du début de l'expression. Ça permet tout d'abord de vérifier l'appariement des parenthèse et, l'expression étant sélectionnée de l'évaluer (Ctrl+Maj+E ou icône "Charger la sélection") tu auras le résultat de l'évaluation dans la console et dans la fenêtre d'AutoCAD.

En faisant ça pour chaque expression de ta routine dans l'ordre d'exécution tu localiseras les erreurs et pourras essayer de les résoudre avant de passer à la procédure suivante.

Si tu sélectionnes le symbole d'une fonction (en bleu) et que tu fais Ctrl+F1, l'aide s'ouvrira directement à la page de cette fonction.

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

Posté(e)

Ah bah non !

Tu édites ton lisp dans l'éditeur ou pas ?

Fais expression par expression (doublie-clic sur l'ensemble de parenthèses et CTRL+MAJ+E) et dis-nous où ca coince.

De mon côté, je n'ai pas de fichier de forme pour tester jusqu'au bout.

 

 

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Posté(e)

Ah ben oui !

:cool:

J'avais pas vu que tu avais posté entre 2 !

Il m'arrive d'ouvrir une réponse et de trainer à la poster... (courriel, coup de fil, eau qui boue,...etc).

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Posté(e)

Bonsoir !

 

Toujours le même problème, non solutionné.

Il me manque encore le Rayon de l'arc?

 

(while (null (setq js (ssget "_+.:E:S" '((0 . "LWPOLYLINE")))))
(princ "\nCe n'est pas une LWPolyLine!")
)
(setq
ename (ssname js 0)
obj (vlax-ename->vla-object ename)
pr -0.5
)
(command "_.undo" "_begin")
(repeat (fix (vlax-curve-getEndParam obj))
(setq
pt_sel (vlax-curve-GetPointAtParam obj (setq pr (1+ pr)))
seg_bulge (vla-GetBulge obj (- pr 0.5))
)
(setvar "clayer" "0")
(if (not (tblsearch "LAYER" "cen_arc"))
(command "_layer" "_N" "cen_arc" "_CO" "3" "cen_arc" "")
)
(setvar "clayer" "cen_arc")
(if (not (zerop seg_bulge))
(command
"_.dimordinate" "_none" (setq p_cen (osnap (trans pt_sel 0 1) "_cen")) "_none" (polar p_cen 0 (getvar "dimtxt"))
       "_.dimordinate" "_none" p_cen "_none" (polar p_cen (* pi 0.5) (getvar "dimtxt"))
"_.shape" "coin"  "0" "1" "0"
"_.point" "0" 

(
  command "text"  -4 325 "R= "  [surligneur]                    [/surligneur]             )  

)
)
)
(command "_.undo" "_end")
(prin1)
) 

 

Quelqu'un pourrais m'aider ?

Merci!

 

[Edité le 31/3/2010 par pierrevigneux]

Acadnadien

Posté(e)

(strcat "R="(rtos(abs(/(-(vlax-curve-GetDistAtParam obj (+ pr 0.5))
           (vlax-curve-GetDistAtParam obj(- pr 0.5)))
         (* 4.0 (atan seg_bulge))))2 2)) 

 

Rayon de l'arc ?

 

le bulge est la tangente du quart de l'angle décrit.

Donc l'angle est 4 x atan bulge.

 

Puis R est la distance / angle car D=2piR

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Posté(e)

Bonjour Tramber

Si j'ajoute ton code à

 ( command "text"  -4 325 "R= "                                
              strcat "R="(rtos(abs(/(-(vlax-curve-GetDistAtParam obj (+ pr 0.5))
           (vlax-curve-GetDistAtParam obj(- pr 0.5)))
         (* 4.0 (atan seg_bulge))))2 2))                   )  
  )  

C'est bien mais il ne m'imprime pas la réponse, le calcul est parfait ?

Command: R=90 Unknown command "R=90".

 

Pierre

 

[Edité le 1/4/2010 par pierrevigneux]

Acadnadien

Posté(e)

Dis-donc, j'ai voulu te laisser un peu te débrouiller. Mais (stract te sort un texte tout prêt. A toi de le rentrer dans une variable avec setq juste avant le command et de le glisser au bon endroit dans ce command.

 

T'es presque arrivé :P

Je t'aiderai uniquement si tu fais un gros effort mais sans y arriver.

:cool:

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Posté(e)

Bon j'ai essayé tout ce que je crois être le mieux mais zut sans livre ni, prof. et seul je n'y arrive pas, je suis réellement bouché, je commence à penser que je deviens trop vieux pour ce genre d'exercice, pourtant je suis très trenace habituellement, mais il y une certaine limite quand même.Je déclare forfait pour l'instant.

 

T'es presque arrivé  je  t'aiderai uniquement si tu fais un gros effort mais sans y arriver. 

 

Voilà ce que ça me retourne

error: bad argument value: AutoCAD command: #

 

(setq R=
( command "text"  -4 325 "R= " 
 strcat "R="(rtos(abs(/(-(vlax-curve-GetDistAtParam obj (+ pr 0.5))
          (vlax-curve-GetDistAtParam obj(- pr 0.5)))
         (* 4.0 (atan seg_bulge))))2 2))  

 

Voilà le gros effort !

 

Acadnadien

Posté(e)

Salut,

 

Il y a un problème de parenthèse.

 

Tu sembles avoir du mal avec les imbrications d'expressions (c'est normal au début).

 

Peut-être serait-il plus facile/compréhensible, de décomposer l'expression en définissant quelques variables :

 

(setq rayon (abs (/ ...)))
(setq texte (strcat "R=" rayon))
(command ...)

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

Posté(e)

En effet !

 

Ceci devrait fonctionner :

(setq rayon (abs (abs(/(-(vlax-curve-GetDistAtParam obj (+ pr 0.5))
           (vlax-curve-GetDistAtParam obj(- pr 0.5)))
         (* 4.0 (atan seg_bulge))))))

(setq texte (strcat "R=" (rtos rayon 2 2)))

(command "_text" (getpoint) 100 0 texte "")

 

Ce que n'a pas dit (gile) et moi non-plus, c'est qu'il vaut mieux éviter rentrer trop de code dans un COMMAND.

Est-ce plus clair maintenant ?

Tu en profiteras pour nous dire si le calcul est bel et bien correct. Je l'ai recalculé pour la Nième fois sur un bout de papier.

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Posté(e)

Merci Tramber et (gile)

Mais je suis encore au même résultat qu'hier.

Le calcul est bon y as pas de problème, la commande getpoint d'après mes connaissances est censée interrompre la tâche pour saisir un point manuellement dans le dessin, moi ce que je souhaite est d'ajouter sa valeur dans mon dessin juste après avoir obtenus ses coordonnées l

 

Donc le code que j'ai ajouté va comme ceci.

(setq rayon (abs (abs(/(-(vlax-curve-GetDistAtParam obj (+ pr 0.5))
           (vlax-curve-GetDistAtParam obj(- pr 0.5)))
         (* 4.0 (atan seg_bulge))))))

(setq texte (strcat "R=" (rtos rayon 2 2)))

(command "_text" (getpoint ) 100 0 texte "") 

 

Salutations !

Acadnadien

Posté(e)

J'ai mis (getpoint) pour montrer ce que l'on peut mettre dans un COMMAND mais c'est surtout parce que je ne comprenais pas ton -4 !

 

Et pourquoi pas la variable p_cen ?

As-tu essayé la commande -LIGNE pour débugger ton programme et comprendre comment on enchaine avec exactitude les réponses ?

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)

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é