Aller au contenu

LISP : cotation


Messages recommandés

Posté(e)

@didier,

 

Pas de soucis, j’explique peut-être pas assez bien.

 

10 minutes ago, didier said:

Il faut lancer une cotation sur des segments de polyligne ?

Oui

 

11 minutes ago, didier said:

Avec des cases de dialogue ?

oui, intégrant les options de chois l'annotativité (si possible) et la distance entre l'élément côté et ligne de côte, en plus de celle déjà montrée dans le screenshot.

 

Hésites pas à revenir sur mes propos pas suffisamment clairs, merci.

Posté(e)

Coucou,

Si j'ai bien compris la demande, il s'agirait d'un programme permettant la création automatique d'objets de cotation (prendre le style courant par défaut ?) tout du long d'une polyligne. La définition des données utilisateurs doit à priori se faire via une boîte de dialogue (DCL) ayant les mêmes questions que l'image ci dessus mais en y ajoutant 2 questions supplémentaires concernant l'annotativité de l'objet (comment sommes-nous gérer cette option ? Un oui/non ? La liste des échelles à prendre en compte ?) ainsi que la distance (perpendiculaire ?) de la ligne de cotation par rapport à l'objet polyligne.

Le but serais donc de coter une (plusieurs ?!) polyligne automatiquement en ayant quelques options concernant les cotations avant la création de ces dernières. Cependant j'ai encore quelques zones floues :
comment le programme doit-il gérer les segments courbes ? Faut-il les coter ou bien les ignorer ?
- je ne vois pas qu'est-ce que tu as besoin / à quoi tu t'attends concernant l'option d'annotativité ? Ne serait-ce pas plus simple de conserver la sélection de l'ensemble des cotations à la fin de la commande et que tu gères ce point directement via la palette des propriétés ? (car je suppose qu'il faut spécifier une liste d'échelle pour cette annotativité et pas une simple question oui/non...)
- La cotation angulaire 90° sur ton exemple doit-elle également être crée par le programme ou bien tu n'as besoin que des cotations linéaires ?

Bisous,
Luna

Posté(e)
1 hour ago, Luna said:

prendre le style courant par défaut ?

Oui. Ça ne me pose 0 soucis

1 hour ago, Luna said:

comment sommes-nous gérer cette option ? Un oui/non ?

Une case à cocher comme dans les autres critères ou un oui/non. Le plus simple ?

 

1 hour ago, Luna said:

La liste des échelles à prendre en compte ?)

Est-elle connectable à la liste des échelle dans des fenêtres de présentations dans l'espace en question ?

Si non, je serais intéressé de connaître les lignes de codes à faire évoluer, car sinon la liste peut-être longue (1:10/1:20/1:50/1:100/1:200 voir 1/500 et 1:1000).

Est-ce que l'unité du dessin peut-elle jouer ? car selon les personnes, je suis amené à dessiner en mm / cm ou m !

1 hour ago, Luna said:

perpendiculaire ?

oui, une côte alignée de préférence.

 

1 hour ago, Luna said:

plusieurs ?!

Plusieurs, après un contour définissant une polyligne, j'aimerais coter chaque segment.

 

1 hour ago, Luna said:

les segments courbes ?

Les coter serait mieux mais si pas possible ou trop compliquer, le code peut les ignorer.

1 hour ago, Luna said:

l'option d'annotativité ?

Le moins chiant à configurer je dirais.

Pour revenir au besoin, le moins d'objet j'ai dans mon dessin, le mieux je me porte. Même réflexion pour les calques. Du coup, je m'étais dit que de faire un calque avec mes côtes annotatives serait le plus simple.

Après, je peux gérer cela dans la palette propriété ou créer un style pour chaque échelle, une fois que les côtes sont faites.

1 hour ago, Luna said:

tu n'as besoin que des cotations linéaires ?

Oui

 

Dans l'espoir d'avoir répondu le plus clairement possible.

Posté(e)

Des côtes linéaires: longueur d'arc ou de segment droits de (n) LWPOLYLINE séléctionnées (polylignes légères)

