Aller au contenu

Messages recommandés

Posté(e)

Bonjoir (oui, c'est toujours la même chose...)

 

Voilà, cher CadIxpiens et CadIxpiennes, je cherche à faire, en une seule ligne de commande dans un menu, une polyligne entre deux points uniques une flèche...

 

On clique la pointepuit on clique la fin de la Pline, mais à 20 cm (ex) de début de cette pline, on insert un point. Pour qu'à la fin, on n'ai automatiquement le suite de commande ; pedit;m;e;0.3;0.1;n;e;.1;.1;;

 

On édite la pLine, (donc, de trois sommet (le deuxième sommet est à 20 cm du premier) on donne la largeur 0 au premier, la largeur .3 au deuxième sommet du premier segment, puis, on donne les valeurs 0.1 pour les autres sommets des autres segments...

 

Je ne pouvais pas écrire cela dans la "Personnalisation des Menus" vu qu'il n'y a que du lisp pour le faire...

 

Mais là, j'en appel au ceinture super méga foncées avec, éventuellement, des danes en bonus...

 

Merci d'avance...

 

DenisH...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)
(setq pta(getpoint "\nPremier Point"))
(setq ptb(getpoint "\nDernier Point"))
(if(  (progn(alert"\Pas de flèche")(command "_pline" pta ptb nil))
 (command "_pline" pta "_W" 2 2(polar ptb (+ pi(angle pta ptb))100) "_W" 50 0 ptb nil))

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

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

Salut,

 

Un petit LISP vite fait, taper fleche à la ligne de commande :

 

(defun c:fleche	(/ p1 p2 p3)
 (initget 1)
 (setq p1 (getpoint "\nPointe de la flèche: "))
 (initget 1)
 (setq p2 (getpoint p1 "\nTalon de la flèche: "))
 (setq p3 (polar p1 (angle p1 p2) 0.2))
 (command "_.pline" "_non" p1 "_w" 0.0	0.3 "_non" p3 "_w" 0.1 0.1 "_non" p2 "")
 (princ)
) 

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

Posté(e)

Si si, mais ca va de A vers B, c'est didactique :cool:

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

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

j'en appel au ceinture super méga foncées

 

La couleur des ceintures n'a rien à voir avec la capacité à répondre à des questions plus ou moins complexes, elle est liée au nombre de messages postés et, à l'allure où tu postes, tu ne devrais pas tarder à être ceinture méga foncée ;)

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

Posté(e)

Hello

 

J 'essaye ton lisp Gile mais, mais...J 'ai

 

Commande:

APPLOAD fleche.lsp correctement chargé(s)

 

 

Commande: ; erreur: type d'argument incorrect: numberp: nil

 

Commande:

Commande: fleche

Commande inconnue "FLECHE". Appuyez sur F1 pour obtenir de l'aide.

 

??? dommage

@+

Posté(e)

Salut,

Ce matin je charge

defun c:fleche (/ p1 p2 p3)

(initget 1)

(setq p1 (getpoint "\nPointe de la flèche: "))

(initget 1)

(setq p2 (getpoint p1 "\nTalon de la flèche: "))

(setq p3 (polar p1 (angle p1 p2) 0.2))

(command "_.pline" "_non" p1 "_w" 0.0 0.3 "_non" p3 "_w" 0.1 0.1 "_non" p2 "")

(princ)

)

 

J'essaye et j'obtiens

Commande: fleche

 

Corp de la flèche - Point de départ/[Largeur/Type] :

Position de la pointe de la flèche:

Dessinée avec [Arc/Segment droit]? :

:exclam: :casstet:

 

Bizarre, c'est quoi ce truc, il parle pas de Arc/Segment droit dans son lisp

 

En fait j'avais un autre Fleche.lsp sur le disque dur que voici

 

