Aller au contenu

(gile)

Moderateurs
  • Compteur de contenus

    12 247
  • Inscription

  • Dernière visite

  • Jours gagnés

    209

Tout ce qui a été posté par (gile)

  1. Tu peux voir aussi ce cours
  2. Pour Patrick_35 Je suis confus, le message s'adressait à Bred. C'est ta suggestion de boite de dialogue qui m'a rappelé que j'en avais fais une pour choisir un calque dans une liste déroulante, en tapant son nom ou en choisissant un objet à l'écran.
  3. Pour Didier, Je suis entièrement d'accord, mais vu les demandes du décapode (par exemple) il est souvent difficile d'y répondre en 10 lignes. Plus sérieusement, s'il s'agit de faire l'automatisation d'une tache très précise, pour soi, on peut se dispenser de la gestion des erreurs ou de tenir compte de "toutes" les conditions particulières. Mais j'essaye, dans les petits "programmes" que je publie d'être le plus polyvalent et exhaustif possible et forcément ça alourdit le code. Pour Patrick_35, Je ne tiens pas du tout à ce que tu ailles te coucher ;) Tu as encore plein de trucs à nous apprendre, notament les réacteurs et les ActiveX (je ne sais même pas ce que c'est au juste, les ActiveX) et quand on les aura apprises, je suis sûr que tu auras conservé une longueur d'avance. Je peux voir aussi les plus anciens (toi, Bonuscad ou d'autres) continuer à progresser.
  4. L'idée du InputBox me fait penser que j'avais fait un GetLayer avec boite de dialogue, un peu comme le GetBlock que tu m'avais aidé à améliorer. C'est ici (à la fin du code).
  5. (gile)

    raccordement parabolique

    Encore un super LISP de Bonuscad :D Juste un petit truc, j'aurais écrit différemment la routine matrix, depuis que je me suis intéressé aux matrices. ;;; VXV Retourne le produit scalaire de deux vecteurs (defun vxv (v1 v2) (apply '+ (mapcar '* v1 v2)) ) ;;; Applique une matrice à un vecteur (defun mxv (m v) (mapcar '(lambda (r) (vxv r v)) m) ) (defun matrix (pt) (mapcar '+ (mxv (list (trans '(1 0 0) 0 1 T) (trans '(0 1 0) 0 1 T) (trans '(0 0 1) 0 1 T) ) pt ) (trans '(0 0 0) 1 0) ) ) Mais il me semble bien que cette fonction, quelque soit la manière dont on l'écrit n'est qu'une autre façon, plus compliquée, pour faire : (trans pt 1 0)
  6. Je ne suis pas très attaché au "grade" non plus, et suis bien conscient qu'il est uniquement dû au bavardage, à la "tchatche" ... Nombre des messages qui m'ont fait "gagner" ma ceinture ne sont le fait que de cafouillages et de corrections. Ceci dit je suis sensible à vos compliments (mais arrêtez, vous allez me faire rougir). Je pense sincèrement que les membres de ce site on énormément contribués à mes progrès que ce soit par leur aide directe (consciente ou inconsciente) ou par les demandes et questions posées qui sont autant d'exercices (ou de jeux). PS : Il est arrivé un tout nouveau membre sur le site, donc ceinture blanche, et pour l'avoir croisé sur d'autres site, je pense pouvoir dire qu'il s'agit là d'un véritable phénomène du LISP. Ces codes sont, si on est sensible au style, une pure merveille de précision et de concision. [Edité le 28/10/2006 par (gile)]
  7. Salut, J'utilise cette astuce très utile, mais elle n'est pas toujours très fiable. Parfois des variables déjà déclarées sont notées comme variables globales. Sont aussi notés comme variables globales les arguments des fonctions lambda, or, il n'est pas nécessaire de les déclarer. À utiliser sans modération, mais avec circonspection donc. Le raccourci clavier pour "Vérifier la fenêtre d'édition" est CTRL+ALT+C et pour vérifier la sélection CTRL+MAJ+C. [Edité le 28/10/2006 par (gile)]
  8. C'est expliqué dans Menu principal > Support > CADxp, le site > rubrique bbcode. À savoir ici. Sinon, si tu utilises Firefox, tu trouveras un applicatif bien pratique ici, il s'agit d'un menu contextuel accessible avec un clic droit qui permet d'utiliser aisément la plupart des bbcodes, y compris "URL avec un nom" quand l'adresse est dans le presse papier.
  9. Une fois que le LISP est chargé, après avoir tapé arc2lines à la ligne de commande, il faut répondre aux invites de la ligne de commande : Commande: ARC2LINES Sélectionnez un arc: Entrez le nombre de segments: 5
  10. Le nom du fichier est il du type : arc2lines.lsp ?
  11. Salut, (getstring T "\Entrez le nom du calque: ")
  12. Re, Il suffit de copier le code, le coller dans le bloc-note (Windows), l'enregistrer avec l'extension .lsp, le charger dans AutoCAD, taper arc2lines à la ligne de commande.
  13. Salut et bienvenue, Un petit LISP qui, j'espère, répond à ta demande. (defun c:arc2lines (/ ent nb obj n dist lst) (vl-load-com) (if (and (setq ent (car (entsel "\nSélectionnez un arc: "))) (= (cdr (assoc 0 (entget ent))) "ARC") ) (progn (initget 7) (setq nb (getint "\nEntrez le nombre de segments: ") obj (vlax-ename->vla-object ent) dist (/ (vlax-curve-getDistAtParam obj (vlax-curve-getEndParam obj) ) nb ) lst (list (vlax-curve-getStartPoint obj)) n 0 ) (repeat nb (setq lst (cons (vlax-curve-getPointAtDist obj (* dist (setq n (1+ n)))) lst ) ) ) (while (cdr lst) (entmake (list '(0 . "LINE") (cons 10 (car lst)) (cons 11 (cadr lst)) ) ) (setq lst (cdr lst)) ) (entdel ent) ) (prompt "\nEntité non valide.") ) (princ) ) [Edité le 12/9/2008 par (gile)]
  14. À mieux te lire, je pense que c'est plutôt Input Box pour récupérer une chaine de caractères. Voir ci dessus. [Edité le 27/10/2006 par (gile)]
  15. Bonsoir, Piqué à Patrick_35 : ;;; MsgBox Ouvre une boite de dialogue pour récupérer la réponse à une question ;;; ;;; Val Button ;;; 0 OK ;;; 1 OK Annuler ;;; 2 Abandonner Recommencer Ignorer ;;; 3 Oui Non Annuler ;;; 4 Oui Non ;;; 5 Recommencer Annuler ;;; 16 Alerte critque ;;; 32 Question ;;; 48 Exclamation ;;; 64 Information ;;; ;;; Val Réponse ;;; 1 OK ;;; 2 Annuler ;;; 3 Abandonner ;;; 4 Recommencer ;;; 5 Ignorer ;;; 6 Oui ;;; 7 Non (defun MsgBox (Titre Boutons Message Time / Reponse WshShell) (setq WshShell (vlax-create-object "WScript.Shell")) (setq Reponse (vlax-invoke WshShell 'Popup Message Time Titre (itoa Boutons) ) ) (vlax-release-object WshShell) Reponse )
  16. On dirait que Bonuscad va devoir payer son coup ;)
  17. (gile)

    boundingbox

    Salut Evgeniy, C'est un plaisir de te lire ici et je suis heureux de pouvoir te dire en français toute l'admiration que j'ai pour ton style. Je ne suis pas d'accord avec toi, le résultat retourné par les deux expressions n'est égal que si le SCU est identique au SCG. Pour sergluc, Je ne comprends pas, chez moi ça marche. [Edité le 27/10/2006 par (gile)]
  18. (gile)

    boundingbox

    Salut, Effectivement, seuls les attributs éditables étaient traités. Voici une nouvelle version qui ne prend aussi en compte les attributs constants. ;; Doug C. Broad, Jr. ;; can be used with vla-transformby to ;; transform objects from the UCS to the WCS (defun UCS2WCSMatrix () (vlax-tmatrix (append (mapcar '(lambda (vector origin) (append (trans vector 1 0 t) (list origin)) ) (list '(1 0 0) '(0 1 0) '(0 0 1)) (trans '(0 0 0) 0 1) ) (list '(0 0 0 1)) ) ) ) ;; transform objects from the WCS to the UCS (defun WCS2UCSMatrix () (vlax-tmatrix (append (mapcar '(lambda (vector origin) (append (trans vector 0 1 t) (list origin)) ) (list '(1 0 0) '(0 1 0) '(0 0 1)) (trans '(0 0 0) 1 0) ) (list '(0 0 0 1)) ) ) ) ;;; Crée une entité (polyligne ou boite) figurant la "bounding box" de l'objet sélectionné. ;;; l'emprise des attributs (constant ou éditables) n'est pas prise en compte. (defun c:bbox (/ bbox_err AcDoc Space obj att_lst def ent bb minpoint maxpoint pt1 pt2 pt3 pt4 line lst ucszdir pline box cen norm ) (vl-load-com) (defun bbox_err (msg) (if (or (= msg "Fonction annulée") (= msg "quitter / sortir abandon") ) (princ) (princ (strcat "\nErreur: " msg)) ) (vla-endundomark (vla-get-activedocument (vlax-get-acad-object)) ) (setq *error* m:err m:err nil ) (princ) ) (setq AcDoc (vla-get-activedocument (vlax-get-acad-object)) Space (if (= (getvar "CVPORT") 1) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) m:err *error* *error* bbox_err ) (vla-startUndoMark AcDoc) (while (not (setq obj (car (entsel))))) (setq obj (vlax-ename->vla-object obj)) (vla-TransformBy obj (UCS2WCSMatrix)) [surligneur](if (= (vla-get-ObjectName obj) "AcDbBlockReference") (progn (setq att_lst (vl-remove-if '(lambda (x) (= (vla-get-Invisible x) :vlax-true)) (vlax-invoke obj 'getattributes) ) ) (setq def (vla-item (vla-get-Blocks AcDoc) (if (vlax-property-available-p obj 'EffectiveName ) (vla-get-EffectiveName obj) (vla-get-Name obj) ) ) ) (repeat (setq n (vla-get-count def)) (setq ent (vla-item def (setq n (1- n)))) (if (and (= (vla-get-ObjectName ent) "AcDbAttributeDefinition") (= (vla-get-Invisible ent) :vlax-false) (= (vla-get-Constant ent) :vlax-true) ) (setq att_lst (cons ent att_lst)) ) ) ) ) (if att_lst (foreach att att_lst (vla-put-Invisible att :vlax-true)) )[/surligneur] (setq bb (vl-catch-all-apply 'vla-getboundingbox (list obj 'minpoint 'maxpoint ) ) ) [surligneur](if att_lst (foreach att att_lst (vla-put-Invisible att :vlax-false)) )[/surligneur] (if (vl-catch-all-error-p bb) (progn (princ (strcat "; erreur: " (vl-catch-all-error-message bb)) ) (vla-TransformBy obj (WCS2UCSMatrix)) ) (progn (setq pt1 (vlax-safearray->list minpoint) pt2 (vlax-safearray->list maxpoint) ) (if (equal (caddr pt1) (caddr pt2) 1e-007) (progn (setq line (vla-addLine Space minpoint maxpoint)) (mapcar '(lambda (x) (vla-TransformBy x (WCS2UCSMatrix))) (list obj line) ) (setq pt1 (trans (vlax-curve-getStartPoint line) 0 1) pt3 (trans (vlax-curve-getEndPoint line) 0 1) pt2 (list (car pt3) (cadr pt1)) pt4 (list (car pt1) (cadr pt3)) lst (list pt1 pt2 pt3 pt4) ucszdir (trans '(0 0 1) 1 0 T) lst (apply 'append (mapcar '(lambda (x) (setq x (trans x 1 ucszdir)) (list (car x) (cadr x)) ) lst ) ) pline (vlax-invoke Space 'addLightweightPolyline lst) ) (vla-put-Closed pline T) (vla-put-Elevation pline (- (caddr pt1) (caddr (trans '(0 0) 0 1))) ) (if (= (vla-get-ObjectName obj) "AcDbText") (vla-Move pline (vlax-3d-point (trans '(0 0 0) 1 0)) (vlax-3d-point (trans (list 0 0 (caddr (trans (vlax-get obj 'InsertionPoint) 0 1)) ) 1 0 ) ) ) ) (vla-delete line) ) (progn (setq cen (mapcar '(lambda (x y) (/ (+ x y) 2)) pt1 pt2) pt2 (mapcar '- pt2 pt1) box (vla-addBox Space (vlax-3d-point cen) (car pt2) (cadr pt2) (caddr pt2) ) ) (if (= (vla-get-ObjectName obj) "AcDbText") (progn (setq norm (vlax-get obj 'Normal) ) (vla-Move box (vlax-3d-point (trans '(0 0 0) norm 0)) (vlax-3d-point (trans (list 0 0 (caddr (trans (vlax-get obj 'InsertionPoint) 0 norm ) ) ) norm 0 ) ) ) ) ) (mapcar '(lambda (x) (vla-TransformBy x (WCS2UCSMatrix))) (list obj box) ) ) ) ) ) (vla-endUndoMark AcDoc) (setq *error* m:err m:err nil ) (princ) )
  19. J'ai retrouvé le lien vers le document dont je parlais plus haut, c'est là. Ça coûte (et rapporte à notre cher web master) 0.56 Euros, vu les services rendus, c'est donné.
  20. (gile)

    boundingbox

    Voici une version qui ne tient pas compte de l'emprise des attributs de bloc. ;; Doug C. Broad, Jr. ;; can be used with vla-transformby to ;; transform objects from the UCS to the WCS (defun UCS2WCSMatrix () (vlax-tmatrix (append (mapcar '(lambda (vector origin) (append (trans vector 1 0 t) (list origin)) ) (list '(1 0 0) '(0 1 0) '(0 0 1)) (trans '(0 0 0) 0 1) ) (list '(0 0 0 1)) ) ) ) ;; transform objects from the WCS to the UCS (defun WCS2UCSMatrix () (vlax-tmatrix (append (mapcar '(lambda (vector origin) (append (trans vector 0 1 t) (list origin)) ) (list '(1 0 0) '(0 1 0) '(0 0 1)) (trans '(0 0 0) 1 0) ) (list '(0 0 0 1)) ) ) ) ;;; Crée une entité (polyligne ou boite) figurant la "bounding box" de l'objet sélectionné. (defun c:bbox (/ bbox_err AcDoc Space obj att_lst bb minpoint maxpoint pt1 pt2 pt3 pt4 line lst ucszdir pline box cen norm ) (vl-load-com) (defun bbox_err (msg) (if (or (= msg "Fonction annulée") (= msg "quitter / sortir abandon") ) (princ) (princ (strcat "\nErreur: " msg)) ) (vla-endundomark (vla-get-activedocument (vlax-get-acad-object)) ) (setq *error* m:err m:err nil ) (princ) ) (setq AcDoc (vla-get-activedocument (vlax-get-acad-object)) Space (if (= (getvar "CVPORT") 1) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) m:err *error* *error* bbox_err ) (vla-startUndoMark AcDoc) (while (not (setq obj (car (entsel))))) (setq obj (vlax-ename->vla-object obj)) (vla-TransformBy obj (UCS2WCSMatrix)) [surligneur](if (and (= (vla-get-ObjectName obj) "AcDbBlockReference") (setq att_lst (vl-remove-if '(lambda (x) (= (vla-get-Invisible x) :vlax-true)) (vlax-invoke obj 'getattributes) ) ) ) (foreach att att_lst (vla-put-Invisible att :vlax-true)) )[/surligneur] (setq bb (vl-catch-all-apply 'vla-getboundingbox (list obj 'minpoint 'maxpoint ) ) ) [surligneur](if att_lst (foreach att att_lst (vla-put-Invisible att :vlax-false)) )[/surligneur] (if (vl-catch-all-error-p bb) (progn (princ (strcat "; erreur: " (vl-catch-all-error-message bb)) ) (vla-TransformBy obj (WCS2UCSMatrix)) ) (progn (setq pt1 (vlax-safearray->list minpoint) pt2 (vlax-safearray->list maxpoint) ) (if (equal (caddr pt1) (caddr pt2) 1e-007) (progn (setq line (vla-addLine Space minpoint maxpoint)) (mapcar '(lambda (x) (vla-TransformBy x (WCS2UCSMatrix))) (list obj line) ) (setq pt1 (trans (vlax-curve-getStartPoint line) 0 1) pt3 (trans (vlax-curve-getEndPoint line) 0 1) pt2 (list (car pt3) (cadr pt1)) pt4 (list (car pt1) (cadr pt3)) lst (list pt1 pt2 pt3 pt4) ucszdir (trans '(0 0 1) 1 0 T) lst (apply 'append (mapcar '(lambda (x) (setq x (trans x 1 ucszdir)) (list (car x) (cadr x)) ) lst ) ) pline (vlax-invoke Space 'addLightweightPolyline lst) ) (vla-put-Closed pline T) (vla-put-Elevation pline (- (caddr pt1) (caddr (trans '(0 0) 0 1))) ) (if (= (vla-get-ObjectName obj) "AcDbText") (vla-Move pline (vlax-3d-point (trans '(0 0 0) 1 0)) (vlax-3d-point (trans (list 0 0 (caddr (trans (vlax-get obj 'InsertionPoint) 0 1)) ) 1 0 ) ) ) ) (vla-delete line) ) (progn (setq cen (mapcar '(lambda (x y) (/ (+ x y) 2)) pt1 pt2) pt2 (mapcar '- pt2 pt1) box (vla-addBox Space (vlax-3d-point cen) (car pt2) (cadr pt2) (caddr pt2) ) ) (if (= (vla-get-ObjectName obj) "AcDbText") (progn (setq norm (vlax-get obj 'Normal) ) (vla-Move box (vlax-3d-point (trans '(0 0 0) norm 0)) (vlax-3d-point (trans (list 0 0 (caddr (trans (vlax-get obj 'InsertionPoint) 0 norm ) ) ) norm 0 ) ) ) ) ) (mapcar '(lambda (x) (vla-TransformBy x (WCS2UCSMatrix))) (list obj box) ) ) ) ) ) (vla-endUndoMark AcDoc) (setq *error* m:err m:err nil ) (princ) ) [Edité le 26/10/2006 par (gile)]
  21. (gile)

    fenetre vide ?

    Salut, Regarde du côté de la variable MAXACTVP.
  22. (gile)

    commande Autocad inconnue

    Salut, Tu peux voir ce sujet.
  23. Essaye en ajoutant (vl-load-com)
  24. Salut, Les commandes AutoCAD et AutoLISP sont les mêmes, dans les deux cas on peut utiliser la commande française (sur une version française) : LIGNE ou la commande internationale : _LINE ou encore la commande internationale originale _.LINE En LISP, pour des raisons de compatibilité, beaucoup préfèrent uiliser les noms de commande internationaux (et essayent de pousser les anglo-saxons à le faire aussi). Pour les correspondances Français/International, quand tu lances une commande à partir d'un menu ou d'un bouton, elle s'affiche en international sur la ligne de commande, si tu la rappelle en faisant ENTER, elle s'affiche en français. Tu peux aussi utiliser la fonction LISP getcname : (getcname "_line") retourne "ligne" (getcname "ligne") retourne "_line" Sinon encore, Patrick propose une liste des commandes et options dans les deux langues, mais je ne sais plus où ça se trouve.
  25. Ou bien sur celle-ci. Tu peux aussi télécharger directement Edit_Bloc
×
×
  • 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é