(vl-load-com)
(defun c:Dim_PolyArc ( / js AcDoc n ename obj pr pt_sel seg_bulge deriv alpha pt_dim)
  (princ "\nSélectionner une polyligne.")
  (while (null (setq js (ssget '((0 . "LWPOLYLINE")))))
    (princ "\nPas de LWPolyLines sélectionnées!")
  )
  (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)))
  (vla-StartUndoMark AcDoc)
  (repeat (setq n (sslength js))
    (setq
      ename (ssname js (setq n (1- n)))
      obj (vlax-ename->vla-object ename)
      pr -0.5
    )
    (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))
        deriv (vlax-curve-getFirstDeriv obj pr)
        alpha (- (atan (cadr deriv) (car deriv)) (* pi 0.5))
        pt_dim (polar pt_sel alpha (* 2.0 (getvar "DIMTXT")))
      )
      (if (not (zerop seg_bulge))
        (command "_.dimarc" "_none" (trans pt_sel 0 1) "_none" (trans pt_dim 0 1))
        (command "_.dimaligned"
          "_none" (trans (vlax-curve-GetPointAtParam obj (- pr 0.5)) 0 1)
          "_none" (trans (vlax-curve-GetPointAtParam obj (+ pr 0.5)) 0 1)
          "_none" (trans pt_dim 0 1)
        )
      )
    )
  )
  (vla-EndUndoMark AcDoc)
  (prin1)
)

 

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

Posté(e)

@bonuscad,

 

LSP rapide mais je n'arrive pas à régler la distance côte à élément côté, tout du moins, je ne vois pas la ligne de code qui s'en charge.

J'en reviens à mon échange avec LUNA qui permettrait une meilleur config même si plus lent dans la config, j'imagine.

Merci de ton apport

Posté(e)

Bonjour @drault

Beaucoup de questions... ce n'est pas le fonctionnement normal du forum

Une réponse rapide, car en lisant le travail de @bonuscadje dirais que le point d'insertion de la ligne de cotation est à deux fois la hauteur de texte par défaut du milieu du segment de polyligne.

J'aimerais bien voir la même chose faite "à la main" pour se rendre vraiment compte de l'ampleur du travail à réaliser

Amicalement

Posté(e)

@didier,

Effectivement, peut-être trop de gourmandises....

@bonuscad

Quelle variable choisie de mettre à "l'extérieur" de la polyligne les côtes ?

J'aimerais les mettre à l'intérieur.

De plus, j'ai remarque qu'au-delà d'un certains nombre de polyligne le lisp n'arrivait pas à afficher les côtes.

Posté(e)

Bonjour @drault

"J'aimerais les mettre à l'intérieur."  Elles sont déjà positionnées à l'intérieur par défaut.
Par ailleurs j'ai testé avec des dizaines de polylignes sélectionnées et je n'ai pas constaté de souci.

Que faut-il faire ? un LSP qui marche ou te conseiller pour apprendre ?

Ne perds pas de vue que pour apprendre il faut TOUJOURS partir de quelque chose de simple.
Dans ce cas de figure, Bonuscad a un tel niveau de connaissance qu'il ne t'a pas fait du "simple", il a répondu à la demande.
Donc travailler dans ce code pour un débutant peut être vite rébarbatif pour lui...

Amicalement

Posté(e)

Coucou,

18 hours ago, drault said:

LSP rapide mais je n'arrive pas à régler la distance côte à élément côté, tout du moins, je ne vois pas la ligne de code qui s'en charge.

Si tu veux modifier la distance entre tes cotations et ta polyligne, il s'agit de cette ligne :
 

pt_dim (polar pt_sel alpha (* 2.0 (getvar "DIMTXT")))

La distance est ici définie à 2 fois la hauteur du texte de cotation (correspondant à la variable système "DIMTXT").
Si jamais tu désires modifier cette valeur, plusieurs solutions s'offrent à toi en fonction de tes compétences en AutoLISP :
- Modifier la valeur manuellement en ligne de code (pas la meilleure solution mais reste fonctionnelle)

 

;; Remplacer donc (* 2.0 (getvar "DIMTXT")) par n'importe qu'elle valeur numérique souhaitée


- Définir cette valeur en début de programme via une variable et la modifier dans l'IDE
 

(defun c:Dim_PolyArc (... htxt) ;; Ajout de la variable htxt dans la liste de déclaration des variables locales
	(setq htxt (* 2.0 (getvar "DIMTXT"))) ;; Ajout de la ligne de définition de la distance cotation/polyligne en début de programme
	... ;; Le reste du programme reste inchangé
	pt_dim (polar pt_sel alpha htxt) ;; Modification de la ligne concernant la définition du point d'insertion de la cotation
)

- Définir cette variable par le biais d'une question utilisateur (similaire à la solution ci-dessus)
 

