Aller au contenu

Schématiser sens polyligne


Neophyte

Messages recommandés

Hello

 

Voir ci-dessous ...

 

A mon avis, pas besoin de Lisp/VLisp, j'utilise un type de ligne special

et eventuellement apres je re-parametre le type de ligne original !?

 

Bon WE, Bye, lecrabe

 

 

------ Comment voir le sens de numerisation des Polylignes ------

 

Tu peux par exemple utiliser un type de ligne specifique ... ou un programme Lisp/Vlisp ...

 

Solution (Olivier + Patrice) empruntee sur le site georezo.net

http://georezo.net/forum/viewtopic.php?id=75178

 

;; Exemple de Patrice sur Georezo.net avec Style ISOCP utilisant ISOCP.shx (Hauteur=ZERO : IMPERATIF)

 

*SENS_ISOCP, SENS_ISOCP --->--->--->---

A,5,[">",ISOCP,S=2,X=0,Y=-0.700],5

 

Ainsi avec ce type de ligne "SENS_ISOCP", tu VOIS le sens de tes Polylignes !

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Je cherche plutôt un lisp qui en dessine plusieurs le long de la polyligne

 

Salut,

 

Il y a cette solution qu pourrait te convenir.

Elle consiste à te créer un type de ligne dans ton fichier a.cad.lin ou acadiso.lin

Steven________________________________________

Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD.

Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD.

En rêve; AutoCAD sous Linux.

Lien vers le commentaire
Partager sur d’autres sites

Coucou

 

je te propose ça :

 

(defun c:senspoly (/ ent n pt pt0 pt1 ang dis)
 (vl-load-com)
 (setq dis (/ (getvar "viewsize") 20))
 (if
(and
 	(setq ent (car (entsel)))
 	(= "LWPOLYLINE" (cdr (assoc 0 (entget ent))))
)
	(repeat (setq n (fix (vlax-curve-getEndParam ent)))
(setq pt 	(trans (vlax-curve-getPointAtParam ent (- n 0.5)) 0 1)
        	pt0 (trans (vlax-curve-getPointAtParam ent n) 0 1)
    		pt1 (trans (vlax-curve-getPointAtParam ent (1- n)) 0 1)
   		ang (angle pt0 pt1)
       	n 	(1- n)
 	)
 	(grvecs (list 1 pt (polar pt (- ang (/ pi 6)) dis) 1 pt (polar pt (+ ang (/ pi 6)) dis)))))
 (princ)
)

 

Amicalement

Lien vers le commentaire
Partager sur d’autres sites

Salut Didier,

 

Nickel !

Je me le garde sous le coude ;)

Steven________________________________________

Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD.

Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD.

En rêve; AutoCAD sous Linux.

Lien vers le commentaire
Partager sur d’autres sites

Oups...

Je pensais avoir posté ma proposition juste après celle de Patrice 'le crabe'.

J'ai dû faire une fausse manip avant se sortir...

 

La 'commande LISP' SENS dessine ne flèche temporaire sur l'entité curviligne (tous types) au point cliqué. La flèche indique le sens de la courbe et s'efface au prochain zoom, panoramique, redess ou regen.

 

