Aller au contenu

GEGEMATIC

Membres
  • Compteur de contenus

    1 416
  • Inscription

  • Dernière visite

  • Jours gagnés

    19

Tout ce qui a été posté par GEGEMATIC

  1. Salut, Si ça ne fonctionne pas en sélectionnant manuellement, (3 fois minimum, je le répète, je n'ai pas regardé si ces ssget étaient dans un boucle) l'adaptation de ton logiciel est du ressort d'un développeur, car le travail nécessaire dépasse selon moi le cadre de l'entraide. mais tout le monde ne partage pas mon avis ... a+ gégé
  2. Salut, je n'ai pas essayé ton lisp, et je ne sais pas à quoi il sert. J'ai simplement supprimé le "x" dans les 3 ssget. donc il faudra que tu sélectionne manuellement 3 fois quelque chose, à toi de savoir quoi ! la sélection s'entends comme une fenêtre ou une capture, le programme filtre ensuite les bon éléments: on sélectionne une zone. dis moi si ça marche ? a+ gégé ;; script Autolisp v8.0 - ;; 18.02.2010 - NMB ;; utilitaires AutoCAD ;; pour configuration laser ;; ;; But : ;; - dessin des trajectoires laser ;; - exportation des coordonnees des cibles ;; ------------------------------------------------------- ;; trajectoires : ;; trajectoires disponnibles : ;; - Virage Traine : (vt) ;; - virage SurCompense : (sc) ;; - Changement de Ligne (surcompense) : (cl) ;; ;; ------------------------------------------------------- ;; cibles ;; exportation dans 2 fichiers : ;; - mark_1.dat (au format IML) ;; - mur.txt (au format ligne a ligne x1 y1 x2 y2) ;; - dessin.txt (au format ligne a ligne x1 y1 x2 y2) ;; ces fichiers sont prets a l'emploi pour utilisation les utilitaires windows ;; IML et PsiNav ;; ;;----------------------------------------------------------------------------- ;; Initialisation et gestion de l'IHM ;; -------------------------------------------------------- ;; fonction cree pour gere l'action accept trajectoire ;; (recuperation des valeurs du dialogue) ;; parametres : ;; AUCUN ;; valeur retournee : ;; AUNCUNE (defun action_accept_traj () (setq n_bloc_agv (get_tile "liste_agv")) (setq s_empattement (get_tile "edit_empattement")) (done_dialog) ) ;; ------------------------------------------------------------------------ ;; initialisation du script ;; mise a jour des variables globales ;; saisie des plans, des noms blocs, empattement avec boite de dialogue ;; parametres ;; AUNCUN ;; valeur retournee ;; AUCUNE ;; (defun init () ;; mise du SCU dans quelque chose de correct ; (command "_UCS" "G") (setq script_init 0) ;; vrai si import troncon en cours ... (setq import_tronc 0) (while (/= script_init 1) ;; creation d'une liste contenant les noms de blocs (setq liste_bloc (liste_mot_clef "BLOCK")) (setq liste_bloc_simul ( filter match_simul_block liste_bloc )) ;; initialisation de la boite de dialogue ;; (setq dcl_id (load_dialog "laser8.dcl")) ;; charge fichier DCL (if (NOT (new_dialog "laser_traj" dcl_id)) ( alert "erreur ouverture fichier dcl" ) ) ;; initialisation des listes (start_list "liste_agv") (mapcar 'add_list liste_bloc_simul) (end_list) ;; recuperation des valeurs precedentes si elles existent ;; attention, comme des blocs ou des plans ont pu etre crees ;; il faut chercher le numero de la precedente selection ;; dans la liste... ;; les fonctions suivantes remplissent : ;; n_bloc_agv ;; n_plan_simu ;; n_plan_cote ;; n_plan_traj ;; n_plan_carf ;; -> en valeur numerique ;; -> les valeurs seront ensuite ;; -> converties en chaine (setq n_bloc_agv (cherche_liste liste_bloc_simul nom_bloc_agv) ) (if (/= n_bloc_agv nil) (set_tile "liste_agv" (itoa n_bloc_agv)) ) (if (/= s_empattement nil) (set_tile "edit_empattement" s_empattement) ) (action_tile "accept" "(action_accept_traj)" ) (start_dialog) ;; recuperation des valeurs (setq nom_bloc_agv (nth (atoi n_bloc_agv) liste_bloc_simul)) (setq E (atoi s_empattement)) (unload_dialog dcl_id) (if (= E 0) (alert "Empattement non correct!") ) (setq script_init 1) ) ) ;; insert a block ;; @param ;; blockname block name ;; x pos in x ;; y pos in y ;; theta orientation in degree ( defun insert_block (blockname x y theta) (command "_insert" blockname "_non" (list x y) "" "" (rad2deg theta) ) ) ;; -------------------------- ;; renvoi le nom du bloc ou nil si l'entite n'est pas un bloc (defun nom_bloc (entite) (setq choix (entget (car entite))) (if (= (cdr (assoc 0 choix)) "INSERT") (cdr (assoc 2 choix)) nil ) ) ;; performs a filter on list ;; @param ;; f filter function, (if f elmt) is used to select elements ;; l list to filter (defun filter (f l / a) (foreach i l ( if ( f i ) (setq a (append a (list i) )) nil ) ) a ) ;; returns if block name corresponds to simulation ;; (defun match_simul_block ( blockname ) (wcmatch blockname "*SI") ) ;; "safe" itoa ;; @return itoa(i) or nil if str is nil (defun itoa_safe (i) ( if i (itoa i) nil ) ) ;; ------------------------------------------------------------------------- ;; sauvegarde des parametres qui vont etre modifies pendant le script et ;; modification des valeurs necessaire ;; parametres ;; AUCUN ;; valeur retournee : ;; AUCUNE ;; (defun contexte_debut () ;; sauvegarde du plan courant (setq sauve_clayer (getvar "CLAYER")) ) ;; ------------------------------------------------------------------------- ;; restauration du contexte ;; remise du layer a la valeur sauvegardee ;; parametres ;; AUCUN ;; valeur retournee : ;; AUCUNE ;; (defun contexte_restaure () ;; restauration du plan (command "_layer" "CH" sauve_clayer "") ) ;;----------------------------------------------------------------------------- ;; Fonctions utilitaires pour AutoCAD ;;----------------------------------------------------------------------- ;; ------------------------------------------------------------------------- ;; conversion angle en radians en degres ;; parametre ;; a : angle en radians ;; valeur retournee ;; angle en degres ;; (defun rad2deg (a) (* 180 (/ a pi)) ) ;; ------------------------------------------------------------------------- ;; calcul d'une tangeante ;; parametre ;; a : angle en radians ;; valeur retournee ;; tangeante de l'angle ;; ou erreur si a = 0 mod pi ;; (defun tan (a) (/ (sin a) (cos a)) ) ;; ------------------------------------------------------------------------- ;; calcul d'un angle en radians entre -pi et +pi ;; a : angle en radians ;; valeur retournee ;; a : angle raporte entre -pi et +pi (defun mod2pi (a) (while (> a pi) (setq a (- a (* 2.0 pi))) ) (while (< a (- pi)) (setq a (+ a (* 2.0 pi))) ) a ) ;; ------------------------------------------------------------------------- ;; calcul d'un carre ;; parametre ;; a : valeur ;; valeur retournee ;; a : carre ( a*a ) ;; (defun carre (a) (* a a) ) ;; fonction qui recherche des valeurs dans les tables d'AutoCAD ;; le resultat est une liste, qui contient toutes les valeurs trouvees ;; classees par ordre alphabetique ;; ;; exemple d'utilisation : liste_mot_clef( "LAYER" ) renvoie une liste contenant tous ;; les plans du dessin. ;; ;; cette fonction peut etre utilisee pour : ;; LAYER, BLOCK, ... ;; ;; parametres ;; mot_clef : chaine contenant un mot clef d'une table AutoCAD ;; valeur retournee ;; liste contenant l'ensmble des identifiant pour cette clef (cf exemple) ;; (defun liste_mot_clef (mot_clef) (setq liste_mot nil) (setq l (tblnext mot_clef 1)) (while l (setq liste_mot (cons (cdr (assoc 2 l)) liste_mot ) ) (setq l (tblnext mot_clef)) ) (reverse liste_mot) (setq liste_mot (acad_strlsort liste_mot)) ) ;; -------------------------------------------------------- ;; renvoie le premier numero de article si il est present dans la liste ;; parametre ;; liste : liste a examiner ;; article : element a rechercher ;; valeur retournee : ;; indice (dans la liste) de article s'il existe ;; nil si l'article n'est pas dans la liste ;; (defun cherche_liste (liste article) (if ( /= (setq l2 (member article liste)) nil ) (- (length liste) (length l2)) nil ) ) ;; ------------------------------------------------------------------------ ;; Fonctions de recherche des elements du plan (defun liste_magnet () (liste_bloc_attr 1 nil nom_bloc_magnet) ) ;; ------------------------------------------------------------------------ ;; exportation ;; ecriture d'une liste sur le disque formattee avec des espaces ;; paramatres : ;; - fichier : descripteur de fichier ;; - debut ligne : chaine a mettre en debut de chaque ligne ;; - list : liste a ecrire ;; - separ : caractere ou chaine de separation (defun export_liste (fichier debut_ligne liste separ) (foreach article liste (setq debut 1) (if debut_ligne (progn (princ debut_ligne fichier) (princ separ fichier) ) ) (foreach attr article (if debut (setq debut nil) (princ separ fichier) ) (princ attr fichier) ) (princ "\n" fichier) ) ) ;; ------------------------------------------------------------------------ ;; retourne une liste de bloc avec attributs presents sur le dessin ;; la liste comprend en final ;; la position d'insertion du bloc ( optionnel ) ;; la liste des attributs ;; parametres ;; insert_pos ( different de nil si la position d'insertion doir etre ;; ajoutee dans la liste ) ;; attr_name ( si different de nil, le nom des champs est mis dans la ;; liste ) ;; nom_bloc nom du bloc ;; valeur retournee : ;; liste ;; format du retour : ;; ( ( attribut1, attribut2, ... <x1, y1, theta1> ), ;; ( attribut1, attribut2, ... <x2, y2, theta2> ), ;; ... ;; ) ;; (defun liste_bloc_attr (insert_pos attr_name nom_bloc) ;; initialisation liste ensmble troncon (setq ensemble_bloc nil) ;; parcours de la liste des blocs (prompt "\nVeuillez sélectionner les blocs contenant les attributs:") (setq selection (ssget (list (cons 0 "INSERT") (cons 2 nom_bloc)) ) ) (if (/= selection nil) (progn ;; parcours de la selection (setq i 0) (setq n (sslength selection)) (while (< i n) (setq entite (entget (ssname selection i))) ;; l'entite selectionnee est un bloc compose d'attributs ;; on va parcourir l'entite a la recherche des attributs (setq id_entite (cdar entite)) (setq attribut id_entite) ;; initialisation bloc courant (setq bloc nil) ;; test de la presence d'attributs en suite... (if (= (cdr (assoc 66 entite)) 1) (setq fin 0) (setq fin 1) ) ;; principe : ;; extraction de la prochaine entite : si nil, ;; cond arrete le traitement ;; test si entite est "SEQ END" : si oui, cond arrete ;; traitement ;; test si entite est "ATTRIB" : extraction des donnees ;; sinon, rien (while (AND ;; extraction entite du bloc (/= (setq attribut (entnext attribut)) nil) (= fin 0) ) (if (/= (cdr (assoc 0 (entget attribut))) "SEQEND" ) (progn ;; ajout du nom de l'attribut ( si attr_name ) (if attr_name (setq bloq ( append bloc (list (cdr (assoc 2 (entget attribut)))) ) ) ) ;; ajout de la valeur de l'attribut (setq bloc ( append bloc (list (cdr (assoc 1 (entget attribut)))) ) ) nil ) (setq fin 1) ;; pour passer a l'objet suivant ) ) ;; point d'insertion ? (if insert_pos (progn (setq point_insertion (cdr (assoc 10 entite))) (setq x (car point_insertion)) (setq y (cadr point_insertion)) (setq theta (cdr (assoc 50 entite))) (if attr_name (setq bloc (append bloc (list "x" x "y" y "theta" theta))) (setq bloc (append bloc (list x y theta))) ) ) ) (setq ensemble_bloc ( append ensemble_bloc (list bloc) ) ) (setq i (+ 1 i)) ) ensemble_bloc ) nil ) ) ;; ------------------------------------------------------------------------- ;; conversion angle en degre en radians ;; parametre ;; a : angle en degres ;; valeur retournee ;; angle en radians ;; (defun deg2rad (a) (* pi (/ a 180.0)) ) ;; ------------------------------------------------------------------------- ;; calcul du premier arc du surcompense ;; parametre ;; s : represente l'avancement dans le virage ;; il doit varier entre 0 et 0.5 ;; valteur retournee : (liste) ;; ( xav(mm) yav(mm) xar(mm) yar(mm) theta(rad) ) ;; (defun calcul_surcompense_arc1 (s) ;; -----> prevoir gestion d'erreur si s<0 et s>0.5 ;; affectation de xar_t ;; pendant que s varie de 0 a 0.5, xar_t varie de 0 a xm (setq xar_t (* 2 s xm)) (setq yar_t (* k xar_t xar_t xar_t)) ;; calcul du vecteur norme tangeant a la courbe decrite par les roues ar (setq u 1) (setq v (* 3.0 k xar_t xar_t)) (setq norme ( distance (list u v) (list 0 0) ) ) (setq u (/ u norme)) (setq v (/ v norme)) ;; calcul position roue avant dans repere troncon (setq xav_t (+ xar_t (* E u))) (setq yav_t (+ yar_t (* E v))) ;; calcul position roue avant dans repere absolu (setq xav (- (+ x1 (* xav_t (cos angle1))) (* yav_t (sin angle1)) ) ) (setq yav (+ (+ y1 (* xav_t (sin angle1))) (* yav_t (cos angle1)) ) ) ;; calcul position roue arriere dans repere absolu (setq xar (- (+ x1 (* xar_t (cos angle1))) (* yar_t (sin angle1)) ) ) (setq yar (+ (+ y1 (* xar_t (sin angle1))) (* yar_t (cos angle1)) ) ) (setq cap ( angle (list 0 0) (list u v) ) ) (list xav yav xar yar (+ cap angle1) ) ) ;; ------------------------------------------------------------------------- ;; calcul du deuxieme arc du surcompense ;; parametre ;; s : represente l'avancement dans le virage ;; il doit varier entre 0 et 0.5 ;; valteur retournee : (liste) ;; ( xav(mm) yav(mm) xar(mm) yar(mm) theta(rad) ) ;; (defun calcul_surcompense_arc2 (s) ;; -----> prevoir gestion d'erreur si s<0.5 et s>1 ;; affecation de z ;; s varie de 0.5 a 1 et z varie de xm a 0 (setq z (* (- 1 s) 2 xm)) (setq t (* k z z z)) ;; calcul du vecteur norme tangeant a la courbe decrite par les roues ar (setq u 1) (setq v (* 3.0 k z z)) (setq norme ( distance (list u v) (list 0 0) ) ) (setq u (/ u norme)) (setq v (/ v norme)) (setq u_2 (+ (* u (cos beta)) (* v (sin beta)))) (setq v_2 (- (* u (sin beta)) (* v (cos beta)))) ;; calcul position roue ar dans repere troncon (setq xar_t (- (- xf (* z (cos beta)) ) (* t (sin beta)) ) ) (setq yar_t (+ (- yf (* z (sin beta)) ) (* t (cos beta)) ) ) ;; calcul position roue avant dans repere troncon (setq xav_t (+ xar_t (* E u_2))) (setq yav_t (+ yar_t (* E v_2))) ;; calcul position roue avant dans repere absolu (setq xav (- (+ x1 (* xav_t (cos angle1))) (* yav_t (sin angle1)) ) ) (setq yav (+ (+ y1 (* xav_t (sin angle1))) (* yav_t (cos angle1)) ) ) ;; calcul position roue arriere dans repere absolu (setq xar (- (+ x1 (* xar_t (cos angle1))) (* yar_t (sin angle1)) ) ) (setq yar (+ (+ y1 (* xar_t (sin angle1))) (* yar_t (cos angle1)) ) ) (setq cap ( angle (list 0 0) (list u_2 v_2) ) ) (list xav yav xar yar (+ cap angle1) ) ) ;; ------------------------------------------------------------------------- ;; routine de precalcul pour un surcompense ;; calcul des differents parametres de la cubique... ;; ------------------------------------------------------------------------- ;; routine de calcul pour un surcompense ;; parametres ;; s : represente l'avancement dans le virage ;; il doit varier entre 0.0 et 1.0 ;; valeur retournee : (liste) ;; ( xav(mm) yav(mm) xar(mm) yar(mm) theta(rad) ) ;; (defun calcul_surcompense (s) (if (< s 0.5) (calcul_surcompense_arc1 s) (calcul_surcompense_arc2 s) ) ) ;; ------------------------------------------------------------------------- ;; SC : surcompense ;; saisie et trace d'un surcompense ;; parametres ;; AUCUN ;; valeur retournee : ;; AUCUNE ;; (defun sc () (init) ;; ;; SAISIE DES POINTS ;; (setq p1 (getpoint "\nSC point 1:")) (setq p2 (getpoint "\nSC point 2:")) (setq p3 (getpoint "\nSC point 3:")) ;; saisie de l'encombrement (setq enc (getdist "\nSC Encombrement du virage (mm) :")) ;; apres la saisie des points, on peut changer les parametres de snap (contexte_debut) ;; ;; CALCUL DES PARAMETRES ;; ;; extraction des coordonnees (setq x1 (car p1)) (setq x2 (car p2)) (setq x3 (car p3)) (setq y1 (cadr p1)) (setq y2 (cadr p2)) (setq y3 (cadr p3)) ;; calcul de l'angle de depart (setq angle1 (atan (- y2 y1) (- x2 x1))) ;; calcul de l'angle final (setq angle2 (atan (- y3 y2) (- x3 x2))) ;; modification de x1 et y1 pour tenir compte de l'encombrement du virage ;; d est utilise temporairement (setq d (distance p1 p2)) (setq x1 (+ x2 (/ (* (- x1 x2) enc) d))) (setq y1 (+ y2 (/ (* (- y1 y2) enc) d))) ;; modification de x3 et y3 pour tenir compte de l'encombrement du virage ;; d est utilise temporairement (setq d (distance p2 p3)) (setq x3 (+ x2 (/ (* (- x3 x2) enc) d))) (setq y3 (+ y2 (/ (* (- y3 y2) enc) d))) ;; angle du virage (setq beta (- angle2 angle1)) ;; on veut beta dans [-pi, pi] (while (> beta pi) (setq beta (- beta (* 2 pi))) ) (while (< beta (- pi)) (setq beta (+ beta (* 2 pi))) ) (dessin_sc Enc beta x1 y1 angle1) ;; restauration du contexte (contexte_restaure) (princ) ) ;; ------------------------------------------------------------------------- ;; calcul_param_sc ;; calcul des parametres d'un virage surcompense (defun calcul_param_sc (_Enc _beta _x1 _y1 _angle1 ) ;; sauvegarde des parametres (setq Enc _Enc) (setq beta _beta) (setq x1 _x1) (setq y1 _y1) (setq angle1 _angle1) ;; calcul de la fin du virage ;; calcul de la fin du virage en fin de troncon (setq xf (* (+ 1 (cos beta)) Enc)) (setq yf (* (sin beta) Enc)) ;; calcul de x3 et y3 : position de fin dans rep abs (setq x3 ( + x1 ( - (* xf (cos angle1)) (* yf (sin angle1)) ) ) ) (setq y3 ( + y1 ( + (* yf (cos angle1)) (* xf (sin angle1)) ) ) ) ;; variable intermediaire (setq tb2 (tan (/ beta 2.0))) ;; tan( beta/ 2 ) ;; rayon des roues arrieres (setq rar (/ Enc tb2)) ;; parametres de la cubique ;; on calcul morceau par morceau... (setq k (* tb2 tb2)) ;; (tan( beta/2) )^2 (setq k (+ 3 k)) ;; 3 + (tan( beta/2) )^2 (setq k (* k k)) ;; ( 3 + (tan( beta/2) )^2 )^2 (setq k (/ k (* 27 rar rar tb2))) ;; coordonnees de fin de virage dans le repere troncon (setq xf (* enc (+ 1 (cos beta)))) (setq yf (* enc (sin beta))) ;; coordonnees de changement d'arc dans le repere troncon (setq xm (sqrt (abs (/ tb2 (* 3.0 k))))) (setq ym (* xm xm xm k)) ;; calcul de la longeur theorique (setq longueur_troncon (abs (* rar beta))) ) ;; chagne the layer, if exists otherwise an error message (defun change_layer_safe (layername) ( if ( member layername (liste_mot_clef "LAYER") ) ;;( setvar "CLAYER" layername ) (command "_layer" "E" layername "") ( alert (strcat "Unable to find layer:" layername) ) ) ) ;; dessin d'une polyline ;;le parametre doit etre une list de type ( ( x1 y1) (x2 y2) ... ) (defun draw_traj (lst) (change_layer_safe "ba-trajectoire") (command "_.pline" (foreach pt lst (command "_non" pt)) ; draw each point from the list ) ; draw the polyline (princ ) ) ;; extract rear point from traj point, which is index 3 and 4 in list ;; @param : ;; l : list as (xav xar yav yar theta) ;; @return (xar yar) (defun extrat_rear_point (l) (list (nth 2 l) (nth 3 l)) ) ;; extract rear point from traj point, which is index 3 and 4 in list ;; @param : ;; @return (xar yar theta) (defun extrat_rear_pose (l) (list (nth 2 l) (nth 3 l) (nth 4 l)) ) ;; draw agv pose ;; @param: ;; l : list as (xav xar yav yar theta) (defun draw_agv_pose (agv_pose) (change_layer_safe "ba-AGV\ simul") (insert_block nom_bloc_agv (nth 0 agv_pose) (nth 1 agv_pose) (nth 4 agv_pose) ) ) ;; ------------------------------------------------------------------------- ;; dessin_sc : dessin d'un virage surcompense ;; parametres : ;; Enc : encombrement du virage ;; beta : angle du virage ;; x1,y1, angle1 : parametres du repere absolu (defun dessin_sc (Enc beta x1 y1 angle1 ) (calcul_param_sc Enc beta x1 y1 angle1 ) (setq traj (mapcar 'calcul_surcompense ss) ) (draw_traj (mapcar 'extrat_rear_point traj)) (mapcar 'draw_agv_pose traj) ) ;; ------------------------------------------------------------------------- ;; calcul du premier arc d'un changement de ligne ;; parametres ;; s : represente l'avancement dans le virage ;; il doit varier entre 0.0 et 0.5 ;; valeur retournee : (liste) ;; ( xav(mm) yav(mm) xar(mm) yar(mm) theta(rad) ) ;; (defun calcul_chgtligne1 (s) ;; xar_t varie de 0 a l pendant que s varie de 0 a 0.5 (setq xar_t (* 2.0 s l)) (setq yar_t (/ (* d xar_t xar_t xar_t (- 2.0 (/ xar_t l))) (* l l l) ) ) (setq cap ( atan (/ (* 2 d xar_t xar_t (- (* 3 l) (* 2 xar_t))) (* l l l l) ) ) ) ;; calcul position roue avant dans repere troncon (setq xav_t (+ xar_t (* E (cos cap)))) (setq yav_t (+ yar_t (* E (sin cap)))) ;; nouvelle version sur roue AR ;; calcul position roue avant dans repere absolu (setq xav (- (+ x1 (* xav_t (cos angle1))) (* yav_t (sin angle1)) ) ) (setq yav (+ (+ y1 (* xav_t (sin angle1))) (* yav_t (cos angle1)) ) ) ;; calcul position roue arriere dans repere absolu (setq xar (- (+ x1 (* xar_t (cos angle1))) (* yar_t (sin angle1)) ) ) (setq yar (+ (+ y1 (* xar_t (sin angle1))) (* yar_t (cos angle1)) ) ) (list xav yav xar yar (+ cap angle1) ) ) ;; ------------------------------------------------------------------------- ;; calcul du deuxieme arc d'un chagnement de ligne ;; parametres ;; s : represente l'avancement dans le virage ;; il doit varier entre 0.5 et 1.0 ;; valeur retournee : (liste) ;; ( xav(mm) yav(mm) xar(mm) yar(mm) theta(rad) ) ;; (defun calcul_chgtligne2 (s) ;; z varie de l a 0 pendant que s varie de 0.5 a 1.0 (setq z (* (- 1 s) 2 l)) (setq t (/ (* d z z z (- 2.0 (/ z l))) (* l l l) ) ) (setq cap ( atan (/ (* 2 d z z (- (* 3 l) (* 2 z))) (* l l l l) ) ) ) (setq xar_t (- (* 2.0 l) z)) (setq yar_t (- (* 2.0 d) t)) ;; calcul position roue avant dans repere troncon (setq xav_t (+ xar_t (* E (cos cap)))) (setq yav_t (+ yar_t (* E (sin cap)))) ;; calcul position roue avant dans repere absolu (setq xav (- (+ x1 (* xav_t (cos angle1))) (* yav_t (sin angle1)) ) ) (setq yav (+ (+ y1 (* xav_t (sin angle1))) (* yav_t (cos angle1)) ) ) ;; calcul position roue arriere dans repere absolu (setq xar (- (+ x1 (* xar_t (cos angle1))) (* yar_t (sin angle1)) ) ) (setq yar (+ (+ y1 (* xar_t (sin angle1))) (* yar_t (cos angle1)) ) ) (list xav yav xar yar (+ cap angle1)) ) ;; ------------------------------------------------------------------------- ;; routine de calcul pour un changement de ligne ;; parametres ;; s : represente l'avancement dans le virage ;; il doit varier entre 0.0 et 1.0 ;; valeur retournee : (liste) ;; ( xav(mm) yav(mm) xar(mm) yar(mm) theta(rad) ) ;; (defun calcul_chgtligne (s) (if (< s 0.5) (calcul_chgtligne1 s) (calcul_chgtligne2 s) ) ) ;; ------------------------------------------------------------------------- ;; CL : changement de ligne ;; saisie et trace d'un changement de ligne surcompense ;; parametres ;; AUCUN ;; valeur retournee : ;; AUCUNE ;; (defun cl () (init) ;; ;; SAISIE DES POINTS ;; (setq p1 (getpoint "\nCL point 1:")) (setq p2 (getpoint "\nCL point 2:")) (setq p3 (getpoint "\nCL point 3:")) ;; extraction des coordonnees (setq x1 (car p1)) (setq x2 (car p2)) (setq x3 (car p3)) (setq y1 (cadr p1)) (setq y2 (cadr p2)) (setq y3 (cadr p3)) ;; recalcul de x2 et y2 pour avoir un rectangle ;; k est utilise temporairement (setq k (+ (* (- x2 x1) (- x3 x1)) (* (- y2 y1) (- y3 y1)) ) ) (setq k (/ k (+ (* (- x2 x1) (- x2 x1)) (* (- y2 y1) (- y2 y1)) ) ) ) (setq x2 (+ x1 (* k (- x2 x1)))) (setq y2 (+ y1 (* k (- y2 y1)))) ;; apres la saisie des points, on peut changer les parametres de snap (contexte_debut) ;; ;; CALCUL DES PARAMETRES ;; ;; calcul angle de depart (setq angle1 (atan (- y2 y1) (- x2 x1))) ;; calcul de la DEMI longueur du changement de ligne (setq l (* 0.5 (sqrt (+ (carre (- x2 x1)) (carre (- y2 y1))))) ) ;; calcul de la DEMI largeur du changement de ligne (setq d (* 0.5 (sqrt (+ (carre (- x3 x2)) (carre (- y3 y2))))) ) ;; changement de signe de d dans le cas d'un virage a droite ;; tres elegamment, on utilise le signe du produit vectoriel... (if (< (- (* (- x2 x1) (- y3 y1)) (* (- x3 x1) (- y2 y1)) ) 0 ) (setq d (- 1.0 d)) ) (dessin_cl l d x1 y1 angle1) ;; restauration du contexte (contexte_restaure) (princ) ) ;; ------------------------------------------------------------------------- ;; calcul des parametres du virage changement de ligne ;; parametres ;; _l : demi longueur cl ;; _d : demi largeur cl ;; _x1,_y1,_ angle1 : parametres du repere absolu (defun calcul_param_cl (_l _d _x1 _y1 _angle1 ) ;; sauvegarde des parametres (setq l _l) (setq d _d) (setq x1 _x1) (setq y1 _y1) (setq angle1 _angle1) ;; calcul de la fin du virage en fin de troncon (setq xf (* 2.0 l)) (setq yf (* 2.0 d)) ;; calcul de x3 et y3 : position de fin dans rep abs (setq x3 ( + x1 ( - (* xf (cos angle1)) (* yf (sin angle1)) ) ) ) (setq y3 ( + y1 ( + (* yf (cos angle1)) (* xf (sin angle1)) ) ) ) ;; calcul de la longeur theorique (setq longueur_troncon (* 2 l)) ) ;; ------------------------------------------------------------------------- ;; dessin_cl : dessin d'un changement de ligne ;; parametres ;; l : demi longueur cl ;; d : demi largeur cl ;; x1,y1, angle1 : parametres du repere absolu (defun dessin_cl (l d x1 y1 angle1 ) (calcul_param_cl l d x1 y1 angle1 ) (setq traj (mapcar 'calcul_chgtligne ss) ) (draw_traj (mapcar 'extrat_rear_point traj)) (mapcar 'draw_agv_pose traj) ) ;; ------------------------------------------------------------------------- ;; routine de calcul pour un virage traine ;; parametres ;; s : represente l'avancement dans le virage ;; il doit varier entre 0.0 et 1.0 pour le virage traine ;; lorsqu'il est superieur a 1 on calcul la traine pour le troncon droit suivant ;; valeur retournee : (liste) ;; ( xav(mm) yav(mm) xar(mm) yar(mm) theta(rad) ) ;; (defun calcul_viragetraine (s) ;; initialisation (alpha2 memorise l'ancien alpha pour ne pas avoir a gerer le pas ici) (if (= s 0.0) (progn (setq phi 0) (setq cap 0) (setq alpha2 s) ) ) (setq alpha (abs (* s beta))) ;; angle realise dans le virage ;; distance parcourue depuis dernier appel (setq dist (abs (* rayon (- alpha alpha2)))) ;; distance parcourue dans la ligne droite apres le virage (if (> s 1.01) (setq dist2 (+ dist2 dist)) (setq dist2 0) ) ;; calcul de la position de la roue avant dans le repere du troncon (if (<= s 1.01) (progn ;; le virage est en cours (setq xav_t (* rayon (sin alpha))) (setq yav_t (* rayon (- 1.0 (cos alpha)))) ) (progn ;; le virage est termine (setq xav_t (+ (* rayon (sin (abs beta))) (* dist2 (cos (abs beta))) ) ) (setq yav_t (+ (* rayon (- 1.0 (cos (abs beta)))) (* dist2 (sin (abs beta))) ) ) ) ) (if (= sens_virage "D") (setq yav_t (* -1 yav_t)) ) ;; simulation de l'angle de tourelle... (if (<= s 1.01) (if (= sens_virage "G") (setq phi (- alpha cap)) ;; alpha - cap (setq phi (- 0 alpha cap)) ;; -alpha - cap ) (if (= sens_virage "G") (setq phi (- (abs beta) cap)) ;; alpha - cap (setq phi (- 0 (abs beta) cap)) ;; -alpha - cap ) ) ;; variation de cap (setq cap (+ cap (/ (* dist (sin phi)) E))) ;; memorisation ancien alpha (setq alpha2 alpha) ;; calcul de la position des roues arrieres dans le repere du troncon (setq xar_t (- xav_t (* E (cos cap)))) (setq yar_t (- yav_t (* E (sin cap)))) ;; calcul position roue avant dans repere absolu (setq xav (- (+ x1 (* xav_t (cos angle1))) (* yav_t (sin angle1)) ) ) (setq yav (+ (+ y1 (* xav_t (sin angle1))) (* yav_t (cos angle1)) ) ) ;; calcul position roue arriere dans repere absolu (setq xar (- (+ x1 (* xar_t (cos angle1))) (* yar_t (sin angle1)) ) ) (setq yar (+ (+ y1 (* xar_t (sin angle1))) (* yar_t (cos angle1)) ) ) (list xav yav xar yar (+ cap angle1) ) ) ;; ------------------------------------------------------------------------- ;; traiter_choix_vt ;; routine de traitement de l'arc selectionne ;; Parametre : entite selectionnee ;; retour ;; 0 si succes (defun traiter_choix_vt (choix) ;; verifier que c'est un arc (if (/= (cdr (assoc 0 choix)) "ARC") (setq res 1) (progn ;;extraction du centre... (setq centre_cercle (cdr (assoc 10 choix))) ;;extraction du rayon (setq rayon (cdr (assoc 40 choix))) ;; extraction des angles (setq angle1 (cdr (assoc 50 choix))) (setq angle2 (cdr (assoc 51 choix))) ;; angle1 et angle2 sont comptes (par AutoCAD) ;; pour un arc oriente dans le sens trigo ;; entre 0 et 2 pi. ;; Comme on souhaite toujours avoir angle1 < angle2 ;; on modifie eventuellement angle1 (if (> angle1 angle2) (setq angle1 (- angle1 (* 2 pi))) ) ;; savoir si c'est un virage a droite ou a gauche... (if (= mode_choix_sens_virage 1) (progn (initget 1 "Droite Gauche") (setq sens_virage (getkword "VT Sens du virage (Droite Gauche)") ) (setq sens_virage (substr sens_virage 1 1)) ) (setq sens_virage "G") ) ;; permuter les angles si besoin (if (= sens_virage "D") (progn ;; echange de angle1 et angle2 (setq temp angle1) (setq angle1 angle2) (setq angle2 temp) ) ) ;; calcul de x1 y1 : point de depart du virage (setq x1 (+ (car centre_cercle) (* rayon (cos angle1)))) (setq y1 (+ (cadr centre_cercle) (* rayon (sin angle1)))) ;; calcul de x3 et y3 : point d'arrivee du virage (setq x3 (+ (car centre_cercle) (* rayon (cos angle2)))) (setq y3 (+ (cadr centre_cercle) (* rayon (sin angle2)))) ;; angle1 represente maintenant le cap du chariot en entree de virage ;; et angle2 le cap en fin de virage... (if (= sens_virage "G") (progn (setq angle1 (+ angle1 (/ pi 2))) (setq angle2 (+ angle2 (/ pi 2))) ) (progn (setq angle1 (- angle1 (/ pi 2))) (setq angle2 (- angle2 (/ pi 2))) ) ) (setq beta (- angle2 angle1)) ;; angle1 n'est peut-etre pas dans le bon interval (setq angle1 (mod2pi angle1)) (dessin_vt rayon beta x1 y1 angle1) (setq res 0) ) ) res ) ;; ------------------------------------------------------------------------- ;; VT : virage traine (nouvelle version : selection d'un arc) ;; saisie et trace d'un virage traine ;; parametres ;; AUCUN ;; valeur retournee : ;; AUCUNE ;; (defun vt () (init) (contexte_debut) ;; demander une selection (setq entite nil) (while (= entite nil) (setq entite (entsel "\n VT : cliquer sur un arc")) ) (setq mode_choix_sens_virage 1) ;; extraire l'entite choisie (setq choix (entget (car entite))) (if (= (traiter_choix_vt choix) 1) (princ "\n ce n'est pas un arc !!") ) (contexte_restaure) ) ;; ------------------------------------------------------------------------- ;; calcul_param_vt ;; calcul des parametres du virage traine (defun calcul_param_vt (_rayon _beta _x1 _y1 _angle1 ) ;; sauvegarde des parametres (setq rayon _rayon) (setq beta _beta) (setq x1 _x1) (setq y1 _y1) (setq angle1 _angle1) ;; calcul de la fin du virage ;; calcul de la fin du virage en fin de troncon (if (= sens_virage "G") (progn (setq xf (* (sin beta) rayon)) (setq yf (* (- 1 (cos beta)) rayon)) ) (progn (setq xf (* (- (sin beta)) rayon)) (setq yf (* (- (cos beta) 1) rayon)) ) ) ;; calcul de x3 et y3 : position de fin dans rep abs (setq x3 ( + x1 ( - (* xf (cos angle1)) (* yf (sin angle1)) ) ) ) (setq y3 ( + y1 ( + (* yf (cos angle1)) (* xf (sin angle1)) ) ) ) ;; calcul de la longeur theorique (setq longueur_troncon (abs (* rayon beta))) ) ;; ------------------------------------------------------------------------- ;; dessin_vt : dessin d'un virage traine ;; parametres : ;; rayon : rayon du virage ;; beta : angle du virage ;; x1,y1, angle1 : parametres du repere absolu (defun dessin_vt (rayon beta x1 y1 angle1 ) (calcul_param_vt rayon beta x1 y1 angle1) (setq traj (mapcar 'calcul_viragetraine ss) ) (draw_traj (mapcar 'extrat_rear_point traj)) (mapcar 'draw_agv_pose traj) ) ;; ------------------------------------------------------------------------- ;; fonction cree pour gerer l'action accept cible ;; (recuperation des valeurs du dialogue) ;; parametres ;; AUCUN ;; valeur retournee : ;; AUCUNE ;; (defun action_accept_cible () (setq n_bloc_cible (get_tile "liste_cible")) (setq n_plan_mur (get_tile "liste_mur")) (setq n_plan_dessin (get_tile "liste_dessin")) (done_dialog) ) ;; ------------------------------------------------------------------------- ;; fonction cree pour gere l'action accept cible ;; (recuperation des valeurs du dialogue) ;; parametres ;; AUCUN ;; valeur retournee : ;; AUCUNE ;; (defun action_accept_cible () (setq n_bloc_cible (get_tile "liste_cible")) (setq n_plan_mur (get_tile "liste_mur")) (setq n_plan_dessin (get_tile "liste_dessin")) (done_dialog) ) ;; ------------------------------------------------------------------------- ;; fonction d'exortation de traits vers un fichier texte ;; le nom du fichier est fichier ;; l'exportation se fait sur la selection passee en parametre ;; parametres : ;; nom plan : nom du plan a filtrer ou vide ;; valeur retournee ;; AUCUNE (defun export_trait (nom_plan) (prompt "\nVeuillez sélectionner les trait (lignes)à exporter :") (setq selection (ssget '((0 . "LINE")))) (setq i 0) (setq n (sslength selection)) (princ "export_trait( nom plan = ") (princ nom_plan) (princ " )\n") (princ " lg selection = ") (princ n) (princ " \n") ;; parcours des entites (while (< i n) (setq entite (entget (ssname selection i))) (if (or (= nom_plan "*") (= (cdr (assoc 8 entite)) nom_plan) ) (progn (setq x1 (cadr (assoc 10 entite))) (setq y1 (caddr (assoc 10 entite))) (setq x2 (cadr (assoc 11 entite))) (setq y2 (caddr (assoc 11 entite))) ;; ecriture dans le fichier (write-line (strcat (rtos x1) " " (rtos y1) " " (rtos x2) " " (rtos y2) "\n" ) fichier ) ) ) (setq i (+ i 1)) ) ) ;; ------------------------------------------------------------------------- ;; fonction qui gere l'exportation des cibles au format IML ;; - saisie du nom du bloc qui definit les cibles (DCL) ;; - parcours de la base de donnee pour extraire les blocs cibles ;; - ecriture du fichier cible ;; - ecriture du fichier mur ;; - ecriture du fichier dessin ;; parametres ;; AUCUN ;; valeur retournee : ;; AUCUNE ;; (defun cible () ;; initialisation du script, gestion de la boite de dialogue ;; creation d'une liste contenant ;; les noms des layer et des blocks (setq liste_layer (liste_mot_clef "LAYER")) (setq liste_bloc (liste_mot_clef "BLOCK")) ;; initialisation de la boite de dialogue ;; (setq dcl_id (load_dialog "laser8.dcl")) ;; charge fichier DCL (if (NOT (new_dialog "laser_cible" dcl_id)) (exit) ) ;; initialisation des listes (start_list "liste_cible") (mapcar 'add_list liste_bloc) (end_list) (start_list "liste_mur") (mapcar 'add_list liste_layer) (end_list) (start_list "liste_dessin") (mapcar 'add_list liste_layer) (end_list) ;; recuperation des valeurs precedentes si elles existent (if (/= n_bloc_cible nil) (set_tile "liste_cible" n_bloc_cible) ) (if (/= n_plan_mur nil) (set_tile "liste_mur" n_plan_mur) ) (if (/= n_plan_dessin nil) (set_tile "liste_dessin" n_plan_dessin) ) ;; que se passe-t-il lorsque l'on clique sur OK ? (action_tile "accept" "(action_accept_cible)" ) (start_dialog) ;; recuperation des valeurs (setq nom_bloc_cible (nth (atoi n_bloc_cible) liste_bloc)) (setq nom_plan_mur (nth (atoi n_plan_mur) liste_layer)) (setq nom_plan_dessin (nth (atoi n_plan_dessin) liste_layer)) (unload_dialog dcl_id) ;; --------------------------------------------------------------- ;; gestion des cibles ;; ouverture d'un fichier (setq fichier (open "c:\\prog_las\\mark_1.dat" "w")) ;; cela serait beaucoup mieux, mais je ne sais pas comment le faire marcher ;; ( setq selection ( ssget "X" '(( 2 . nom_bloc_cible )) ) ) (prompt "\nVeuillez sélectionner les blocs (cibles) à exporter dans mark_1.dat") (setq selection (ssget '((0 . "INSERT")))) ;; parcours de la selection (setq i 0) (setq n (sslength selection)) ;; indice dans le fichier (setq j 0) ;; parcours des entites (while (< i n) (setq entite (entget (ssname selection i))) ;;if ( /= ( cdr ( assoc 2 entite ) ) nul ) (setq nom_bloc (cdr (assoc 2 entite))) (if (= nom_bloc nom_bloc_cible) (progn (setq x (cadr (assoc 10 entite))) (setq y (caddr (assoc 10 entite))) (setq theta (cdr (assoc 50 entite))) ;; ecriture dans le fichier (setq j (+ j 1)) (write-line (strcat (itoa j) " " (rtos x) " " (rtos y) " " (rtos (/ (* 180 theta) 3.1415926)) " " " 1 1" ) fichier ) ) ) (setq i (+ i 1)) ) (close fichier) ;; ------------------------------------------------------------------ ;; gestion des murs ;; ouverture d'un fichier (setq fichier (open "c:\\prog_las\\mur.txt" "w")) (export_trait nom_plan_mur) (close fichier) ;; ------------------------------------------------------------------ ;; gestion du dessin sur le plan ;; ouverture d'un fichier (setq fichier (open "c:\\prog_las\\dessin.txt" "w")) (export_trait nom_plan_dessin) (close fichier) ) ;; ------------------------------------------------------------------------- ;; revoie true si caractere est un separateur ;; parametres ;; aucun ;; valeur retournee : ;; aucune (defun separateur (char) (or (= char (ascii " ")) (= char (ascii "\n")) (= char (ascii "\t")) (= char 13) (= char 10) ) ) (setq script_init 0) (command "ATTREQ" 1) (command "ATTDIA" 1) ;; force saisie attributs insertion bloc ;; ------------------------------------------------------------------- ;; affichage de depart (princ "\nScripts Laser LASER.LSP v8.0 NMB (c)2001-2010 B.A Systemes. Chargement OK" ) (princ "\n Traj: (VT) (SC) (CL) Cibles: (CIBLE):Export. cibles murs" ) (princ) ;; Creates here the list for the acisses in the curve (20 points) (setq ss (list)) (setq s 0.0) (while (<= s 1.001 ) (setq ss (append ss (list s) )) (setq s ( + s 0.05 ) ) ) ;; default values ;; simulation (setq s_empattement "2000" ) ;; cibles (setq n_bloc_cible ( itoa_safe ( cherche_liste ( liste_mot_clef "BLOCK" ) "ba-cible") ) ) (setq n_plan_mur ( itoa_safe ( cherche_liste ( liste_mot_clef "LAYER" ) "ba-laser-mur") ) ) (setq n_plan_dessin ( itoa_safe ( cherche_liste ( liste_mot_clef "LAYER" ) "ba-trajectoire") ) ) ;; ecriture du fichier magnet.txt (defun export_magnet () (setq fichier (open "c:\\prog_las\\magnet.txt" "w")) (if (= nom_bloc_magnet nil) (setq nom_bloc_magnet (getstring "\n Nom du bloc magnet :")) ) ;; liste_magnet sort ( ID, Enabled, X, Y, theta) (foreach magnet (liste_magnet) (progn ;; ID (princ (nth 0 magnet) fichier) (princ " " fichier) ;; x (princ (nth 2 magnet) fichier) (princ " " fichier) ;; y (princ (nth 3 magnet) fichier) (princ " " fichier) ;; Enabled (princ (nth 1 magnet) fichier) (princ "\n" fichier) ) ) (close fichier) (princ "\nExportation magnet terminee") )
  3. Bingo ! dans useri1 ! merci a+ gégé
  4. Finalement si, j'ai une question ... Est-ce que l'on peut récupérer l'information sur l'echelle du dessin Covadis quelque part ? rien vu dans les dictionnaires. a+ gégé
  5. Salut à toutes et a tous, Lorsque l'on change d'échelle, on peut demander la mise à jour des points topographiques (entre autres). le résultat est prévisible, les bloc, et leurs attribut réduisent ou grossissent, c'est selon. ce qui est plus surprenant, c'est que l'echelle du bloc (en X,Y et Z) ne change pas. Covadis agit donc directement sur la définition du bloc. c'est assez curieux comme procédé, et ça a inconvénient de réinitialiser la position des attributs. Post curieux également, mais au départ c'était une question, et j'ai trouvé la réponse en la rédigeant, comme souvent ... a+ Gégé
  6. Salut vieux Crabe, C'est terrible, je vois bien que je ne contribue que pour me plaindre ! et je n'ai que 50 ans ! Tu imagines dans 10 ans ! je serais blacklisté sur ce qui remplacera cadXp, les jeunes m’empecheront de m'inscrire ! (Oh non ... pas ce vieux bougon ...) A 1 mois de la retraite, tu t'en sort plutôt bien ... a+, gégé
  7. Salut Olivier, C'est tout à fait vrai pour un projet VRD, et c'est très difficile a faire comprendre, si on a 5mm de pente, le GPS révèle des contre pentes imaginaires. La ce n'était pas le cas, on était dans l'Isère, avec des bonnes pentes, et lorsqu'on utilise ces z cartographiques, à l'echelle de 40 communes, c'est pour faire un modèle hydraulique ou on utilise que les noeuds de réseau, donc un regard tous les 200m en moyenne, donc l'erreur du gps en z devient très négligeable, même avec des pentes très faibles. Comme le dit 'aucun', avec un cctp comme ça, ils te tiennent, et surtout, ils peuvent choisir leur lauréat. si on est pas souhaité, c'est dangereux de répondre avec une précision comme ça. D'ailleurs, vu certains prix pratiqués, ça ne peux se faire qu'en ouvrant que les regards situés aux croisements, et en inventant les fiches des autres regard, et en interpolant les pentes. Un jour, quelqu'un m'a parlé de géoréférencement à l'ortho-photo ! (bon il étéit peut être un peu parano, je sais pas ..) J'ai un jour chronométré les impondérables, et démontré que le prix demandé ne pouvait correspondre à aucune réalité. (le temps de poser la signalisation, d'ouvrir un tampon, de faire les mesures, et de le refermer: sans parler des recettes propres à une entreprises) Le client en a convenu, car il savait très bien lui même le temps qu'il mettait pour faire ce travail. mais ce qu'ils veulent, c'est pointer la case "Classe A des réseaux" au meilleur prix: En fait, ils achètent l'assurance décénale du prestataire. Que le plan soit faux n'est plus leur problème, puisqu'ils ont fait ce que demande la reglementation. Regardez dans les rues les tracés de réseaux secs, avec des réseaux souple en classe A avec un rayon inférieur à 50 cm: comment font ces magiciens ? Il voient à travers le goudron ? a+, gégé
  8. Salut, Ces CCTP réalisés par des "géomaticiens" fraichement sortis de l'école sont souvent délirants. le dernier AO auquel j'ai répondu, le MCD (Modèle Conceptuel de Données, SIC!) comportait plus de 150 couches, chacune ayant au moins une centaine de champs à remplir ! était-ce le SIG de New-York, de Pékin ? Non c'était une commune touristique de haute savoie ... Pour le coude de changement d'altitude, je les défendrais néanmoins: C'est pas si compliqué à représenter, et c'est vraiment utile dans un récolement... Dans le palmarès des CCTP stupides, le géoréférencement d'un réseau d'assainissement (200 km quand même) avec une tolérance de 1 cm en Z ! Quand les stations permanentes du réseau IGN atteignent péniblement le 5 mm ... bon je deviens vraiment bougon ... a+, gégé
  9. Autodesk pousse la stratégie d'abus de position dominante. C'est assez dangereux, parce que leur dernier produit phare, Revit, ne fait vraiment pas l'unanimité. Ils devraient regarder ce qui s'est passé pour Microsoft, qui semblait tout destiné à équipé tous les matériels informatiques, et notamment les téléphones. Qui aujourd'hui a un téléphone Windows ? Cette stratégie marche avec les dinosaures, mais pas avec les jeunes, nés avec l'informatique, et qui passent sans aucun pb de windows, android, apple et même Xperia ! Ils savent se servir de tous les systèmes! donc ils s'en foutent de la position dominante. Mon employé dessine les formes compliquées en 3d sur Freecad, un gratuiciel qu'il a téléchargé et utilisé aussitôt ! il importe ensuite le Step dans AutoCAD, puis le DWG dans Revit ! Le logiciel, la marque, il s'en fout ! Et du coté des entreprises, ça grince. Revit coute cher, en licences, en formation, pour un résultat qui n'est pas à la hauteur des espérances. Dans le BE béton ou travaille ma femme, qui est maintenant un des plus gros de France, Revit remplace Autocad LT : En terme de cout au poste, on change d'échelle. sauf que le rendu plan papier, ils n'arrivent pas à en avoir un satisfaisant directement. J'en ai fait l'expérience moi même, pas possible d'avoir un plan papier qui correspond à 100% a nos critères sans le retoucher manuellement. J'ai été un client fidèle depuis 1995, mais là je quitte le navire. on verra ce qui adviendra. a+ gégé
  10. Cher Décapode en attente de retraite, C'est quoi le FlexLM ? moi j'ai deux suites "abonnement" (Building et Infrastructure) a+, gégé
  11. salut Zebulon C'est simplement l'affichage des cartes et photos aériennes, qui marche avec ton identifiant d'abonnement. Je pense que je vais faire comme toi, d'autant plus que d'ici 4 à 5 ans, Covadis aura certainement son propre moteur graphique, et les clones de Revit existeront. a+ gégé
  12. Salut Zebulon, est-ce que tu as fait le saut ? comment ça se passe avec les licences perpétuelles sans l’abonnement ? par exemple pour Bingmap ? a+ gégé
  13. Génial, je ne savais même pas qu'on pouvais préciser le site dans lequel chercher avec un moteur de recherche ! a+ Gégé
  14. GEGEMATIC

    LISP pour "Géocodif"

    Salut, @Francis: le code de Didier, qu'il a volontairement simplifié, devrait marcher avec toutes les version d'Autocad bien gentiment (peut être le command a remplacer par command-s ?) c'est un très bon point d'entrée pour le lisp, tu n'a plus qu'a multiplier et adapter les: ((= "11" (cdr (assoc 1 (entget testatt))))(command "_-insert" "$poub1" (cdr (assoc 10 (entget bloc))) "" "" "")) a chacun de tes codes. ensuite tu trouvera ça fastidieux et tu cherchera comment le faire a partir d'une liste plus facile a éditer, et puis a partir d'un fichier externe accessible avec le bloc note, ensuite avec excel ... C'est le lisp, il faut commencer petit et se laisser dériver ... @Lilian Je n'ai jamais compris les gens qui refusent la codification* (il en reste énormément ! il notent le numéro de pt, et ce que c'est, à la main, sur un carnet papier !) mais on a jamais trouvé assez efficace la géocodification* proposée par covadis (la seule qu'on ait testée et utilisée) en fait, quand les point sont codifiés, les habiller au bureau va souvent plus vite que les géocodifier sur le terrain.** * c'est ma convention: codification: codage uniquement du point, géocodification : codage du point et dessin d'entités. ** un gars qui est sur le terrain tous les jours, et qui connait les codes par cœur, ne sera pas de mon avis. comme tout, ça se discute, mais notre orientation est de limiter le temps sur le terrain par rapport au bureau, en cherchant le bon compromis. @Olivier Jamais pensé à utiliser map pour ça ! Je vais faire des tests quand même, mais maintenant, dans notre flux, on passe par Qgis, car cet $£%#@ de map n'est pas capable d'importer un fichier de point csv personnalisé, alors on utilise qgis pour passer de csv à shapes, et on en profite pour vérifier les codes. a+ Gégé
  15. Salut à tou.tes.s (je sais pas si c'est vraiment comme ça qu'il faut l'écrire ...) J'aime bien ce sujet, ce qui m'a fait rire, c'est que j'ai eu les même galères qu'Olivier ! je suis à 6mn de mon bureau, donc pas de gros bonus écologique. mais la 1ère semaine de confinement, le trajet pour le bureau foutait les jetons, aucune voiture, avec 2 ou 3 fois les flics au rond point, ambiance d'occupation. mon quartier, assez animé d'habitude, devenu complètement désert, plus de boulangerie, une épicerie paranoïaque où tu fait la queue, plus de petit noir au comptoir. Je me suis dit que s'ils déclaraient le couvre feu, je serais bloqué chez moi sans ordi (le seul portable assez puissant, je l'avais passé à mon employé pour télétravailler). donc j'ai migré chez moi. Moi et ma femme en télétravail, et 2 de mes filles en télé-études, la très vieille freebox a explosée. l'imprimante à lâchée aussi, la chaise de bureau s'est révélée inconfortable, le nombre de prise rj45 a vite été insuffisant, j'ai donc du changer de box, acheter un nouvelle mutifonction, rajouter des prises ethernet, un hub ... j'avais ma clef covadis, mais elle ne marchait plus en mode monoposte ! des heures de galères pour mettre à jour un profil ! Conférence zoom prévue (panique !): le kit main libre ne marche pas: je vais acheter un kit casque micro : marche pas non plus ! seul un vieux portable hp pavillon avec web cam fera l'affaire, c'était moins une ... mais tout prends du temps. Il manque toujours un truc resté au bureau. La compta qui me prend une heure d'habitude, me prend 3 heures. Pas de serveur distant, donc l'échange de fichiers super galère avec un drive, lenteur exaspérante ... mais sinon c'est fabuleux d'être chez soi en famille, j'en goute chaque minute. Rapidement, je me mets à dérailler: 22h, 23h, minuit tiens c'est dimanche mais il ne fait pas beau ... donc retour au bureau. Mais je vais organiser la possibilité de télétravail pour de petites périodes: serveur NAS, portables puissants avec station d'accueil. ça a toujours été mon rêve, travailler dans une caravane ... PS: Je trouve zoom beaucoup plus facile à configurer et a comprendre que teamviewer ... a+ Gégé
  16. GEGEMATIC

    type de ligne talus

    Salut tu la colle dans un fichier texte, et tu l'enregistre avec l'extension ".lin" ensuite tu charge le type de ligne depuis ce fichier. a+ Gégé
  17. GEGEMATIC

    type de ligne talus

    salut, il faut que standard soit défini avec "txt.shx" *g-eaux_Talus,Talus _|!|!|!|!|! A,0.2,["|",STANDARD,S=1.00],0.2,["|",STANDARD,S=0.2],0.2,["|",STANDARD,S=0.2],0.2,["|",STANDARD,S=0.2],0.2,["|",STANDARD,S=0.2] a+ gégé
  18. Salut à toutestous, je profite de ce post "3d" pour poser une autre question: Certaines commande 3d changent le scu de la vue, et ne le remettent pas comme il était. c'est un bug chez moi, ou une mauvaise manip, ou ça vous arrive aussi ? a+ Gégé
  19. GEGEMATIC

    site INERIS en rade

    Oui c'est tout bon, ça marchait dès hier soir ... merci à tous !
  20. GEGEMATIC

    site INERIS en rade

    Salut Crabounet, tu as déposé le site toi même ? car apparemment il existe ! il serait même dangereux ! a+, gégé
  21. GEGEMATIC

    site INERIS en rade

    salut à toutes et à tous, https://www.reseaux-et-canalisations.ineris.fr/ ne répond plus. C'est pour poser ses demandes de DT DICT l'avez-vous déjà remarqué ? si oui depuis quand ? ou alors, y a un autre site ? a+ Gégé
  22. GEGEMATIC

    2 ans de piratage

    Fraid, tu as raison, mon site PowerClic je l'avais fait en php moi même avec les bandeaux hg/BD comme c'était la mode à l'époque. il n'a jamais posé de problème. Le 1er site G-eaux était du pur HTML, pas de pb non plus. puis j'ai succombé aux sirènes de la modernité ... et j'ai délégué ! Catastrophe ! Le site G-eaux.fr est de nouveau en pur html, je pensais simplement basculer g-eaux.com vers g-eaux.fr, mais il semble que ce soit plus compliqué, donc en attendant, je dois maintenir g-eaux.com ... a+ gégé
  23. salut à tous, 2 ans que mon site est régulièrement piraté. mon "webdisigner" était impuissant, j'ai fini par mettre les mains dans le cambouis. changer tous les mots de passe, mettre à jour wordpress et php, enfin faire tout ce qui aurait du l'être... mais quand même: c'est revenu tous les sites qui proposent une pseudo-vérification ne trouvaient rien. moi j'avais repéré 2 3 trucs, mais il en manquait: donc voici un lien intéressant: piratage wordpress je ne suis pas sur d'être sorti d'affaire, mais au moins je comprends mieux ... a+ gégé
  24. GEGEMATIC

    Made in France

    Salut, confinement + pluie, je me mets à vouloir numériser de vieilles VHS. Il y a qq temps, j'ai demandé à un copain s'il lui restait un magnétoscope. Il en a trouvé 3 à coté des poubelles de stations dont il s'occupe, et me les a amenés. Brandt, philips et Panasonic. Le Panasonic paraissait assez cossu, mais avec des touches usées par l'utilisation. J'ai voulu tester les 3 et garder le meilleur. Seul le panasonic marchait comme au 1er jour. Les 2 autres ne marchaient plus (problème mécanique de chargement de la cassette) J'ai regardé la fabrication, le Panasonic "made in france" rien sur le philips (mais au poids plume je pense pas que c'était du hollandais) et le brandt en thaillande. Il y a 20 ans, on fabriquait de l'électronique grand public de qualité en France, qui s'en souvient ? et un appareil pouvait fonctionner plus de 20 ans ! a+ Gégé
  25. GEGEMATIC

    Palette d'outil

    Salut Fraid, je te suis à 100% pour la modif directe des xpt en xml avec Notepad++ parceque c'est vrais que personnaliser et mettre à jour ces palettes, ça peut être vraiment barbant ... Notepad++ est un auxiliaire indispensable d'Autocad. Pour écrire et charger des xpt, l'interface Autocad est (était ? ça s'est peut être amélioré ?) tellement contre intuitive que j'ai du me faire un aide mémoire avec capture d'écran ! Pour l’anecdote sur mon passé trop chargé, l’ancêtre des palettes d'outils avec PowerClic: http://www.g-eaux.com/powerclic/download/PowerClicPannel.JPG Fonctionnalité (toujours d'actualité) qui date de 1997 et qui fonctionnait sous Dos, windows et Unix ! On peut la personnaliser en choisissant une entité, puis en zoomant dessus (du coup on peut la voir dans son environnement) mais aussi en éditant le fichier lisp associé. On peut également choisir ce qui est gardé des propriétés de l'entité source (par exemple, on prend un texte, on veut imposer son style mais pas sa hauteur) Mais on peut également choisir de lancer une commande lisp. On fait ce qu'on veut. Toutes les caractéristiques sont stockées dans un dwg externe au dessin. Le point fort par rapport aux palettes est la liberté de zoom, d'icone. Il y a de la place, car chaque thème à 7 palettes de 18 icones, et le nombre de thèmes est illimité. Mais je n'étais pas le 1er, Matrox fournissait un truc similaire avec ses cartes vidéos, le fameux "menu carte" avec le birds eye ... que j'ai vu en 1991 ! a+ gégé
×
×
  • 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é