(defun c:Dim_PolyArc (... htxt) ;; Ajout de la variable htxt dans la liste de déclaration des variables locales
	(if (null (setq htxt (getreal (strcat "\nDistance entre la polyligne et la ligne de cotation <" (* 2.0 (getvar "DIMTXT")) "> : "))) ;; Ajout d'une question utilisateur avec la valeur de BonusCAD par défaut
		(setq htxt (* 2.0 (getvar "DIMTXT"))) ;; Affectation de la valeur par défaut si aucune saisie utilisateur
	) ;; Ajout de la ligne de définition de la distance cotation/polyligne en début de programme
	... ;; Le reste du programme reste inchangé
	pt_dim (polar pt_sel alpha htxt) ;; Modification de la ligne concernant la définition du point d'insertion de la cotation
)

 

17 hours ago, drault said:

Quelle variable choisie de mettre à "l'extérieur" de la polyligne les côtes ?

Encore une fois, tout se passe dans la définition du point d'insertion de la cotation (nommé 'pt_dim') et il s'agit de l'angle 'alpha' qui permet de définir cette insertion.
 

alpha (- (atan (cadr deriv) (car deriv)) (* pi 0.5))
;; Dans le sens de lecture de la polyligne, la cotation sera placée ici à droite de cette dernière (tout dépends du sens de création de la polyligne !)
;; Il est possible de la placer à gauche en spécifiant non pas (* pi 0.5) mais (* pi -0.5), afin d'ajouter un quart de tour à l'angle du segment

Si je ne dit pas de bêtises, cela devrait pouvoir fonctionner au besoin. Il est également possible d'inverser une polyligne par un clic droit > Polyligne > Inverser :3
J'espère avoir répondu à toutes tes questions @drault !
Et merci à BonusCAD !! ♥

Bisous,
Luna

Posté(e)

Bonjour @Luna

Je n'ai pas réussi à détecter la volonté d'apprentissage de @drault

Et du coup, je n'ai pas osé me lancer dans des explications dans le vide.
De plus en plus de gens demandent des "commandes" adaptées à leur besoin sans vouloir franchir le pas de l'apprentissage.
Je le conçois sans vraiment le comprendre.
Je me suis permis de lui écrire en privé pour qu'on fasse le point des attentes en évitant des rebonds de questions.
(deux pages de messages et presque un an pour écrire des cotes sur une polyligne !)

Amicalement

Posté(e)

Bonsoir,

@didier, je trouve que quand Luna me pointe les commandes utiles pour faire évoluer le LISP, j'apprends.

Après, oui, je la rejoins dans le fait que pour certains ajouts, je suis à 100.000 de comprendre, car pas du tout encore dans ce langage.
D'ailleurs, j'avais demandé à une personne si elle avait des conseils mais peu de retour sur la question. J'avoue ne pas encore avoir pris le temps par manque de temps et par "urgence" qui nous tombe dessus, j'essaie d'aller au plus simple.

Après j'aimerais creuser plus cette question une fois les moments de "crises" passés.

@Luna,

On 25/05/2021 at 14:02, Luna said:

une polyligne par un clic droit > Polyligne > Inverser

Je ne connaissais pas, merci, mais dans mon cas la polyligne ne doit pas bouger, c'était la côte. Intéressant pour un type de ligne particulier. 🙂

Maintenant je connais et comprend l'influence de DIMTXT et PT_DIM, merci 🙂

  • 3 ans après...
Posté(e)

Bonjour à toutes et tous,

 

Je me permet de faire suite à ce sujet et de rebondir sur un des souhaits qui était celui de pouvoir choisir si la cotation générée apparaît à "l'intérieur" ou à l'"extérieur" de la pièce. Utilisant la commande LW_DIM j'ai bien compris le fait d'inverser le sens de la polyligne afin d'obtenir le résultat souhaité et cela fonctionne.

Aussi, en l'utilisant, je me suis rendu compte que machinalement, après la sélection de la polyligne à coter, je positionnais mon curseur à l'"intérieur" de la pièce avec pour souhait qu'elle s'affiche de ce côté de la polyligne.

J'en viens donc à ma question, est-il possible d'inverser (ou non) le sens de la polyligne en fonction de la position du curseur de la souris par rapport à la-dite polyligne au moment de la validation de la commande (utilisant le cycle de sélection j'effectue un coup de molette arrière pour valider certaines commandes, si ça peut aider ?).

 

Merci par avance pour vos retours.

 

Maxime

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é