(defun c:SENS (/ isCurve drawArrow sel ent)
 (vl-load-com)

 ;; Evalue si l'entité est une courbe
 (defun isCurve (ent / elst)
   (setq elst (entget ent))
   (or
     (member
       (cdr (assoc 0 elst))
       '("ARC" "CIRCLE" "ELLIPSE" "LWPOLYLINE" "SPLINE" "RAY" "XLINE")
     )
     (and
       (= (cdr (assoc 0 elst)) "POLYLINE")
       (zerop (logand 112 (cdr (assoc 70 elst))))
     )
   )
 )

 ;; dessine une flèche temporaire
 (defun drawArrow (pt dir / size)
   (setq size (/ (getvar 'viewsize) 20.0) ; <- taille de la flèche
         ang  (angle '(0. 0. 0.) (trans dir 0 1 T))
   )
   (grvecs (list
             30 ; <- index de la couleur
             pt
             (polar pt (+ ang (* pi 0.85)) size)
             30 ; <- index de la couleur
             pt
             (polar pt (+ ang (* pi 1.15)) size)
           )
   )
 )

 (and
   (setq sel (entsel "\nSélectionnez une entité curviligne: "))
   (setq ent (car sel))
   (isCurve ent)
   (setq pt (vlax-curve-getClosestPointTo ent (trans (cadr sel) 1 0)))
   (drawArrow
     (trans pt 0 1)
     (vlax-curve-getFirstDeriv ent (vlax-curve-getParamAtPoint ent pt))
   )
 )
 (princ)
)

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

Lien vers le commentaire
Partager sur d’autres sites

Hello

 

SVP tu veux quoi exactement ?

 

Une fleche "virtuelle" comme propose par Gilles et Didier sur :

- TOUS les objets curvilignes visibles a l'ecran a un instant T

- TOUS les objets curvilignes visibles a l'ecran a un instant T

MAIS en plus avec une selection a l'ecran pour ne traiter que CES objets !

 

OU comme le suggère Didier :

Une flèche physique sur les objets curvilignes de la sélection ??

 

Merci, Bon Dimanche, Bye, lecrabe

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Coucou

Exigeant avec ça ! :)

Est-ce que c'est le cas aussi avec la solution proposée en réponse #6 ?

Ce sont des "flèches" dessinées en vecteurs dont la taille dépend de la hauteur de zoom,

Elles n'existent pas en tant qu'entités dans le dessin

Toi tu voudrais des flèches en tant qu'entités graphiques, c'est ça ?

Parce que sur CadXP il nous faut comprendre ce que veulent les gens, on est vachement gentils tut de même !

:rolleyes::rolleyes::rolleyes:

Je te rassure c'est possible mais ça se complique si tu veux que ce soit réactif avec une éventuelle inversion de la polyligne.

À mon tour de te questionner :

Comment connaître à l'avance la taille des flèches à dessiner ?

 

Amicalement

Lien vers le commentaire
Partager sur d’autres sites

Je plussoie.

 

Demande originale :

je suis à la recherche d'un lisp me permettant de dessiner des flèches temporaires indiquant le sens de la polyligne

Le LISP que didier a proposé dessine une flèche au milieu de chaque segment de la polyligne sélectionnée.

Celui que j'ai proposé dessine une flèche sur le point cliqué lors de la sélection de la courbe.

Dans les deux cas, les flèches sont bien "temporaires" et de taille proportionnelle au zoom courant. La demande de "flèche temporaire" laissait supposer que le LISP devait juste servir à une évaluation instantanée et temporaire du sens de la polyligne.

J'ai donc du mal à voir en quoi ces LISP ne répondent pas à la demande initiale, à part, peut-être, pour le LISP que j'ai proposé qui ne dessine qu'une seule flèche, mais cette flèche sera toujours instantanément visible puisqu'elle s'affiche sur le point cliqué à l'écran.

 

Si c'est "temporaire" qui n'a pas bien été compris (pour ne pas dire mal exprimé), la solution proposée par lecrabe ou celle, équivalente, de Steven/Olivier Eckmann est très probablement la piste à suivre (simple et sans LISP).

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

Lien vers le commentaire
Partager sur d’autres sites

En fait, dans mon programme on vient sélectionner un axe et on insère des blocs à partir de son origine selon un intervalle sauf que parfois le bloc doit s'insérer à l'autre extrémité d'où la nécessité d'inverser le sens de la polyligne, c'est pour ça que j'ai besoin de connaitre son sens.

Le problème d'avoir qu'une seule flèche c'est qu'on a tendance à zoomer sur l'axe pour le sélectionner (et ne pas cliquer sur un autre objet autocad) et du coup on ne voit plus la flèche d'où la nécessité d'avoir un lisp qui trace plusieurs flèches

Lien vers le commentaire
Partager sur d’autres sites

Le problème d'avoir qu'une seule flèche c'est qu'on a tendance à zoomer sur l'axe pour le sélectionner (et ne pas cliquer sur un autre objet autocad) et du coup on ne voit plus la flèche d'où la nécessité d'avoir un lisp qui trace plusieurs flèches

As-tu essayé le LISP que je propose ?

Tu peux zoomer/dé-zoomer tant que tu veux avant de sélectionner la polyligne, tu verras toujours une flèche de même taille par rapport à la fenêtre apparaitre sur le point cliqué lors de la sélection.

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

Lien vers le commentaire
Partager sur d’autres sites

Hello Gilles

 

Tu es "le meilleur" !

 

J'abandonne comme Didier !!

Les Vieux se fatiguent vite...

 

Bonne soirée, Bye, lecrabe

 

Non je ne suis pas "le meilleur".

Le LISP qu'a proposé didier est très proche de celui que j'ai proposé, c'est très probablement parce que la programmation ne supporte pas l'équivoque et qu'écrire une routine commence par analyser scrupuleusement l'objectif et les données initiales (ici le message du demandeurs).

Ce qui est lassant, c'est que souvent la réponse correspond à la demande telle que formulée mais ne convient pas au demandeur parce que sa demande est imprécise ou incomplète.

 

PS : je ne pense pas être beaucoup plus jeune que vous ;)

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

Lien vers le commentaire
Partager sur d’autres sites

Coucou

 

À Néophyte en explication de la réponse #13 :

Comme quoi je ne lâche pas si facilement même si de temps en temps j'en ai l'envie.

 

Je te cite : dans mon programme...

Puisque tu as un code en cours de travail, du moins c'est ce que je comprends, fais-le partager s'il te plaît, et peut-être qu'avec quelques explications sur son fonctionnement on pourra t'aider à te fabriquer la brique qui manque.

 

Amicalement

Lien vers le commentaire
Partager sur d’autres sites

Coucou

 

Je te salue ô Toi qui va finir en surimi !

Sache que je ne suis offensé en aucune manière,

Mon psychiatre ayant renoncé à traiter ma mégalomanie je fais souvent des rechutes

Et je sais que je rapport âge/qualité est en ma faveur.

Les autres (j'ai sept milliards de voisins)ne savent pas à quel point je suis fort, intelligent et gentil, et un peu con aussi

et ils m'obligent à crier par dessus les toits que je n'aime pas les gens (et ils me le rendent bien)

Tout ça pour dire qu'il va vraiment falloir que je reprenne contact avec les médecins des boyaux de la tête !

 

Amicalement

Lien vers le commentaire
Partager sur d’autres sites

salut à tous,

Je viens d'essayer la routine de didier et j'ai une erreur sur la version 2017:

 

erreur: no function definition: VLAX-CURVE-GETENDPARAM

 

Et comme mes connaissance en lisp sont plus que limitées...

 

 

 

Coucou

 

je te propose ça :

 

(defun c:senspoly (/ ent n pt pt0 pt1 ang dis)
 (vl-load-com)
 (setq dis (/ (getvar "viewsize") 20))
 (if
(and
 	(setq ent (car (entsel)))
 	(= "LWPOLYLINE" (cdr (assoc 0 (entget ent))))
)
	(repeat (setq n (fix (vlax-curve-getEndParam ent)))
(setq pt 	(trans (vlax-curve-getPointAtParam ent (- n 0.5)) 0 1)
        	pt0 (trans (vlax-curve-getPointAtParam ent n) 0 1)
    		pt1 (trans (vlax-curve-getPointAtParam ent (1- n)) 0 1)
   		ang (angle pt0 pt1)
       	n 	(1- n)
 	)
 	(grvecs (list 1 pt (polar pt (- ang (/ pi 6)) dis) 1 pt (polar pt (+ ang (/ pi 6)) dis)))))
 (princ)
)

 

Amicalement

Lien vers le commentaire
Partager sur d’autres sites

salut,

 

Es-tu sûr d'avoir bien recopier tout le code et qu'il ne manque pas un caractère?

Parce que lisp fonctionne correctement sur AutoCAD 2017.

Steven________________________________________

Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD.

Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD.

En rêve; AutoCAD sous Linux.

Lien vers le commentaire
Partager sur d’autres sites

Coucou

 

D'abord c'est UNE espace et pas UN espace mais c'est un détail de langue française

 

Pour ce qui est de la langue LISP je ne sais que dire n'ayant pas cette version et n'ayant donc pas testé je suis dans l'impossibilité de me prononcer.

Toutefois, si Steven dit que ça fonctionne, je le crois

Tu as bien copié le : (vl-load-com) ?

 

Amicalement

Lien vers le commentaire
Partager sur d’autres sites

salut didier...

 

humour on

 

voila ce que j'ai a moins d’être aveugle j'ai bien copier ton lisp... :)

 

Ah bah si tu commences à corriger mes fautes d'orthographe tu n'as pas fini... :)

 

humour off

 

(defun c:senspoly (/ ent n pt pt0 pt1 ang dis)
 (vl-load-com)
 (setq dis (/ (getvar "viewsize") 20))
 (if
       (and
       (setq ent (car (entsel)))
       (= "LWPOLYLINE" (cdr (assoc 0 (entget ent))))
       )
       (repeat (setq n (fix (vlax-curve-getEndParam ent)))
       (setq pt        (trans (vlax-curve-getPointAtParam ent (- n 0.5)) 0 1)
               pt0 (trans (vlax-curve-getPointAtParam ent n) 0 1)
               pt1 (trans (vlax-curve-getPointAtParam ent (1- n)) 0 1)
               ang (angle pt0 pt1)
               n       (1- n)
       )
       (grvecs (list 1 pt (polar pt (- ang (/ pi 6)) dis) 1 pt (polar pt (+ ang (/ pi 6)) dis)))))
 (princ)
)

Lien vers le commentaire
Partager sur d’autres sites

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é