Aller au contenu

bonuscad

Membres
  • Compteur de contenus

    5 029
  • Inscription

  • Dernière visite

  • Jours gagnés

    56

Tout ce qui a été posté par bonuscad

  1. bonuscad

    insertion en masse

    Après réflexion, ta demande n'est pas si simple, j'ai réfléchi dessus et suis arrivé à quelque chose. Je ne pense pas que ça te conviendra, mais je te livre ce que j'ai pu obtenir. Le gros problème est d'avoir l'encombrement du bloc suivant, donc je me suis simplement assuré que le point d'insertion suivant serait contenu dans le format A4. Voilà si tu veux continuer à bosser dessus, pour moi c'est bon :casstet: Voilà l'ébauche, bonne chance (defun c:cahier_bloc ( / old_osmd prefix pt_ins pt_tmp lst_dwg n dx dy loop key pt pt_last obj ll ur lg) (setvar "cmdecho" 0) (setvar "attreq" 0) (setq old_osmd (getvar "osmode")) (setvar "osmode" 0) (vl-load-com) (setq prefix (strcat (vl-filename-directory (getfiled "Sélectionner un fichier DWG TEMOIN" "" "dwg" 16)) "\\")) (setq pt_ins (getpoint "\nPoint d'insertion pour le 1er Bloc? <0.0,0.0,0.0>: ")) (if (null pt_ins) (setq pt_ins '(0.0 0.0 0.0))) (setq lst_dwg (vl-directory-files prefix "*.dwg" 1) next_ins pt_ins delta_x 0.0 delta_y 0.0 last_pt nil ) (initget "A4 A3") (setq dx (if (eq (getkword "\nQuel format [A4/A3]? : ") "A3") 420 210) dy (* 210 (sqrt 2))) (foreach dwg lst_dwg (setq Obj (vla-InsertBlock (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object))) (vlax-3d-point next_ins) (strcat prefix dwg) 1 1 1 0 ) ) (vla-GetBoundingBox Obj 'll 'ur) (setq ll (safearray-value ll) ur (safearray-value ur) ) (command "_.move" (entlast) "" "_none" ll "_none" next_ins) ;(setvar "cecolor" "3") ;(command "_.rectang" ll ur) ;(setvar "cecolor" "256") ;(command "_.move" (entlast) "" "_none" ll "_none" next_ins) (setq next_ins (list (+ (car ur) (car next_ins)) (cadr next_ins) (caddr next_ins)) last_pt next_ins delta_x (+ (- (car ur) (car ll)) delta_x) delta_y (max (- (cadr ur) (cadr ll)) delta_y) ) (if (> delta_x dx) (if (> delta_y dy) (setq next_ins (list (+ (car pt_ins) dx) (cadr pt_ins) (caddr pt_ins)) delta_x 0.0 delta_y 0.0 pt_ins next_ins ) (setq next_ins (list (car pt_ins) (+ (cadr pt_ins) delta_y) (caddr pt_ins)) delta_x 0.0 pt_ins next_ins ) ) (setq next_ins (list (+ (car pt_ins) delta_x) (cadr pt_ins) (caddr pt_ins))) ) ; (command "_.text" "_justify" "_tleft" (list (car pt_ins) (+ (cadr pt_ins) dy)) "5.0" "0.0" dwg) ) (command "_.zoom" "_all") (command "_.zoom" "_extents") (setvar "osmode" old_osmd) (setvar "attreq" 1) (setvar "cmdecho" 1) (prin1) )
  2. A la demande d'un membre je reposte un code, mais contrairement à mon habitude, je l'ai commenté pour une meilleure compréhension. Comme ça vous pourrez mieux décortiquer et le modifier\inspirer pour autre chose! Pouff, ça fait du boulot de commenter, f'rais pas ça tous les jours [color=red];;fonction pour dessiner des segments virtuel avec (grvecs)[/color] [color=blue];;passe la liste de points sousmise au format requis par (grvecs) ;; arguments passés à la fonction (liste de points) et numéro de couleur[/color] (defun des_vec (lst col / lst_sg) (setq lst_sg (list (cadr lst) (car lst))) (setq lst (cdr lst)) (while lst (if (cadr lst) (setq lst_sg (cons (cadr lst) (cons (car lst) lst_sg))) (setq lst_sg (cons (last lst_sg) (cons (car lst) lst_sg))) ) (setq lst (cdr lst)) ) (setq lst_sg (cons col lst_sg)) (grvecs lst_sg) ) [color=red];;fonction principale[/color] (defun c:A4-A3_dyn ( / pt_ins dx dy pt_tmp q n key pt_key pt_cen) (setq pt_ins (getpoint "\nPoint d'insertion pour le 1er Format? <0.0,0.0,0.0>: ")) (if (null pt_ins) (setq pt_ins '(0.0 0.0 0.0))) (initget "A4 A3") (setq dx (if (eq (getkword "\nQuel format [A4/A3]? : ") "A3") 420.0 210.0) dy (* 210.0 (sqrt 2)) [color=blue];;stoke le point d'insertion original[/color] pt_tmp pt_ins [color=blue];;compteur pour inscription du texte[/color] q 0 ) (initget 7) (setq n (getint "\nNombre de format A3 ou A4 à mettre en place?: ")) [color=blue];;effectue un zoom sur la partie maximum calculé de nombre de A4/A3 necessaire[/color] (command "_.zoom" "_window" pt_ins (list (+ (car pt_ins) (* dx n)) (+ (cadr pt_ins) (* dy n)))) [color=blue];;Ici une boucle sur la lecture du positionnement du curseur à l'écran[/color] [color=blue];;Tant que le périphérique d'entrée est lu ET qu'un point n'est pas cliqué (click-gauche), on boucle[/color] (while (and (setq key (grread T 4 0)) (/= (car key) 3)) (cond [color=blue];;execute cette action seulement si le code et équivalement à l'évolution dynamique du curseur (déplacement)[/color] ((eq (car key) 5) [color=blue];;récupère les coordonnées du point du curseur à l'instant T[/color] (setq pt_key (cadr key)) [color=blue];;redessine l'écran[/color] (redraw) [color=blue];;redessine le rectangle A4/A3 pour chaque format[/color] (repeat n (des_vec (list (list (car pt_ins) (cadr pt_ins)) (list (+ (car pt_ins) dx) (cadr pt_ins)) (list (+ (car pt_ins) dx) (+ (cadr pt_ins) dy)) (list (car pt_ins) (+ (cadr pt_ins) dy)) ) 3 ) [color=blue];;test pour substituer le point de départ du prochain format: si a droite du précédent ou nouvelle rangée[/color] (if (> (car pt_key) (car pt_ins)) (setq pt_ins (list (+ (car pt_ins) dx) (cadr pt_ins))) (setq pt_ins (list (car pt_tmp) (+ (cadr pt_ins) dy))) ) ) [color=blue];on restore le point d'insertion original pour la boucle suivante[/color] (setq pt_ins pt_tmp) ) [color=blue];Fin de la condition vrai du dessin virtuel des rectangles en dynamique[/color] ) ) [color=blue];;fin de la boucle de lecture du périphérique ;;redessine l'écran[/color] (redraw) (setvar "cmdecho" 0) (repeat n (command "_.rectang" (list (car pt_ins) (cadr pt_ins)) (list (+ (car pt_ins) dx) (+ (cadr pt_ins) dy))) [color=blue];calcul du milieu du format[/color] (setq pt_cen (mapcar '/ (mapcar '+ (list (car pt_ins) (cadr pt_ins)) (list (+ (car pt_ins) dx) (+ (cadr pt_ins) dy))) '(2.0 2.0))) (command "_.text" "_justify" "_mcenter" pt_cen "5.0" "0.0" (itoa (setq q (1+ q)))) (if (> (car pt_key) (car pt_ins)) (setq pt_ins (list (+ (car pt_ins) dx) (cadr pt_ins))) (setq pt_ins (list (car pt_tmp) (+ (cadr pt_ins) dy))) ) ) (setvar "cmdecho" 1) (prin1) )
  3. Je n'ai pas cherché sur la syntaxe du code. Mais remarques seront plus générales: *Evite l'usage de caractères accentués pour tes variables ou fonctions: dans une version non Française ca va planter lamentablement. Tu peux appliquer la même règle pour les noms de fichier. Les commandes aussi en internationale serait beaucoup mieux, mais on va pas être trop exigeant au départ ;) Mais les bonnes habitudes se prennent au début.... * Lorques que tu veux créer un calque type de ligne, il est bien de s'assurer que celui-ci n'existe pas déjà. En effet la comande ne se déroulera pas pareil si la définition existe. Généralement un truc du style "Machin" existe déjà, voulez vous le redéfinir "Oui/Non". Donc La commande vas avoir des options supplémentaires qui ne sont pas prévu dans ton code et il va planter lamentablement. Généralement on utilise la fonction (tblseach) pour vérifier si la défintion existe.
  4. bonuscad

    Point OU distance

    Comme (getdist), (getpoint) accepte une entré clavier, qui sera compris comme une distance. Pour ce faire (getpoint) prendra la direction de la position du curseur (pour avoir l'angle de direction) et te retournera un point sous forme de liste. Tu peux aussi fourni en entrèe (comme pour la commande ligne) @25<45 Le point retouné sera une liste calculée par rapport a ton dernier point de longueur 25 avec un angle de 45 (dans les unitées actives) Donc en résumé, tu n'as point a te soucier si c'est une distance ou tout autre forme d'entrée valide (getpoint) te retournera toujours un point sous forme de liste.
  5. bonuscad

    Rappel de commande lisp

    Tu pourrais simplement passer un argument à ta fonction!!! : (defun CHOIX (Q1 / ) (if (= Q1 "A")(alert "CHOIX A")) (if (= Q1 "B")(alert "CHOIX B")) (if (= Q1 "C")(alert "CHOIX C")) ) ^C^C(choix "A"); ^C^C(choix "B"); ^C^C(choix "C");
  6. bonuscad

    Point OU distance

    comme ceci (initget 9) ;;interdit une entrée nulle, mais accepte un point hors-limite (setq p1 (getpoint "\nPoint de base: ")) (initget 7) ;;interdit une entréé nulle, = zéro et négative (setq d1 (getdist p1 "\nDistance: ")) NB (getdist) accepte aussi bien une simple entrée numérique au clavier qu'un autre point saisi graphiquement.
  7. (<= 7 7) renvoie T (<= 7 8) renvoie T (<= 7 6) renvoie nil idem pour (>= 8 7) Dans l'aide Autolisp tu trouveras l'emploi dans la section "Opérateurs" (Operators) Ils ne sont pas classé dans l'index alphabétique. ;)
  8. bonuscad

    script CAMERA

    Boris Bel exemple de ce qu'on peut réaliser avec des softs standards. Dès fois on se prends un peu le "choux", mais on arrive à un résultat tout à fait honorable. Cela montre que c'est réalisable en standard. Bravo pour ton clip! (manque la musique ;) )
  9. Il y avait eu ce SUJET . Bien qu'elle doit fonctionner avec des segments de contour courbe, mais cette situation n'est pas simple à résoudre (elle peut ne pas fonctionner correctement) Par contre pour un contour composé de segment droit ça doit fonctionner sans problème (sous réserve tou de même). Voilà, si ça t'interresse, pour avoir une idée de méthode, mais je dis pas que c'est la meilleure. Il ya "_Extrim" des Express qui permet de faire cela, pas toujours parfaitement non-plus, mais c'est quand même une fonction beaucoup plus aboutie. (Par contre difficile à décortiquer) :casstet:
  10. Ben par la force des choses Au tout je diffusait dans ma cellule d'étude, puis aux "dessineux" du département, puis aux alentour du dép. (ceci sans internet) puis en national (en intranet) et maintenant avec le net Donc forcément quand on diffusse, il faut que ça puisse tourner sans trop de déboires. Avec l'expérience et du temps cela ne peut que s'améliorer. Donc l'esprit au départ était de libérer de tâche fastidieuses les dessinateurs pour qu'ils puissent passer plus de temps sur du vrai dessin; plus gratifiant ET avoir un peu plus de temps libre "volé" au patron ;) . Mais ça il faut jamais montrer qu'on va beaucoup plus vite pour faire le boulot, car il y a rarement de la reconnaissance, mais plutôt de la surchage de boulot. (Je me suis fais un peu avoir à ce niveau, quand on vous consulte beaucoup ça fini par se savoir, mais bon c'est gratifiant aussi) Sans mentir, grace a plein de petits trucs et une bonne connaissance du logiciel, ce qu'un dessinateur non averti fait tranquillement en 4 heures, je le fais en 10mm. Voilà comment j'arrive a trouvé un semblant de gain; me libérer de taches ingrates. Bruno V. (un peu moins inconnu) ;) et solidaire aux dessinateurs que nous sommes.
  11. (if est idéal pour: * condition vrai alors ceci ou * condition vrai alors ceci autrement cela condition peut contenir une liste de test (qui devra retourner T au final pour faire ceci nil pour faire cela) ceci ne peut contenir qu'UNE liste cela (si present= non nil) ne peut contenir aussi qu'UNE seule liste Ce qui explique l'usage fréquent de (progn pour faire ceci/cela avec (if pour n'avoir qu'une seule liste; (progn rassemble l'execution. Pour (cond * condition vrai (donc retourne T) fait cela autrement passe à condition suivante * condition vrai fait cela autrement passe à condition suivante * ........suivant * ...... suivant * ...... * Aucune condition vérifiée alors faire cela transcrit par (T (.......)) ) ATTENTION dés qu'une condition est vérifié ET vrai, on fait cela ET on sort de condition (on ne peut faire executer plusieurs condition faire cela). Il est des fois important de placer ses conditions dans le bon ordre séquentiel. Voilà j'ai essayé de te faire comprendre le mode de fonctionnement pour pouvoir différencier l'usage de (if ou (cond J'ai l'impression de parler Chinois quand j'essaye d'expliquer. :P
  12. Un autre truc que j'ai remarqué avec le HP1050C, c'est qu'il faut rester homogène dans la défintion de l'orientation du papier dans tes confs Si tu mélange les modes portrait et paysage et bien l'option surface encrée ne fonctionne plus! Tu auras toujours "des drap de lit" quelque soit le format choisi. Pas trouvé de solution à ce problème à part de faire de multiples confs. prédéfinies en orientation :casstet: J'espère que c"est ton problème ;)
  13. bonuscad

    script CAMERA

    Pourtant la commande VueDyn ( _DView) te permet de passer en perspective. D'ailleurs c'est elle qui change l'état de la variable "ViewMode" Tu doit mal t"y prendre.:exclam: Le plus simple avec cette commande, utilise l'option "Points". Définis les emplacements de ton point cible et de ta camera (l'utilisation des filtre XYZ peuvent être pratiques pour définir tes emplacements). Cela fait tu poursuit avec l'option "Distance" (tu peux valider la distance proposée par défaut, elle est calculée par rapport à tes précédents points) Et voilà tu te retrouve en perspective (regarde l'état de ViewMode)
  14. Ben, avec les paranthèses . C'est la base du lisp! (> 7 3) -> renvoit "T" (Thrue/Vrai) et si c'est pas vrai "nil" (rien/vide)
  15. bonuscad

    script CAMERA

    Regarde cet ancien SUJET Peut être te donnera t-il des idées :P
  16. Tu es bien passé AUSSI par le gestionnaire de tracage? Car si tes PC3 ne sont pas configurés dans ce mode, ils prendront le dessus même si la config par le panneau de conf de windowd est bonne ou la config par défaut du traceur. Très puissants ces PC3... D'aiileurs lors d'un changement de drivers, je conseille de les refaire sous peine d'avoir des surprises En réseau si on change le chemin d'accés, même combat :P [Edité le 7/4/2006 par bonuscad]
  17. Controler les premiers résultats pour voir s'il n'y a pas de coquilles :exclam: Exemple d'usage : (valeur_mediane '(87 56.0 72 90.0 58 67.0 58.0 85 72.0 91 81.0 83)) ou si lst_nbr = liste de nombre (réel ou entier) (valeur_mediane lst_nbr) NB: Précision en virgule flottante fixé à 8 décimales (maxi) (defun valeur_mediane (l_val / sv_lunit sv_lprec lg_l v_med) (cond ((not (member nil (mapcar 'numberp l_val))) (setq sv_lunit (getvar "LUNITS") sv_lprec (getvar "LUPREC")) (setvar "LUNITS" 2) (setvar "LUPREC" 8) (setq l_val (mapcar 'atof (acad_strlsort (mapcar 'rtos l_val)))) (setq lg_l (length l_val)) (if (zerop (rem lg_l 2)) (setq v_med (/ (+ (nth (1- (/ lg_l 2)) l_val) (nth (/ lg_l 2) l_val) ) 2.0 ) ) (setq v_med (nth (/ lg_l 2) l_val)) ) (setvar "LUNITS" sv_lunit) (setvar "LUPREC" sv_lprec) ) (T (princ "\nListe de nombre incorrect\n") v_med nil) ) v_med )
  18. bonuscad

    Liste de fichier

    Avec l'aide précieuse de Tony :) [color=red] ;; ;;Auteur de BrowseForFolder ;;Tony Tanzillo ;; [/color] (defun BrowseForFolder ( Message / sh folder parentfolder folderobject result) (vl-load-com) (setq sh (vla-getInterfaceObject (vlax-get-acad-object) "Shell.Application" ) ) (setq folder (vlax-invoke-method sh 'BrowseForFolder 0 "Message" 0 ) ) (vlax-release-object sh) (if folder (progn (setq parentfolder (vlax-get-property folder 'ParentFolder) ) (setq FolderObject (vlax-invoke-method ParentFolder 'ParseName (vlax-get-property Folder 'Title) ) ) (setq result (vlax-get-property FolderObject 'Path) ) (mapcar 'vlax-release-object (list folder parentfolder folderobject) ) (if (/= (substr result (strlen result)) "\\") (setq result (strcat result "\\")) result ) ) ) ) [color=blue] ;; ;;Merci Tony! ;; [/color] (defun c:lsp? ( / DirPath lst_appli) (setq DirPath (BrowseForFolder "Sélectionner le dossier")) (setq lst_appli (vl-directory-files DirPath "*.lsp" 1)) (if lst_appli (foreach n lst_appli (load (strcat DirPath n))) ) (prin1) )
  19. bonuscad

    angle entre 3 point

    Merci, mais pour faire cela j'ai ressorti mes formulaires de cours, (ils ont jaunis, depuis temps :o ) Donc quand tu as la formule, y a pas bien d'honneur! Mais moi aussi j'aime bien ce mode calcul, car il me dispense du test du 4ème et du 1er quadrant trigo. Je vais modifier mon ancienne routine (qui fonctionne en sélectionnant des segments droits), pour y appliquer cette méthode. Merci de ta présence sur le forum, qui me stimule lors de mes réflexions sur les méthodes que je pourrais utiliser. ;)
  20. Pourquoi pas? C''est une bonne idée! :exclam: Je crois même l'avoir déjà observé sur des routines essayées deci-delà. On pourrait même aller plus loin, monter des réacteurs (enfin je pense, car les cotation vaste chantier :casstet: ) pour réagir aux changement de 'dimscale'. Mais dans ce domaine Patrick_35 serait plus perfomant que moi ;) Seul ombre: si DimScale et autant pour DimAsz est mis à 0.0, ça fonctionne mais on se retrouve avec une polyligne normale avec un doublon dans les sommets. Je modifie à nouveaux le post. Merci de ton aide :cool:
  21. bonuscad

    angle entre 3 point

    Difficile de faire plus court qu'avec la fonction (cal) :( mais bon, une autre méthode parmis tant d'autres. ((lambda ( / px p1 p2 msg l_pt l_d p ang) (initget 9) (setq px (getpoint "\nPoint au sommet: ") p1 px p2 px msg '("p1" "\n1er point: " "p2" "\n2ème point: ")) (foreach n (list p1 p2) (while (equal px n) (initget 9) (setq n (getpoint px (cadr msg))) (if (equal px n) (princ "\nLe point est confondu au sommet!") ) ) (set (read (car msg)) n) (setq msg (cddr msg)) ) (setq l_pt (mapcar '(lambda (x) (list (car x) (cadr x))) (list px p1 p2)) l_d (mapcar 'distance l_pt (append (cdr l_pt) (list (car l_pt)))) p (/ (apply '+ l_d) 2.0) ang (* (atan (sqrt (/ (* (- p (car l_d)) (- p (caddr l_d))) (* p (- p (cadr l_d)))))) 2.0) ) (alert (strcat "Angle exprime en fonction des unites actives" "\nAngle: <" (angtos ang (getvar "AUNITS") (getvar "AUPREC")) ">" "\nComplémentaire à " (angtos pi (getvar "AUNITS") 0) ": <" (angtos (- pi ang) (getvar "AUNITS") (getvar "AUPREC"))">" ) ) (print (angtos ang (getvar "AUNITS") (getvar "AUPREC"))) (prin1) )) [Edité le 7/4/2006 par bonuscad]
  22. bonuscad

    Déssiner des Haies...

    Ceci correspond au contenu d'un fichier source de formes (SHP) Il te faut donc l'enregistrer dans un fichier à l'extension .SHP. Puis dans Autocad, utiliser la commande "COMPILER". Tu obtiendras de ce fait un fichier de forme utilisable (format SHX) par la commande "CHARGER" ou a travers la définition de type de lignes complexe, ce qui doit être le cas. Attention à la correspondance du nom du fichier figurant dans la défintion du type du ligne (fichier .LIN) et le nom de ton fichier SHX (et SHP bien sûr!)
  23. bonuscad

    pdf vers ps pour dwg

    Y a pas de solution miracle, mais jette un oeil a cette discussion dès fois que! :exclam:
  24. Merci (gile) d'avoir mis le doigt sur le problème, j'avais songé à la même chose. Avec tes suggestions j'ai remanié le code dans mon post précédent. J'ai donc abandonné la fonction (angle) et procédé tout simplement par proportion pour le calcul de pt_x. De cette manière j'ai réussi a ne pas trop alourdir le code avec des fonctions supplémentaires. Je pense que ce coup-ci c'est Tip-top :P
  25. Bon! ben la même avec une lègère modif. NB: Ne fonctionne que dans des SCU parrallèles au SCG (command "_.text" "_justify" "_center" pause 0.08 "_none" (trans (polar (trans (getvar "LASTPOINT") 1 0) (rem (getvar "SNAPANG") pi) 1.0) 0 1) "Bureau" )
×
×
  • 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é