drault Posté(e) le 24 mai 2021 Auteur Posté(e) le 24 mai 2021 @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.
Luna Posté(e) le 24 mai 2021 Posté(e) le 24 mai 2021 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
drault Posté(e) le 24 mai 2021 Auteur Posté(e) le 24 mai 2021 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.
bonuscad Posté(e) le 24 mai 2021 Posté(e) le 24 mai 2021 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
drault Posté(e) le 24 mai 2021 Auteur Posté(e) le 24 mai 2021 @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
didier Posté(e) le 24 mai 2021 Posté(e) le 24 mai 2021 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 Éternel débutant... Mon site perso : Programmer dans AutoCAD
drault Posté(e) le 24 mai 2021 Auteur Posté(e) le 24 mai 2021 @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.
didier Posté(e) le 25 mai 2021 Posté(e) le 25 mai 2021 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 Éternel débutant... Mon site perso : Programmer dans AutoCAD
Luna Posté(e) le 25 mai 2021 Posté(e) le 25 mai 2021 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
didier Posté(e) le 25 mai 2021 Posté(e) le 25 mai 2021 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 Éternel débutant... Mon site perso : Programmer dans AutoCAD
Luna Posté(e) le 25 mai 2021 Posté(e) le 25 mai 2021 Oki ! Pas de soucis :3 J'ai un peu tendance à répondre sans réfléchir parfois ^^' Bisous, Luna
drault Posté(e) le 29 mai 2021 Auteur Posté(e) le 29 mai 2021 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 🙂
Maxime10 Posté(e) le 3 décembre Posté(e) le 3 décembre 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
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant