Aller au contenu

VDH-Bruno

Membres
  • Compteur de contenus

    1 146
  • Inscription

  • Dernière visite

  • Jours gagnés

    20

Tout ce qui a été posté par VDH-Bruno

  1. Bonjour, La hachure semblant être un motif plein, dans ce cas tu peux essayer à "l’ancienne" quand ce type de motif n’existait pas, très souvent on utilisait la commande SOLIDE d’AutoCAD (ou éventuellement une polyligne avec épaisseur), ces entités devraient supporter le paramètre d’étirement. A+
  2. Bonjour Olivier, C’est un classique de la programmation avec la fonction command, dans ce cas la commande réclame de façon "implicite" une sélection d’objet par point, lorsque l’on utilise la fonction command avec le symbole pause, la saisie est toujours au format voulu et l’on passe souvent à côté de cette subtilité que l’on découvre avec certaines commandes AutoCAD lorsque l’on passe des paramètres par variable. Dans l’aide, regarde la section suivante : http://docs.autodesk.com/ACD/2011/ENU/filesALG/WS73099cc142f4875516d84be10ebc87a53f-79f5.htm C'est mentionné au sujet des commandes TRIM, EXTEND, et FILLET, c’est le même principe que pour le scu objet A+
  3. VDH-Bruno

    Bitmap pour DCL

    Patrick_35, merci beaucoup pour ce partage et le lien, sujet intéressant même si je suis un peu dans l’obligation de mettre cela de côté pour un peu plus tard.. A+
  4. VDH-Bruno

    C'est calme

    En ce qui me concerne la prévision est correcte (Oise), il neige sans interruption depuis cette nuit, condition de circulation difficile avec formation de congère par endroit.. A+
  5. Bonjour, C’est la partie la plus gratifiante et stimulante du Lisp Sinon, pour l’exemple un code similaire, déjà publié ici http://cadxp.com/index.php?/topic/33946-incrementer-le-nom-de-variable/ ;; Renvoie une liste de symbol (chaques symbols contenant les coordonnées du point cliqué) (defun point-xxx (i pt) (if pt (cons ((lambda (sym) (set sym pt) sym) (read (strcat "point" (itoa i))))(point-xxx (1+ i) (getpoint))) ) ) Pour tester (tapez entrée pour sortir de la function) _$ (setq lstpoint (point-xxx 1 (getpoint))) (POINT1 POINT2 POINT3 POINT4) _$ (mapcar 'eval lstpoint) ((8991.05 5763.28 0.0) (5813.38 8762.64 0.0) (13298.5 7457.04 0.0) (11180.1 5586.84 0.0)) _$ A+ (Ps : Sympa les liens de Patrick_35, ma préférence allant naturellement vers le 4ème :D )
  6. Merci c’est gentil, effectivement un dessin vaut mieux qu’un long discours.. C’est intéressant d’avoir un aperçu de ce que vous cherchez à faire dans vos métiers respectifs. A+
  7. Ok, je ne connaissais pas le terme, je te remercie. A+
  8. Bonjour à tous, Juste pour ma culture personnel (n’étant pas du tout de la partie), qu’appelez-vous un buffer ou une zone tampon, à quoi cela sert-il ou plutôt que cherche t’on a obtenir.. Voilà si une bonne âme voulait bien m’éclairer, je lui en serais gré, merci. Cordialement,
  9. Non pas forcément, du moment que tu ne sors n’y d’AutoCAD et n’y du document actif, je n’ai pas en tête d’exemple de codes Vlisp qui ne puissent être codé en AutoLISP classique. Les méthodes et propriétés Visual Lisp peuvent être vu comme des bibliothèques de fonctions prédéfinies qui permettent comme dans ce cas un code plus directe… Pour l’exemple un équivalent LISP un peu moins partisan que le cheminement proposé précédemment ;) : (defun c:drwHatch (/ blk e lsthatch lstent dxf) (while (setq blk (tblnext "BLOCK" (null blk))) (if (wcmatch (setq blk (cdr (assoc 2 blk))) "~'**") (progn (setq blk (entget (tblobjname "BLOCK" blk)) e (cdr (assoc -2 blk)) lsthatch nil lstent nil ) (while e (if (= "HATCH" (cdr (assoc 0 (setq dxf (entget e))))) (setq lsthatch (cons dxf lsthatch)) (setq lstent (cons dxf lstent)) ) (setq e (entnext e)) ) (and lsthatch (entmake blk) (mapcar 'entmake (append (reverse lsthatch) (reverse lstent))) (entmake '((0 . "ENDBLK"))) ) ) ) ) (princ) ) A+
  10. Bah ! Comme quoi a un problème donné, il y a plusieurs niveau de lecture, personnellement j’avais plus en tête un fichier mnl pour le chargement des lisp associés au menu. alala Sinon pour ton questionnement sur les affectations et nom de symbole, si ça peut aider un lien dans lequel, j’essayai de démontrer qu’il n’y avait pas de différence dans les mécanismes d’affectations entre setq et defun (ou defun-q) . http://cadxp.com/index.php?/topic/31173-programmer-sans-defun/ A+
  11. Re, Prenons un exemple concret définissons mon appli comme suit : (defun c:MonAppli () (alert "Bonjour..")) Lorsque cette fonction est chargé, j’affecte au nom de symbole c:MonAppli une définition de fonction au moyen de defun, comme on le ferait avec setq pour une variable . Donc (not c:MonAppli) évalue si le symbole est affecté d’une valeur comme tu le ferai pour une variable et (c:MonAppli) lance la fonction. Avant chargement de la fonction vaut nil _$ c:MonAppli nil Après chargement l’évaluation de son symbole est : _$ c:MonAppli #<USUBR @0f75a564 C:MONAPPLI> A+
  12. Oui bien vu la correction, mais la tu charges systématiquement la fonction en mémoire même si elle n’est jamais lancé.. Si on voulait faire sans autoload, il faudrait (comme pour ce dernier qui le fait de manière générique) écrire le chargement de la fonction dans sa définition… Comme ceci par exemple : (defun c:MonAppli () (princ "\nInitialisation...") (cond ((eq "" (load "MonAppli" "")) (princ "\nAbandon: Echec au chargement de la fonction MonAppli!!!") (princ) ) ((c:MonAppli)) ) ) A+
  13. Bonjour, Pour compléter la réponse de vincentp010 qui a été le plus rapide ;) Le code lisp de la fonction autoload, tel qu’elle est définit dans le fichier acadxxxdoc.lsp dans le répertoire support d’AutoCAD (si cela n’a pas changé depuis la version 2007). Extrait du fichier acadxxxdoc.lsp: (defun ai_ffile (app) (or (findfile (strcat app ".lsp")) (findfile (strcat app ".exp")) (findfile (strcat app ".exe")) (findfile (strcat app ".arx")) (findfile app) ) ) (defun ai_nofile (filename) (princ (strcat "\nLe fichier" filename "(.lsp/.exe/.arx) n'a pas été trouvé dans les dossiers du chemin de recherche." ) ) (princ "\nVérifiez l'installation des fichiers de support et réessayez.") (princ) ) (defun _autoload (app) ; (princ "Auto:(load ") (princ app) (princ ")") (terpri) (load app) ) (defun _autoqload (quoi app cmdliste / qapp symnam) (setq qapp (strcat "\"" app "\"")) (setq initstring "\nInitialisation...") (mapcar '(lambda (cmd / nom_cmd) (progn (setq nom_cmd (strcat "C:" cmd)) (if (not (eval (read nom_cmd))) (eval (read (strcat "(defun " nom_cmd "( / rtn)" "(setq m:err *error* *error* *merrmsg*)" "(if (ai_ffile " qapp ")" "(progn (princ initstring)" "(_auto" quoi "load " qapp ") (setq rtn (" nom_cmd ")))" "(ai_nofile " qapp "))" "(setq *error* m:err m:err nil)" "rtn)" )))))) cmdliste) nil ) (defun autoload (app cmdliste) (_autoqload "" app cmdliste) ) A+ (Ps: Edit ajouté fonction _autoload)
  14. VDH-Bruno

    Visual LISP, qu'es aquò ?

    Re, Sinon pour ce qui est du changement de calque et pour mémoire l'équivalent Lisp serait: (entmod (subst (cons 8 "POUBELLE") (assoc 8 (setq ent (entget (car (entsel))))) ent)) A ne pas "ringardiser" trop vite, car comme pour entmake, entmode crée le calque de destination, si il n'est pas présent dans le dessin. A+ Bruno
  15. VDH-Bruno

    Visual LISP, qu'es aquò ?

    Bonjour Christian, Pour l'exemple 3 syntaxes possible: (vla-put-Layer (vlax-ename->vla-object (car (entsel))) "POUBELLE") (vlax-put (vlax-ename->vla-object (car (entsel))) 'Layer "POUBELLE") (vlax-put-property (vlax-ename->vla-object (car (entsel))) 'Layer "POUBELLE") Un lien pertinant au sujet des syntaxes vlisp https://cadxp.com/topic/34040-syntaxe-visual-lisp-vla-vlax/ A+ Bruno
  16. Bonsoir, J’espère que Patrick_35 ne m’en voudrat pas si je réponds à sa place, en fait si on veut être puriste ce n’est pas les hachures qui passe en arrière plan, mais plutôt les autres objets qui passent en avant plan en modifiant leurs ordres de création dans la base de données du dessin . En fait le (vla-copy ent) + (vla-delete ent), recrée toutes les entités dans les définitions de bloc qui ne sont pas des hachures en effaçant leurs définitions d’origine…Ce qui les rendent postérieurs aux hachures et les positionnes en avant plan. Sur le même principe, il suffit dans le code de remplacer l’expression : (eq (vla-get-objectname ent) "AcDbHatch") par: (eq (vla-get-objectname ent) "AcDbWipeout") Et cela devrait fonctionner.. (defun c:drw-AcDbWipeout () (vlax-for blo (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) (and (eq (vla-get-islayout blo) :vlax-false) (vlax-for ent blo (or (eq (vla-get-objectname ent) "AcDbWipeout") (progn (vla-copy ent) (vla-delete ent)) ) ) ) ) (princ) ) A+ EDIT: Visiblement j'ai fait de l'écho à (gile)...
  17. Bonsoir, Quelques lignes de codes à voir si ça peut te convenir, en partant du principe qu'avant de lancer le lisp, tu as inséré une référence de bloc au point où tu souhaites démarrer la division de ta polyligne .. ;; Insérer plusieurs Références d'un Bloc le long d'une pline et Incrémenter son attribut (defun c:IRB (/ blk pline dist ecart long) (vl-load-com) (or *increment* (setq *increment* 1)) (or *mode* (setq *mode* "Diviser")) (while (not (and (setq pline (car (entsel "\nSélectionnez la polyligne à mesurer/diviser: ")) ) (= "AcDbPolyline" (vla-get-ObjectName (setq pline (vlax-ename->vla-object pline))) ) (setq long (vlax-curve-getDistAtParam pline (vlax-curve-getEndParam pline)) ) ) ) ) (while (not (and (setq blk (car (entsel "\nPointez la référence de bloc à incrémenter: "))) (= "AcDbBlockReference" (vla-get-ObjectName (setq blk (vlax-ename->vla-object blk))) ) ) ) ) (cond ((setq dist (vlax-curve-getDistAtPoint pline (vlax-get blk 'InsertionPoint))) (setq *increment* (cond ((getint (strcat "\nValeur de l'incrément <" (itoa *increment*) ">: ") ) ) (*increment*) ) ) (setq loop T) (while loop (setq ecart (cond ((= "Diviser" *mode*) (initget (+ 1 2) "Mesurer") (getint "\nDIVISER -> Entrez le nombre de segments ou [Mesurer]: ") ) ((= "Mesurer" *mode*) (initget (+ 1 2) "Diviser") (getdist "\nMESURER -> Spécifiez la longueur du segment ou [Diviser]: " ) ) ) ) (setq loop (cond ((= (type ecart) 'STR) (setq *mode* ecart)) ((= (type ecart) 'INT) (setq ecart (/ (- long dist) ecart)) nil) ) ) ) (while (< dist (- long ecart)) (vla-Move (setq blk (vla-Copy blk)) (vla-get-InsertionPoint blk) (vlax-3D-point (vlax-curve-getPointAtDist pline (setq dist (+ dist ecart))) ) ) (cond ((setq att (car (vlax-invoke blk 'GetAttributes))) (vla-put-TextString att (itoa (+ (atoi (vla-get-TextString att)) *increment*)) ) ) ) ) ) ((alert "Le point d'insertion de la référence de bloc ne ce trouve pas sur la polyligne!" ) ) ) (princ) ) A+
  18. VDH-Bruno

    Cotation

    Salut, Je viens réessayer pas de problème chez moi, peut être un problème de copier-coller, ou plus surement un souci avec l’éditeur de texte utilisé car les \\PAR ajouté en saut de ligne ne font pas partie du code que j’ai posté… Re-teste avec le Bloc-notes sinon avec le fichier en pièce jointe, pour rappel je n’ai toujours pas géré le cas des sur les cotes radiales et angulaires… Donc à n’utiliser que pour de la cotation linéaire ! dimexposant.LSP A+
  19. VDH-Bruno

    1 cercles en 2arcs

    Cela devrait répondre à ta demande à voir… Si tu ne veux pas des données étendues, remplace cette ligne : (setq cercle (entget (ssname ss (setq i (1- i))) '("*"))) Par cette dernière: (setq cercle (entget (ssname ss (setq i (1- i))))) Le code: ;; Scinde une sélection de cercles en 2 arcs (Nord-Sud SCO) VDH-Bruno ;; Adaptation du code de BonusCAD (defun c:MC2A (/ ss js i rep cercle ) (and (setq ss (cond ((ssget "_I" '((0 . "CIRCLE")))) (T (prompt "\nSélectionnez les cercles à scinder en 2 arcs... ") (ssget '((0 . "CIRCLE")))) ) ) (setq rep (progn (initget "Oui Non") (not (= (getkword "\nConservez les cercles d'origine ? [Oui/Non] <N>: ") "Oui")) ) ) ) (setq js (ssadd)) (repeat (setq i (if ss (sslength ss) 0)) (setq cercle (entget (ssname ss (setq i (1- i))) '("*"))) (entmake (append (subst '(0 . "ARC") '(0 . "CIRCLE") cercle) (list '(100 . "AcDbArc") (cons 50 0.0) (cons 51 pi)) ) ) (ssadd (entlast) js) (entmake (append (subst '(0 . "ARC") '(0 . "CIRCLE") cercle) (list '(100 . "AcDbArc") (cons 50 pi) (cons 51 (* 2.0 pi))) ) ) (ssadd (entlast) js) (if rep (entdel (cdr (assoc -1 cercle)))) ) (sssetfirst nil js) (princ) ) (Ps : J’espère que BonusCAD m’en voudra pas trop de répondre à sa place) Amicalement Bruno (Edit : Ajouté mise en surbrillance des entités nouvellement créer)
  20. VDH-Bruno

    1 cercles en 2arcs

    Salut, Une version plus abouti qui fonctionne en 3D quelques soit le repère, et préserve les éventuelles données étendues (les copies sur chaque arcs). Ce qui n’est pas sécurisé c’est si les points cliqués appartiennent bien au cercle, et s’ils sont bien distincts. Commande SC2A pour tester.. Cordialement Bruno, ;; Scinder un Cercle en 2 Arcs VDH-Bruno (defun c:SC2A (/ ename cercle arc p1 p2) (while (not (and (setq ename (car (entsel "\nSélectionnez le cercle à scinder en 2 arcs: "))) (= "CIRCLE" (cdr (assoc 0 (entget ename)))) ) ) (if ename (princ "\nL'objet sélectionné n'est pas un cercle!") ) ) (and (setq arc (entmake (append (subst '(0 . "ARC") (assoc 0 (setq cercle (entget ename '("*")))) cercle) (list '(100 . "AcDbArc") (cons 50 (angle (cdr (assoc 10 cercle)) (progn (initget 1) (trans (setq p1 (getpoint "\nSpécifiez le premier point de coupure: ")) 1 ename)) ) ) (cons 51 (angle (cdr (assoc 10 cercle)) (progn (initget 1) (trans (getpoint p1 "\nSpécifiez le second point de coupure: ") 1 ename)) ) ) ) ) ) ) (entmake (subst (cons 51 (cdr (setq p1 (assoc 50 arc)))) (setq p2 (assoc 51 arc)) (subst (cons 50 (cdr p2)) p1 arc) ) ) (progn (initget "Oui Non") (if (not (= (getkword "\nConservez le cercle d'origine ? [Oui/Non] <N>: ") "Oui")) (entdel ename) ) ) ) (princ) )
  21. VDH-Bruno

    1 cercles en 2arcs

    Bonsoir ludo07, Merci du retour, effectivement la fonction _break est un peu capricieuse dans C2A, je verrais ce qu’il est possible de faire… A+
  22. VDH-Bruno

    Cotation

    Salut, Si tu ne veux pas passer par le lisp, regarde alors dans l’éditeur de texte multiligne avec la fonction d’empilement ce sera plus simple, j’avais essayé de donner un exemple avec le chiffre 3 en exposant, pour symboliser le cube dans ce post. http://cadxp.com/index.php?/topic/36371-code-ascii/page__view__findpost__p__197999 A+
  23. VDH-Bruno

    1 cercles en 2arcs

    Bonjour, Fonctionne bien sous AutoCAD 2007, sans le code 38 (attention la variable fst_pt n’est pas initialisé…) A+
  24. VDH-Bruno

    1 cercles en 2arcs

    Oui merci, tu a raison une coquille, c'est corrigé dans le code précédent.. Il fallait corrigé cette ligne (defun c:A2A (e ang50 ang51) ; Arc to 2 Arc de la façon suivante (defun c:A2A (/ e ang50 ang51) ; Arc to 2 Arc A+
  25. VDH-Bruno

    Cotation

    Bonjour, Sauf sur les cotes radiales et angulaires… Il faudrait encore affiner un peu le traitement. C’est du dépannage pour le principe, quant à la cotation forcé, il suffit de penser à relancer la routine (la cotation sera réactualisée), après si on veut pousser pour une mise à jour automatique, il faudra jouer avec les réacteurs.. Pas sûr que j’ai le temps et l’envie d’aller plus loin, pour une convention que j’ai délaissé (pas assez productive) depuis que je ne suis plus à la planche à dessin. Effectivement je pense que c’est à réserver à de la présentation de document plutôt qu’à de la production de plans... A+
×
×
  • 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é