(defun c:fleche ( / key_mod lock_mod p_begin p_end pl_wid d_pts a_pts nb_or p_x l_fl m_osm tg_dir pt_dir)

(setvar "cmdecho" 0)

(if (or (eq (getvar "USERS1") "Fixed") (eq (getvar "USERS1") "Varie"))

(setq key_mod (getvar "USERS1"))

(setvar "USERS1" "Fixed")

)

(if (or (eq (getvar "USERS2") "Yes") (eq (getvar "USERS2") "No"))

(setq lock_mod (getvar "USERS2"))

(setvar "USERS2" "No")

)

(initget 9 "Largeur Type _Width Type")

(while (eq (type (setq p_begin (getpoint "\nCorp de la flèche - Point de départ/[Largeur/Type] : "))) 'STR)

(cond

((eq p_begin "Width")

(initget 4)

(setq pl_wid (getdist (strcat "\nNouvelle largeur <" (rtos (getvar "plinewid")) ">: ")))

(if pl_wid (setvar "plinewid" pl_wid) (setq pl_wid (getvar "plinewid")))

)

((eq p_begin "Type")

(initget "Constant Variable _Fixed Varie")

(setq key_mod (getkword (strcat "\nCorp de flèche [Constant/Variable]? <" (if (eq (getvar "USERS1") "Fixed") "Constant" "Variable") ">: ")))

(if (not key_mod) (setq key_mod (getvar "USERS1")) (setvar "USERS1" key_mod))

(initget "Oui Non _Yes No")

(setq lock_mod (getkword (strcat "\nVoulez vous verrouiller le sens de gauche à droite [Oui/Non]? <" (if (eq (getvar "USERS2") "No") "Non" "Oui") ">: ")))

(if (not lock_mod) (setq lock_mod (getvar "USERS2")) (setvar "USERS2" lock_mod))

)

(T (setq key_mod (getvar "USERS1") lock_mod (getvar "USERS2")))

)

(initget 9 "Largeur Type _Width Type")

)

(if (not pl_wid) (setq pl_wid (getvar "plinewid")))

(initget 9)

(setq

p_end (getpoint p_begin "\nPosition de la pointe de la flèche: ")

d_pts (distance p_begin p_end)

a_pts (angle p_begin p_end)

nb_or (/ (1+ (sqrt 5)) 2)

l_fl (+ (* (* 0.1 nb_or) d_pts) (getvar "plinewid"))

m_osm (getvar "osmode")

)

(if (eq lock_mod "Yes")

(cond

((and (> a_pts (/ pi 2)) (< a_pts (/ (* pi 3) 2)))

(setq

a_pts p_end

p_end p_begin

p_begin a_pts

a_pts (angle p_begin p_end)

)

)

)

)

(initget "Arc Segment _Arc Vertex")

(cond

((eq (getkword "\nDessinée avec [Arc/Segment droit]? : ") "Arc")

(grdraw p_begin p_end -1)

(initget 1)

(setq tg_dir (getangle p_begin "\nTangente du corp de la flèche: ") pt_dir (polar p_begin tg_dir d_pts))

(grdraw p_begin p_end -1)

(if (and (or (> (- a_pts tg_dir) 0) (< (- a_pts tg_dir) (- pi))) (< (- a_pts tg_dir) pi))

(setq p_x (polar p_begin (+ tg_dir (* (1- nb_or) (rem (- (+ (* 2 pi) a_pts) tg_dir) pi))) (* (1- nb_or) d_pts)))

(setq p_x (polar p_begin (- tg_dir (* (1- nb_or) (rem (- (+ (* 2 pi) tg_dir) a_pts) pi))) (* (1- nb_or) d_pts)))

)

(setvar "osmode" (+ 16384 (rem (getvar "osmode") 16384)))

(if (eq key_mod "Fixed")

(command "_.pline" p_begin "_arc" "_direction" pt_dir p_x "_width" l_fl 0.0 p_end "")

(command "_.pline" p_begin "_width" (getvar "plinewid") 0.0 "_arc" "_direction" pt_dir p_x "_width" l_fl 0.0 p_end "")

)

)

(T

(setq p_x (polar p_begin a_pts (* (1- nb_or) d_pts)))

(setvar "osmode" (+ 16384 (rem (getvar "osmode") 16384)))

(if (eq key_mod "Fixed")

(command "_.pline" p_begin p_x "_width" l_fl 0.0 p_end "")

(command "_.pline" p_begin "_width" (getvar "plinewid") 0.0 p_x "_width" l_fl 0.0 p_end "")

)

)

)

(setvar "plinewid" pl_wid)

(setvar "osmode" m_osm)

(setvar "cmdecho" 1)

(princ)

)

;)
Posté(e)

Merci (gile), je ne savais pas pour la couleur des ceintures...

 

Mais je vais me calmer, je vais recevoir un bouquin qui traite du Lisp dans les menus... Le temps que le l'apprenne par coeur et Hop ! !

 

A moins que je n'y pige rien, dans ce cas, je reveindrai demander des aides explicatives...

 

Denis...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

Merci Gile

 

Tu sais que je n 'y connais rien mais il n 'y a pas des variables qui pourraient parasiter ton programme chez moi ???

Au fait c 'est quoi

numberp: nil

?

 

@+

Posté(e)

Je viens de penser à quelque chose qui se dit souvent ici....

Lors des copier/coller vous parlez des espaces, est-ce que cela pourrait venir de là ?

Posté(e)

Merci à tous ! ! C'est EXACTEMENT ce que je cherchais...

 

Mais vu l'éficacité des différents protagonistes de ce forum, quelle serait la réponse si je demandais de faire la même chose (clique la pointe, puis la queue) mais avec une polyligne de plusieurs sommets (indéfinis) ? ?

 

