VDH-Bruno
Membres-
Compteur de contenus
1 146 -
Inscription
-
Dernière visite
-
Jours gagnés
20
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par VDH-Bruno
-
[RÉSOLU] Compter (sélectionner ?) les blocs avec attributs identiques
VDH-Bruno a répondu à un(e) sujet de Autocadavre dans Débuter en LISP
Salut PatricK_35 Merci, c’est vrai que j’ai toujours tendance à tartiner un peu.. désolé.. :D Tu fais une extraction sur les 3 premiers tout simplement (ou les attribut que tu veux mais forcément tu n’auras pas l’extraction correspondant aux attributs manquants). Sinon comme j’avais précisé.. Bon ça reste du natif en commande AutoCAD, ce sera toujours moins optimisé qu’une bonne routine Lisp faite sur mesure en vla ou entmake, mais le tableau d’extraction sous AutoCAD est dynamique (je dis cela mais j’ai pas testé ta routine..) de plus cela doit pouvoir ce "macroter" donc un peu plus accessible pour un débutant, même si j'y vois pas un grand intérêt.. à part s'exercer et perdre un peu de souplesse dans le procédé. (ps: si j'ai 5mn en soiré ou d'en le WE j'essaierai de monter la macro) A+ Bruno -
[RÉSOLU] Compter (sélectionner ?) les blocs avec attributs identiques
VDH-Bruno a répondu à un(e) sujet de Autocadavre dans Débuter en LISP
Re, comme nos post ce sont croisés je développe un peu plus mon message précédent. Un exemple rapide de ce que tu peux obtenir en natif avec les commandes AutoCAD _EATTEXTpuis la commande _TABLEEXPORT pour enregistrer le tableau dans un fichier .csv avant ouverture sous Excel pour traitement ultérieur (note tu peux aussi exporter les données directement avec _EATTEXT et opter pour le tris de ton choix dans la présentation du résultat). Quantité Nom TYPE DESIGNATION 1 CANETTE Nestea 1 BOUTEILLE Vin rouge 1 l 1 BOUTEILLE Vin rouge 1 BOUTEILLE Vin rouge 75 cl 1 BOUTEILLE Vin blanc 33 cl 2 CANETTE 1664 2 BOUTEILLE Vin blanc 1 l 2 BOUTEILLE Vin blanc 75 cl 3 CANETTE Coca 33 cl 5 CANETTE Coca Avec des blocs définie comme suit : 1 Bloc : nom "BOUTEILLE" avec 2 attributs : 1 attribut "TYPE" & 1 attribut "DESIGNATION" (invisible) 1 Bloc : nom "CANETTE" avec 2 attributs : 1 attribut "TYPE" & 1 attribut "DESIGNATION" (invisible) A voir si cela te convient dans ce cas tu peux peut être essayé d’en faire une macro commande en Lisp à voir.. (depuis le lisp les commandes AutoCAD n’ont pas besoin d’être précédé du caractère "–" pour désactiver les boîte de dialogue) Oui regard la variable ATTMODE (Contrôle l'affichage des attributs)dans l'aide: si ATTMODE=2 Rend tous les attributs visibles si ATTMODE=1 Respecte les état de visibilité des attributs si ATTMODE=0 Rend tous les attributs invisibles A+ -
[RÉSOLU] Compter (sélectionner ?) les blocs avec attributs identiques
VDH-Bruno a répondu à un(e) sujet de Autocadavre dans Débuter en LISP
Bonjour, Egalement possible en natif sous AutoCAD avec l’extraction d’attributs (résultat sous forme de tableau), commande eattext, même si c’est le forum lisp je voulais en rappeler la possibilité. A+ -
[RÉSOLU] Comment créer un LISP qui remplace une Macro ?
VDH-Bruno a répondu à un(e) sujet de Autocadavre dans Débuter en LISP
Bonjour et bienvenu Autocadavre, Je crois pouvoir dire que c’est comme cela que l’on a tous plus ou moins débuté. Tout à fait d’accord avec toi, même si on ne peut présager de rien… Par exemple pour mon cas personnel, j’avais le même état d’esprit que toi en débutant le Lisp (du style on verra bien…), maintenant par simple jeu sur mon temps de loisir (temps restreint hélas..) j’en suis à essayer de comprendre la programmation par contrainte avec l’algorithme des 8 reines adaptés au listes chaînées.. Je crois que c’est l'idée qu’a voulu exprimer (gile)en disant: Accessoirement au cas où? Pour les raccourcis claviers concernant les commandes AutoCAD, tu as toujours la possibilité d’éditer le fichier acad.pgp (ou passer par la commande aliasedit du menu Express). A+ -
[Résolu] Point topographique covadis 2D->3D
VDH-Bruno a répondu à un(e) sujet de stugeol dans AutoCAD 2009
Bonjour stugeol, Tu verras ce n’est pas si compliqué à condition de ne pas chercher à brûler les étapes, l’apprentissage du LISP ce n’est pas une course de vitesse, le principal c’est d’y trouver son intérêt et de comprendre pour devenir autonome. Bon sinon histoire de ne pas laisser un problème (ou question) sans solutions avec le code que tu as posté.. En programmation ce que tu expose peut très bien s’écrire très simplement (sans test) de la façon suivante : Z = Alt - Z insertion (soit un déplacement relatif) Pour intégrer cela dans le code que tu as posté il suffit de substituer ces lignes : (vla-Move b (vlax-3d-point '(0 0 0)) (vlax-3d-point (list 0 0 alt)) ) Par (vla-Move b (vlax-3d-point (list 0 0 (caddr ins))) (vlax-3d-point (list 0 0 alt)) ) Pour personnaliser encore le code que tu as posté et l’adapter à ton cas tu peux également également substituer ces lignes de codes : (setq name (getstring T "\nEntrez le nom du bloc: ")) (setq tag (getstring "\nEntrez l'étiquette de l'attribut: ")) Par les suivantes pour un peu plus de convivialité à moindre coût (Car dans ton cas ce ne sont plus des inconnues mais des constantes): (setq name "TCPOINT") (setq tag "ALT") Le code définitif à tester.. (defun c:bloc-alt (/ ins att name tag) (vl-load-com) (and (setq name "TCPOINT") (setq tag "ALT") (ssget "_X" (list '(0 . "INSERT") (cons 2 name))) (vlax-for b (vla-get-ActiveSelectionSet (vla-get-ActiveDocument (vlax-get-acad-object)) ) (setq ins (vlax-get b 'InsertionPoint) att (vlax-invoke b 'getAttributes) ) (foreach a att (if (and (= (vla-get-TagString a) (strcase tag)) (numberp (setq alt (read (vla-get-TextString a)))) ) (vla-Move b (vlax-3d-point (list 0 0 (caddr ins))) (vlax-3d-point (list 0 0 alt)) ) ) ) ) ) (princ) ) A+ sur le forum LISP.. -
Avec 90 Kg je pense que tu as de la marge, pour t’en convaincre calcul la force nécessaire pour équilibrer ton système comme suggéré en réponse 11 Dans la théorie oui! Amuse toi à tracer le diagramme des contraintes, et dans ce cas tu verra comme l’avais justement dis lili2006 tes barres travaillent comme des tirants car tu ne bloque pas tes déplacements et c’est ce qu’il faut faire. A+
-
Salut, J’avoue avoir été un peu vite visiblement hier, je ne sais plus calculer une contrainte j’ai honte.., pour les 2 cas isostatiques (2&4) en vérifiant ce midi, avec une force de traction de 90daN j’obtiens une contrainte de traction supérieur à la contrainte de compression du au poid propre de l’élément. Visiblement non… pour les cas 1 & 3 en appliquant le principe des milieu continus tu seras également tendus (car la traction ajoute à la traction) dans l’hypothèse ou tes appuis intermédiaires sont des appuis simples ne bloquant pas les déplacements et les efforts de frottements négligeable. A+ (Ps : Je me dis tout de même que je devrais réviser ma RDM) ------------------------------------------------------------------------------------------ Cas 2 : Exemple en faisant abstraction de la contrainte de traction du au poids propre Hypothèses : Effort normal F(x)=90daN Section du profilé b=0.012m & h=0.012m Longueur du profilé l = 9.686m Poid propre du profilé pp=1,13 daN/m soit pp(x)= 1,13 (sin 79°) = 1.109 daN/m (normal à la section) soit pp(y)= 1,13 (cos 79°) = 0.215 daN/m (perpendiculaire à la section) Contrainte de compression sous l’effet du poids propre Sigma©= Mf . y / Ig Avec : Mf = p l²/8 Y = h/2 Ig =( b h^3)/12 On obtient : Sigma©= 0.088 MPa Contrainte de traction sous l’effet de F Sigma(t)= N / S Avec : N = F(x) S = b.h On obtient : Sigma(t)= 6.25 MPa En conclusion : Sigma(t) > Sigma© la barre est tendu donc pas de flèche..
-
Salut, Et en flexion sous poids propre , lili2006 si tu calcul la contrainte de compression du au poids propre (~20% du pp comme l’a précisé Tramber) tu te rendra compte qu’elle est toujours supérieur à la contrainte de traction du a l'effort normal(et ce pour tous les cas). En résumé la barre est tendu en partie inférieur et comprimé en partie supérieur. Ce qui donne raison à Tramber quant à la flèche pour ce qui est de la quantifier sans rentrer dans des calculs savants (étant donné les écarts entre les diagrammes), à la grosse je ferai le même raisonnement que Tramber .. Valeur de la Flèche maxi < Valeur de la flèche maxi sous poids propre (corrigé) Salutations (Ps: Effectivement Tramber il y aura banane ;) )
-
Salut, Un conseil, pour savoir si il y a flèche ou pas, plutôt que de raisonner sur les déformées, raisonnez sur les contraintes c’est plus facile.. ;) Il y a une relation directe entre la déformé et les contraintes, Tramber si tu fais disparaitre la contrainte de compression dans ton diagramme résultant, tu sais que tu n’auras pas de flèche.. Avec ce raisonnement tu peux même aisément déterminer la valeur exacte de traction à appliquer pour ne plus avoir de flèche dans ton système. A+
-
Bonjour (gile) J’ai revisité l’intégral de ce post (que j’affectionne beaucoup et qui m’a été d’un grand secours à mes débuts), dommage que les liens ne soient plus actif depuis la migration du site.. En espérant qu’ils puissent être réactivés un jour en attendant voici ceux que j’ai pu identifier : Équivalences à vl-* http://cadxp.com/index.php?/topic/8252-equivalences-a-vl/ Les LISP de gile http://cadxp.com/index.php?/topic/14427-les-lisp-de-gile/ (defun-q S::STARTUP ...) http://cadxp.com/index.php?/topic/23751-defun-q-sstartup/ Une fonction qui "apprend" cadxp.com http://cadxp.com/index.php?/topic/24489-une-fonction-qui-apprend/ Nota : A la relecture du sujet dans Les fonctions passées comme argument, j’aurais plutôt vu l’écriture de ssTo0 comme ceci : (defun c:ssTo0 () (ssmap '(lambda (x) (ChangeLayer x "0")) (ssget)) (princ) ) ;) Merci Bruno,
-
Bonsoir, wcmatch Compare une chaîne avec un modèle comportant des caractères génériques. (wcmatch chaîne modèle) La fonction wcmatch compare la chaîne avec le modèle pour voir s'ils correspondent. Dans ce cas, T est renvoyé ; sinon, nil est renvoyé. Les arguments chaîne et modèle peuvent être une chaîne entre guillemets ou une variable. Le modèle peut utiliser les caractères génériques indiqués dans le tableau ci-dessous. Seuls les 500 premiers caractères (environ) de la chaîne sont comparés au modèle (les suivants sont ignorés). Caractères génériques # (dièse) - Correspond à une valeur numérique unique. @ (at) - Correspond à un caractère alphabétique unique. . (point) - Correspond à un caractère non alphanumérique unique. * (astérisque) - Correspond à une séquence de caractères (chaîne vide incluse). Peut être placé n'importe où dans le modèle (début, milieu ou fin). ? (point d'interrogation)- Correspond à un caractère unique. ~ (tilde) - Placé en début de modèle, recherche tout sauf le modèle except [...] - Correspond à un des caractères spécifiés [~...] - Recherche un caractère unique (not spécifié). - (tiret) - Spécifie une fourchette pour un caractère unique (entre crochets). , (virgule) - Sépare deux modèles. ` (apostrophe inversée) - Désactive le mode de caractères spéciaux (lit le caractère suivant littéralement) (wcmatch "Name" "N*") ; renvoie T Vérifie que la chaîne Name commence par le caractère N. Vous pouvez utiliser des virgules dans un modèle pour entrer plusieurs conditions. Cet exemple exécute trois comparaisons: (wcmatch "Name" "???,~*m*,N*") ; renvoie T La fonction wcmatch renvoie T si l'une des trois conditions est remplie. Dans ce cas, les tests sont : Name a trois caractères (false) ; Name ne contient pas un m (false) et Name commence avec N (true). L'expression renvoie donc T, l'une de ces conditions étant remplie. Une distinction majuscules/minuscules est faite pour cette fonction. Les caractères majuscules et minuscules doivent donc correspondre. Il est possible d'utiliser des variables et des valeurs renvoyées par des fonctions AutoLISP dans les arguments chaîne et modèle. Pour tester un caractère générique dans une chaîne, vous devez entrer une apostrophe inversée (`) pour désactiver ce caractère. Dans ce cas, le caractère suivant l'apostrophe inversé n'est pas traité comme un caractère générique, mais comparé comme tout autre caractère. Par exemple, pour rechercher une virgule dans la chaîne Name, entrez: (wcmatch "Name" "*`,*") ; renvoie nil Remarque: D'autres caractères génériques devant être ajoutés dans les versions ultérieures d'AutoLISP, il est souhaitable de désactiver tous les caractères non alphanumériques afin d'assurer la compatibilité ascendante de la fonction. Les langages de programmation C et AutoLISP interprètent la barre oblique inverse (\) comme un caractère d'échappement. Vous devez donc entrer deux barres obliques inversées (\) pour en afficher une dans une chaîne. Pour rechercher une barre oblique inverse dans l'argument Nom, entrez: (wcmatch "Name" "*`\\*") ; renvoie nil Tous les caractères entre crochets ([ . . . ]) sont lus littéralement, il n'est donc pas nécessaire de les désactiver, sauf dans les cas suivants: Le caractère tilde (~) n'est lu littéralement que s'il n'est pas le premier caractère entre crochets (comme pour "[A~BC]") ; sinon, il est assimilé à un caractère de négation et implique que la fonction wcmatch recherche tous les caractères sauf ceux situés après le tilde (comme pour "[~ABC]"). Le tiret (-) n'est lu littéralement que s'il est le premier ou le dernier caractère entre crochets (comme pour"[-ABC]" ou "[ABC-]") ou lorsqu'il suit un tilde en début de crochet (comme pour "[~-ABC]"). Sinon, le tiret (-) est utilisé entre crochets pour spécifier une fourchette de valeurs pour un caractère spécifique. La fourchette ne s'applique qu'à des caractères uniques. Ainsi, "STR[1-38]" ne recherche que STR1, STR2, STR3 et "[A-Z]" uniquement des caractères alphabétiques en majuscules. Le crochet droit ("]") est également lu littéralement s'il est le premier caractère entre crochets ou s'il suit un tilde placé en début de crochet (comme pour "[ ]ABC]" ou "[~]ABC]"). (Extrait de l'aide AutoCAD R14) Si tu as besoin d'exemple concrèt hésite pas, pour le 64 bits, je ne sais pas je fonctionne toujours en 32. Cordialement Bruno
-
Re, Ca arrive, visiblement nos post ce sont croisés, quelque part ça me rassure car avec tes lignes de codes précédentes je n’y comprenais plus rien, désolé de n’avoir plus trop de temps pour regarder ton nouveau code, plus tard peut être… A+
-
[Résolu] Remise à zéro de la largeur des polylignes
VDH-Bruno a répondu à un(e) sujet de Karmelie dans Débuter en LISP
Bonsoir Karmelie, Ton lien ne fonctionne pas mais je pense que tu faisais référence à ce post : Fonctionne malgrès l\'erreur Non la fonction *error* à la particularité d’être systématiquement évalué en cas d’interruption de ta routine et elle est sensé reprendre les actions que ton programme n’a pu mener à terme.. (comme rétablir l’environnement initial et éventuellement annuler certaine actions de dessin). Comme bryce et en raison de ce qui est précisé précédemment, je ne vois pas trop l'intérêt de faire de UN_var une commande (avec C:) dans le cadre d’une gestion d’erreur. Par contre tu peux tout à fait créer un LISP pour paramétrer (ou sauvegarder) tes variables AutoCAD, et ainsi restituer rapidement ton environnement de travail sur ton poste de travail ou celui d’un de tes collègues mais là on ne parle plus de gestion d’erreur. En ce qui concerne ce thème j’ai un peu évolué depuis le post que tu cites surtout au niveau de la sauvegarde et la restitution des variables, bien que je me sois bien pris la tête sur la question voir ici. J’ai fini par me convertir à l’utilisation de la routine ai_sysvar (routine que (gile) m’a fait découvrir) définie dans acad20XXdoc.lsp (donc automatiquement chargée dans chaque document). Cordialement Bruno -
Bonjour, (command "_offset" (/ diam -2.0) der ) Pour compléter les propos des (gile), (/ diam -2.0) risque de retourner un nombre négatif, et donc une erreur, de plus il te manque un troisième argument qui est le côté du décalage.. Je t’invite à relire ma réponse que je t’avais ici sur ce sujet.. A+
-
Bonjour x_all, Tout d’abord je souhaite corriger l’affirmation suivante : Non la commande _extrude comme toutes les commandes AutoCAD accepte aussi bien un nom d’entité (ENAME), qu’un jeu de sélection (PICKSET). Pour me faire pardonner j’ai rapidement émulé (de façon simple) ta routine, qui consiste à passer d’une représentation d’un escalier 2D (vue en plan et représenté par des polylignes optimisées), en représentation 3D.. Au contraire la sélection par trajet va te simplifier la vie et te faire économiser des clics de souris, car les entités seront sélectionné dans l’ordre de ta sélection (ou l’ordre de parcours du trajet) contrairement à la sélection par capture ou fenêtre qui peut s’avérer un peu plus délicat à gérer. Le code que je donne est simple, c’est surtout l’occasion d’introduire l’utilisation des jeux de sélections et leurs manipulations avec ssget, ssadd, sslength, ssname. Contrairement à ta version, valide la sélection une fois que tu auras sélectionné (dans l’ordre soi par trajet ou pointage) toutes les entités à extruder. Le code à tester: (defun c:extud_inc (/ ss1 ss2 h hauteur) (cond ((setq ss2 (ssadd) ; Définit un jeu de sélection nul n 0 ; Initialise un compteur h (getreal "\nHauteur de marche: ") hauteur h ; Hauteur d'extrusion ss1 (ssget '((0 . "LWPOLYLINE"))) ; Sélection utilisateur ) (princ "Sélectionnez les objets par trajet (ou dans le sens de la montée...)") (repeat (sslength ss1) (command "_extrude" (ssname ss1 n) "" hauteur) (setq hauteur (+ hauteur h) n (1+ n) ss2 (ssadd (entlast) ss2); remplie le jeu de sélection ) ) (command "_union" ss2 "") ) ) (princ) ) J’ai volontairement respecté l’esprit de ta routine, mais en général pour un escalier on connait la hauteur d’étage, il semble donc plus évident de renseigner cette dernière et de laisser le soin au programme de calculer la hauteur de marche. J’ai plus trop de temps mais si j’ai une minute ce W.E. j’essaierai de répondre à tes interrogations sur les fonctions quote list et les paires pointées.. En ce qui me concerne, à peine une année plus loin… alors tu vois pas tant que cela… ;) Bonne continuation,
-
Bonjour, Rapidement pour te donner l’idée général.. Chercher les méthodes et propriétés avec Visual Lisp : Soit en tapant dans la Console Visual LISP _$ (vlax-get-acad-object) #<VLA-OBJECT IAcadApplication 00d098b4> Puis en utilisant la fenêtre Inspecter de la fenêtre espion pour me promener dans la nomenclature ActiveX. Ou alors à coup de à coups de (vlax-dump-object mon-objet T) Pour les entitées graphiques directement sur la ligne de commande AutoCAD avec l’instruction suivante : (while (princ (vlax-dump-object (vlax-Ename->Vla-Object (car (entsel))) T))) Et dans le cas d’une entité non graphique cas d’un layer par exemple, en tapant ceci dans Visual LISP : _$ (vlax-dump-object (vla-get-layers (vla-get-activedocument (vlax-get-acad-object))) T) ; IAcadLayers: L'ensemble de tous les calques du dessin ; Valeurs de propriétés: ; Application (RO) = #<VLA-OBJECT IAcadApplication 00d098b4> ; Count (RO) = 28 ; Document (RO) = #<VLA-OBJECT IAcadDocument 0204e2b8> ; Handle (RO) = "2" ; HasExtensionDictionary (RO) = -1 ; ObjectID (RO) = 2130365456 ; ObjectName (RO) = "AcDbLayerTable" ; OwnerID (RO) = 0 ; Méthodes prises en charge: ; Add (1) ; Delete () ; GenerateUsageData () ; GetExtensionDictionary () ; GetXData (3) ; Item (1) ; SetXData (2) T Là tu repère la méthode (ou propriété) qui t’intéresse (à te lire Add pour ajouter un calque à la table des calques), la tu fais la recherche dans l’aide AutoCAD pour les histoires d’aide voir éventuellement ces 2 discussions récentes sur le forum: http://cadxp.com/index.php?/topic/30956-connaitre-les-arguments-requis-par-une-methode/ http://cadxp.com/index.php?/topic/33207-resolufichier-daide/ Les Méthodes Une fois que tu penses avoir la bonne méthode il faut convertir la syntaxe VBA en syntaxe, lisp (rappels en lisp : une liste syntaxiquement correcte est une suite d’expressions dont la première expression est toujours une fonction et les expressions suivantes sont ses arguments). Dans le cas de la méthode VBA la syntaxe et la suivante : RetVal = object.Add(Name) En lisp cela donne (vla-add objet nom) ;retourne l’objet créer au format vla ex : #<VLA-OBJECT IAcadLayer 08d41034> Exemple pour ajouter le calque ToTo à la table des calques: ;; Obtenir un pointeur sur la table des calques (setq Tcalques (vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))) ;; Creer un calque ToTo (setq NouvCalque (vla-add Tcalques "ToTo")) Les propriétés Cela fonctionne comme les méthodes sauf que les fonctions manipulant les propriétés se construisent avec vla-get-propriété pour la lecture et vla-put-propriété pour l’écriture. Exemple pour lister toutes les propriétés existante du calque nouvellement créé : _$ (vlax-dump-object NouvCalque) ; IAcadLayer: Un groupe logique de données comparable à des feuilles transparentes superposables sur un dessin ; Valeurs de propriétés: ; Application (RO) = #<VLA-OBJECT IAcadApplication 00d098b4> ; Description = "" ; Document (RO) = #<VLA-OBJECT IAcadDocument 0204e2b8> ; Freeze = 0 ; Handle (RO) = "160CC7" ; HasExtensionDictionary (RO) = 0 ; LayerOn = -1 ; Linetype = "Continuous" ; Lineweight = -3 ; Lock = 0 ; Material = "Global" ; Name = "ToTo" ; ObjectID (RO) = 2130438648 ; ObjectName (RO) = "AcDbLayerTableRecord" ; OwnerID (RO) = 2130365456 ; PlotStyleName = "Color_7" ; Plottable = -1 ; TrueColor = #<VLA-OBJECT IAcadAcCmColor 08d430a0> ; Used (RO) = 0 ; ViewportDefault = 0 T Exemple pour obtenir sa couleur _$ (vla-get-color NouvCalque) 7 Exemple pour changer sa couleur en rouge (index couleur 1) _$ (vla-put-color NouvCalque 1) nil Obtenir le nom du calque _$ (vla-get-name NouvCalque) "ToTo" Modifier le nom du calque en TaTa _$ (vla-put-name NouvCalque "TaTa") nil Bonne continuation A+ (Ps: Tu verra une fois que l'on a compris l'idée c'est assez simple)
-
Re, En cliquant dans le vide, c'est ce que fait l'exemple que je donne... sauf que comme tu dois valider ta sélection si tu rate une polyligne tu ne sort pas forcément, d’ailleurs si tu es toujours sur de cliquer des polylignes je te conseil l’emploie d’un filtre de sélection dans l’utilisation de ssget du type (ssget '((0 . "LWPOLYLINE"))). Si tu veux utiliser un mot clef pour quitter regarde du coté des fonctions initget & entsel (attention à la valeur de retour d’entsel) car pour utiliser la commande _extrude tu as besoin d’un jeu de sélection. Pour l’emploie d’entsel avec while tu peux t’inspirer de ce qui est proposé dans ce sujet. A+
-
Bonsoir, En faisant ton test while sur la sélection (ou non séléction d’une entité), par exemple tu pourrais réécrire ton code de la façon suivante : (defun c:extud_inc (/ ss h hauteur) (setq h (getreal "\nHauteur de marche: ")) (setq hauteur h) (while (setq ss (ssget)) (command "_extrude" ss "" hauteur) (setq hauteur (+ hauteur h)) ) (princ) ) A mes yeux le principal serait de pouvoir faire la sélection par trajet ou capture de tous les éléments à extruder plutôt que de sélectionner les éléments un a un à chaque itération. Bonne continuation. A+
-
les commandes en anglais
VDH-Bruno a répondu à un(e) sujet de capde06 dans Pour aller plus loin en LISP
Salut Tramber Je vois que tu as avalé un clown , excellent, très drôle :D Hélas plus sérieusement j’étais encore loin des 99% ;) , t’inquiète pas même imparfait je publierai faut jusque je trouve le temps de me replonger dedans pour revoir le code (un minimum) histoire d’être pas trop honteux du résultat.. Comme je n’utilise presque plus la fonction command et que j’ai encore beaucoup de choses à assimiler, dur dur de se motiver sur un sujet dont je n’ai plus l’usage. Amicalement Bruno -
Lancement de fonction avec argument
VDH-Bruno a répondu à un(e) sujet de sechanbask dans Débuter en LISP
Salut, J’ai pas tout suivi la discussion, mais rapidement pour répondre à ton interrogation pour la commande _offset Tout d’abord l’erreur qui t’as été retourné est une erreur de type d’argument non valable, regardons rapidement les lignes de codes incriminé : (setq diam_pvc (getint "Diamiètre :")) (setq der (entget (entlast))) (command "_offset" (/ diam -2.0) der ) Rapidement diam n’est jamais renseigné (ou affecté d’une valeur) dans ton code, par contre diam_pvc oui ! (/ diam -2.0) avec cette ligne tu risques un nombre négatif, (ce qui n’est pas une valeur de décalage acceptable). Puis (entget (entlast)) retourne la liste des codes dxf de l’entité, et pas son nom d’entité.. Le mieux c’est de reprendre calmement le fonctionnement de la fonction décalé en la faisant tourner sous AutoCAD que voyons nous, en ligne de commande la fonction _offset (décaler) réclame 3 arguments : En 1 : Spécifiez la distance de décalage ou [Par/Effacer/Calque] <>: Une valeur strictement positive et nom nulle, je suppose pour ton cas: (/ diam_pvc 2.0) En 2 : Sélectionnez l'objet à décaler ou [Quitter/annUler] <Quitter>: L’objet (entité en Lisp) à décaler, dans ton cas si j’ai bien compris le dernier objet dessiné c.a.d. (entlast) En 3 : Spécifiez un point sur le côté à décaler ou [Quitter/Multiple/annUler] Un point pour la direction, soit spécifié à l’écran ou automatiquement de ce que j’ai compris un point en fonction du dernier cliqué, peut être : "@-1,0" Voilà pour résumer essaye de faire tourner les lignes de codes suivantes elle devrait t’aider.. ((lambda (/) (command "_line" (getpoint "premier point :") (getpoint (getvar 'lastpoint) "second point :") "" ) (command "_offset" (/ (setq diam_pvc (getint "Diamiètre :")) 2.0) (entlast) "@-1,0" ) ) ) A+ -
Salut, Pour compléter les réponses précédentes, je voulais juste rappeler la possibilité de spécifier au clavier l’accroche objet (pour un usage unique) avant de cliquer ton point. Astuce au cas ou tu ne connais pas tous les raccourcis claviers correspondants à tes accrochages, active tous les accroches objets dans la boite de dialogue correspondante puis saisie sur la ligne de commande : Voilà tout en sachant que AUC (ou _none) correspond à aucun A+
-
Classement alphanumérique des onglets de présentation
VDH-Bruno a répondu à un(e) sujet de rebcao dans AutoCAD 2012
Re, Pour compléter ta question La fonction de trie utilisé avec le comparateur < effectue un trie en fonction des codes ASCII, pour t’en convaincre tu peux regarder ces quelques expressions : _$ (vl-sort '("1" "0" "b" "B" "33" "3" "_") '<) ("0" "1" "3" "33" "B" "_" "b") _$ (mapcar 'ascii '("1" "0" "b" "B" "33" "3" "_")) (49 48 98 66 51 51 95) A+ -
Classement alphanumérique des onglets de présentation
VDH-Bruno a répondu à un(e) sujet de rebcao dans AutoCAD 2012
Bonjour rebcao, Sur ce coup la VISTA et SEVEN non rien avoir dans l’histoire, tout ce passe dans cette ligne de code : ;; trier la liste (setq layoutsName (vl-sort layoutsName '<)) Plus précisément au niveau de la fonction de comparaison utilisé <, exemple : _$ (vl-sort '("1" "0" "b" "B" "33" "3" "_") '<) ("0" "1" "3" "33" "B" "_" "b") Pour retrouver un trie plus conforme à tes attentes remplace la ligne précédente par celle-ci. (setq layoutsName (acad_strlsort layoutsName)) Exemple: _$ (acad_strlsort '("1" "0" "b" "B" "33" "3" "_")) ("_" "0" "1" "3" "33" "b" "B") A+ -
Re, Pour être vraiment complet sur le sujet, peut-être la version la plus concise et la plus élégante.. (avec absence de message d’erreur) ((lambda (cen) (while (vl-cmdf "_.circle" cen pause)) (princ)) (getpoint "\nCentre du cercle: ")) (Ps : Merci à Patrick_35 qui m’a inspiré avec son command pause) A+ Bruno
-
Salut jalna Bon tout à fait par hasard j’ai retrouvé le sujet auquel tu faisais allusion cercle multiple avec même centre... Il y a la version de (gile) (à ses débuts je pense..), Patrick-35 (astucieuse et simple), et une solution Diesel (pour les LTsiens) de rebcao.. Voilà je pense que le sujet est complet :D :D :D A+ Bruno