Alors là, je suis curieux, ça pourrait me servir pour faire des flèches de rappel avec un texte au bout...

 

Grand merci encore ! ! C'est génial ! !

 

Denis...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)
Alors là, je suis curieux, ça pourrait me servir pour faire des flèches de rappel avec un texte au bout...

 

Moi je fais un LREPERERAP et je rentre dans la poignée du bout de flèche puis j'étire avec C (option Copier), ca multiplie les flèche. Ca marche aussi plus simplement avec Majuscule depuis AutoCAD 2004.

 

Esbe :

(defun c:flech ()
(setq pta(getpoint "\nPremier Point"))
(setq ptb(getpoint "\nDernier Point"))
(if((progn(alert"\Pas de flèche")(command "_pline" pta ptb nil))
(command "_pline" pta "_W" 2 2(polar ptb (+ pi(angle pta ptb))100) "_W" 50 0 ptb nil))
)

 

Lance FLECH mais ne te laisse pas avoir pas les accrobj, je ne les controle pas dans la routine.

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

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

Merci à tout le monde, pour les réponses et l'aide...

 

J'ai choisi la routine de Gile, car c'est la premièer que j'ai testé et vu qu'elle a fonctionnée du premier coup, je n'ai pas cherché plus loin... Je n'ai que quelques petites correction à faire.. Comme changer les é épaisseurs de la polyligne pour qu'elles soit conforme ausx différentes échelles...

 

Mais ne m'en voulez pas Tramber ou Kallain... Rien n'est contre vous...

 

Donc, je remerci l'ensemble du forum pour cette aide précieuse...

 

Maintenant, je dois écrire cette routine en une seulle ligne de menu... ! ! !

 

J'ai de quoi nourrir la planche en pain...

 

Merci encore...

 

Denis...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

Mais ne m'en voulez pas Tramber ou Kallain... Rien n'est contre vous...

 

T'inquiète pas, on publie des réponses parfois en 4ème vitesse pour continuer à assurer dans son boulot et sans se soucier vraiment de ce que l'on n'a pas le temps de lire.

L'important, c'est aussi de voir de tout. De comprendre...et de prendre.

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

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

Hé ce n'etait pas un reproche ! ;)

 

Je voulais juste savoir lequel fonctionné puisque je n 'ai pas reussi à utiliser celui de Gile !!

 

bonsoir

Posté(e)

Pour Esbe,

 

Vraiment, je ne vois pas.

 

Le message numberp: nil signifie qu'une fonction (ou une commande) attend un nombre et qu'à la place de ce nombre elle reçoit une variable Lisp nulle (nil) ou contenant autre chose qu'un nombre, or tous les nombres requis sont renseignés par des nombres ou par la fonction angle qui calcule un angle à partir des points spécifiés.

 

Il ne me semble pas que cela puisse provenir d'une variable système (surtout si d'autres LISPs fonctionnent)

 

Il n'y a pas d'histoire d'espace dans cette routine.

 

Ou alors un truc du type de ce qui est arrivé à Kallain (conflit entre 2 LISPs de même nom) essaye de remplacer c:fleche par autre chose : c:fleche1 par exemple.

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

Posté(e)

Juste pour info : Bonus_cad a créé un lisp qui se nomme aussi "fleche"...

 

Il a aussi développé plein d'autres supers trucs ! !

 

Denis...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

Bonus_cad a créé un lisp qui se nomme aussi "fleche"...

 

Oui en effet, celle que cite Kallain a été publié sur ce site. :exclam:

 

Je rappelle qu'elle est plus destinée à une présentation "Fun";quoique, une fois paramétrée est utlisée toujous à la même taille (utilisation d'@ pour la longueur de la flèche").

En effet elle s'auto-proportionne par rapport à sa taille.

 

J'ai déjà vu plein de solutions pour des flèches. Un truc qui revient souvent et qui est peut être une bonne idée est l'utilisation d'une variable de cotation pour paramétrer l'épaisseur de la flèche. (encore faut-il faire de la cotation dans son dessin pour que ce soit fiable)

 

J'ai bien essayer de faire quelque chose de "chiadé" avec (entmake), mais je bloque pour créer le code 210 (avec 2 points fournis en 3D), en fait placer cette poly2D directement dans son SCU objet.

 

Je ne serais pas surpris que (gile) me donne la solution, c'est qu'il planche dessus le garçon ;)

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Exactement BonusCad, le coup de la proportion, c'est super bien trouvé ! !

 

Fallait le faire ! !

 

Denis...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

Je ne serais pas surpris que (gile) me donne la solution

 

Je serais bien incapable (et je mets quiconque au défi ;) ) de définir un seul plan avec seulement 2 points.

Avec 3 points, c'est exactement pour cet usage que Norm_3pts a été faite.

 

Sinon, j'avais aussi fait des flèches, assez sommaires, dont l'utilité était de dessiner les vecteurs représentant les forces en statique graphique, la pointe est proportionnelle à la longueur de la flèche. Une autre routine permet de récupérer les coordonnées du vecteur et sa norme, une troisiéme pour les coordonnées du vecteur normé (si çà peut servir à quelqu'un).

 

;;; C:VEC
;;; Crée une polyligne 2D symbolisant un vecteur et affiche ses coordonnées et sa norme

;;; Redéfinition de *error*
(defun VEC_ERR (msg)
 (if (= msg "Fonction annulée")
   (princ)
   (princ (strcat "\nErreur: " msg))
 )
 (setq	*error*	m:err
m:err nil
 )
 (princ)
)

;;; Fonction principale

(defun c:vec (/ pt1 pt2 ang dist)
 (setq	m:err	*error*
*error*	VEC_ERR
 )
 (princ "Vecteur")
 (initget 1)
 (setq pt1 (getpoint "\nSpécifiez l'origine du vecteur: "))
 (initget 1)
 (setq pt2 (getpoint pt1 "\nSpécifiez l'extrémité du vecteur: "))
 (DRAW_VEC pt1 pt2)
 (setq	*error*	m:err
m:err nil
 )
 (princ)
)

(defun DRAW_VEC	(pt1 pt2 / ang dist pt3 pt4)
 (setq	ang  (angle pt1 pt2)
dist (/ (distance pt1 pt2) 10)
pt3  (polar pt2 (angle pt2 pt1) dist)
Norm (trans '(0 0 1) 1 0 T)
 )
 (command "_regen")
 (entmake
   (list '(0 . "LWPOLYLINE")
  '(100 . "AcDbEntity")
  '(100 . "AcDbPolyline")
  '(90 . 5) ;_ nombre de sommets
  '(70 . 0) ;_ ouverte (0) ou fermée (1)
  (cons 38 (- (caddr pt1) (caddr (trans '(0 0) 0 1)))) ;_ élévation
  (cons 10 (trans pt1 1 Norm))
  (cons 10 (trans pt3 1 Norm))
  (cons 40 (/ dist 2)) ;_ largeur de la pointe
  (cons 41 0.0)
  (cons 10 (trans pt2 1 Norm))
  (cons 210 Norm) ;_ direction d'extrusion
   )
 )
)


;;; C:GETVEC
;;; Affiche les coordonnées et la norme d'un vecteur défini par son origine et son extrémité

(defun C:GETVEC	(/ vec pt1 pt2)
 (initget 1)
 (setq pt1 (getpoint "\nSpécifiez l'origine du vecteur: "))
 (initget 1)
 (setq pt2 (getpoint pt1 "\nSpécifiez l'extrémité du vecteur: "))
 (princ
   (strcat "\nVecteur: "
    (PT->COORD (mapcar '- pt2 pt1))
    " Norme: "
    (rtos (distance pt1 pt2))
   )
 )
 (princ)
)

;;; C:NORMVEC
;;; Affiche les coordonnées du vecteur normé décrit par un segment

(defun C:NORMVEC (/ vec pt1 pt2)
 (initget 1)
 (setq pt1 (getpoint "\nSpécifiez l'origine du segment: "))
 (initget 1)
 (setq
   pt2	(getpoint pt1 "\nSpécifiez un autre point sur le segment: ")
 )
 (princ
   (strcat "\nVecteur normé: "
    (PT->COORD
      (mapcar '(lambda (x) (/ x (distance pt1 pt2)))
	      (mapcar '- pt2 pt1)
      )
    )
   )
 )
 (princ)
)

 

[Edité le 5/4/2006 par (gile)]

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

Posté(e)

Bonjour à tous

 

Bon j 'ai repris mes essais donc

Gile, j 'ai reenregistré sous un autre nom , même resultat

Tramber j 'ai chargé ton programme et

Commande: flech

 

Premier Point

Dernier Point_pline

Spécifiez le point de départ:

La largeur courante est de 0.000.

Spécifiez le point suivant ou [Arc/Demi-larg/LOngueur/annUler/LArgeur]:

Spécifiez le point suivant ou [Arc/Clore/Demi-larg/LOngueur/annUler/LArgeur]:

Commande: nil

et à l 'écran PAS DE FLECHE

Je vais essayer les autres...

Conseillez moi un bon guide, pas trop aride pour commancer à comprendre vos codes !

Sinon, je vais garder ma vieille technique pour faire mes flêches

po, clic, clic,la,.3,0, clic !!

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é