cadpolo Posté(e) le 3 octobre 2006 Posté(e) le 3 octobre 2006 Salut .... :) Voila j'ai fait un code qui me permet de dessiner un profilé metallique type IPE...Donc j'ai un rectangle et deux ligne en pointillé de part et d'autre de mon axe ( Pour ceux qui ne savent ce qu'est un profilé )L'exemple type : [surligneur] (setvar "osmode" XXX ) (setq sp (getpoint "\n Point : ")) (setq ep (getpoint "\n Point suivant : " sp)) (setq pangle (angle sp ep)) (setq plength (distance sp ep)) (setq angp90 (+ pangle (dtr 90))) (setq angm90 (- pangle (dtr 90)))[/surligneur] Pour tracer mon rectangle : j'utilise ça : [surligneur] (command "polylign" sp (setq p2 (polar sp angm90 (/ width 2))) (setq p3 (polar p2 pangle plength)) (setq p4 (polar p3 angp90 width)) (setq p5 (polar p4 (+ pangle (dtr 180)) plength)) "clore") );;fin de command [/surligneur] La largeur width est donné par un tableau sous forme de cond ... Et pour tracé mes deux lignes de part et d'autres de mon axe : [surligneur] (setq sp1 ( polar sp angm90 (* width 0.05))) (setq ep1 (polar sp1 pangle plength )) (setq sp2 ( polar sp angp90 (* width 0.05))) (setq ep2 (polar sp2 pangle plength ))[/surligneur] [surligneur] (command "ligne" sp1 ep1 "") (command "ligne" sp2 ep2 "")[/surligneur] Ben suivant le type d'accrochage Osmode 672 : intersection,proche,perpendiculaire . Ca part en vrille j'ai mon rectangle et mes deux lignes sur le meme axe de saisie de point SP et EP Et si je n'utilise aucun point d'accrochage il me le trace correctement .... Effectivement, en travaillant en metre meme si ce nest pas l'unite du metalll...j'ai des dimension Ex : pour un IPE 80 la largeur est de 0.046 .... Ben justement avec les accrochages osmode 672 ... ne marche et sans accrochage me le trace correctement ..... Pour simplifiez comme j'ai été très long la saisie des points peux t'on la gérer .....
tiboulen Posté(e) le 3 octobre 2006 Posté(e) le 3 octobre 2006 une habitude dans mes programmesau debut je recupere la variable active(setq oldosmode (getvar "osmode"))je fixe osmode à 0(setvar "osmode" 0)à la fin du programme je recupere ma variable(setvar "osmode" oldosmode)that is all
cadpolo Posté(e) le 3 octobre 2006 Auteur Posté(e) le 3 octobre 2006 Tiboulen..Je te remercie pour tes renseignements, mais il ne s'agit pas d'un Pb d'accorchage et d'initialisation de ces accrochages .Mais l'orsque tu es dans type : Intersection,Proche et Perpend.. Si le Pt de saisie est (0,0,0) en cliquant avec les accrog... il me prend (-0.10 , 0.05 , 0.00 ) au lieu de ci-dessus ....... Il ne s'agit de la sauvegarde des var...OSMODE ... Et si je saise en OSMODE 0, j'ai plus de chance d'avoir mes coordonnées ( 0,0,0 )
Tramber Posté(e) le 3 octobre 2006 Posté(e) le 3 octobre 2006 Tu devrais publier ton code en entier. (/ width 2) Méfies-toi, si width est un entier impair, le calcul sera faux. Tu dois passer OSMODE à zéro, sinon, tes efforts seront vains. Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
cadpolo Posté(e) le 3 octobre 2006 Auteur Posté(e) le 3 octobre 2006 Salut Tramber ...... Que veux tu dire par impair ??????
(gile) Posté(e) le 3 octobre 2006 Posté(e) le 3 octobre 2006 Salut, Impair = non multiple de 2 En LISP :(/ 3 2) retourne 1(/ 3 2.0) ou (/ 3.0 2) ou (/ 3.0 2.0) retournent 1.5 Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
cadpolo Posté(e) le 3 octobre 2006 Auteur Posté(e) le 3 octobre 2006 OUI gile Salut .....j'ai bien compris l'impair du pair ...mais quand tu regardes avec l'espion il te renvois bien un Nb à virgule et non un entier .....Bob demain je vais poster le code en entier ......Pour le tester ......merci les gars ......Tchao ....................................
x13 Posté(e) le 3 octobre 2006 Posté(e) le 3 octobre 2006 http://www.ploetzl.at/tools/autocad/fr_2_02.htm :)
cadpolo Posté(e) le 4 octobre 2006 Auteur Posté(e) le 4 octobre 2006 Salut ....Voici le code en entier sous forme d'ebauche ...... ;;;DESSIN PROFILE METALLIQUE IPE ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun saveVars() ;;;--- Get the selected item from the first list (setq sStr1(get_tile "mylist1")) ;;;--- Make sure something was selected... (if(= sStr1 "") (setq myItem1 nil) (setq myItem1 (nth (atoi sStr1) myList1)) ) ) (defun c:IPE ( / dcl_id) (setq myList1(list "80" "100" "120" "140" "160" "180" "200" "220" "240" "270" "300" "330" "360" "400" "450" "500" "550" "600" )) (setq dcl_id (load_dialog "IPE.dcl")) (if (not (new_dialog "IPE" dcl_id )) (exit) );;;fin de if (start_list "mylist1" ) (mapcar 'add_list myList1) (end_list) ;;;----Si un évenement ce produit, alors faire ces instructions . (action_tile "accept" "(saveVars)(setq ddiag 2)(done_dialog)") (action_tile "cancel" "(setq ddiag 1)(done_dialog)") ;;;--- Affiché la boite de dialogue (start_dialog) ;;;--- Unload the dialog box (unload_dialog dcl_id) ;;;--- Si l'utilisateur clique sur le bouton annulé faire cete action (if(= ddiag 1) (princ "Operation Annulée") ) ;;;--- Si l'utilisateur clique sur le bouton OK faire cete action (if(= ddiag 2) (progn (princ (strcat "\n Vous avez choisis " myItem1 )) (dess_ipe) ) ) (princ) ) ;;;======================================================================;;;====================================================================== (defun dtr (a) (* pi (/ a 180.0)) ) ;;;======================================================================;;;====================================================================== (defun Util_layer () (if (not (tblsearch "LAYER" "_CM_STRUCTURES")) (command "-calque" "E" "_CM_STRUCTURES" "CO" "4" "" "") )(if (not (tblsearch "LAYER" "_CM_STRUCTURES_TXT")) (command "-calque" "E" "_CM_STRUCTURES_TXT" "CO" "4" "" "") ) (if (not (tblsearch "style" "_AnnotationIPE")) (command "-style" "_AnnotationPP" "romans" "0" "0.6" "0" "N" "N" "N" "") ) );;;======================================================================;;;====================================================================== (defun TP_ligne () (setvar "filedia" 0 ) (if (not (tblsearch "LTYPE" "cache2")) (command "-typeligne" "ch" "cache2" "" "" "") ) ) ;;;======================================================================;;;====================================================================== (defun COND_MYLIST () (cond (( = myItem1 "80") (setq width 0.046)) (( = myItem1 "100") (setq width 0.055)) (( = myItem1 "120") (setq width 0.064)) (( = myItem1 "140") (setq width 0.073)) (( = myItem1 "160") (setq width 0.082)) (( = myItem1 "180") (setq width 0.091)) (( = myItem1 "200") (setq width 0.10)) (( = myItem1 "220") (setq width 0.11)) (( = myItem1 "240") (setq width 0.12)) (( = myItem1 "270") (setq width 0.135)) (( = myItem1 "300") (setq width 0.15)) (( = myItem1 "330") (setq width 0.16)) (( = myItem1 "360") (setq width 0.17)) (( = myItem1 "400") (setq width 0.18)) (( = myItem1 "450") (setq width 0.19)) (( = myItem1 "500") (setq width 0.20)) (( = myItem1 "550") (setq width 0.21)) (( = myItem1 "600") (setq width 0.22)) );fin de cond COND_MYLIST ) ;;;======================================================================;;;====================================================================== (defun rect_util () (setvar "osmode" 512 ) (setq sp (getpoint "\n Premier point : ")) (setq ep (getpoint "\n Point suivant : " sp)) (COND_MYLIST) ;;; (setvar "osmode" 512 ) ;;;;(setq width (getdist "\n Largeur du profilé : ")) (setq pangle (angle sp ep)) ;;Retourne l'angle entre sp ep par rapport a X (setq plength (distance sp ep)) ;;Calcul la longueur entre ces deux points (setq angp90 (+ pangle (dtr 90))) ;;Définit un positif et Convertit l'angle 90 en radian (setq angm90 (- pangle (dtr 90))) ;;Définit un négatif et Convertit l'angle 90 en radian (setq sp1 ( polar sp angm90 (* width 0.05))) ;;Point de départ de la ligne (setq ep1 (polar sp1 pangle plength )) ;;Point d'arrivé (setq sp2 ( polar sp angp90 (* width 0.05))) ;;Point de départ de la ligne (setq ep2 (polar sp2 pangle plength )) ;;Point d'arrivé ) ;;;======================================================================;;;====================================================================== (defun dess_rect () (command "polylign" sp (setq p2 (polar sp angm90 (/ width 2))) (setq p3 (polar p2 pangle plength)) (setq p4 (polar p3 angp90 width)) (setq p5 (polar p4 (+ pangle (dtr 180)) plength)) "clore") ) ;;;======================================================================;;;====================================================================== (defun dess_Ligne () (command "ligne" sp1 ep1 "") (command "ligne" sp2 ep2 "") ) ;;;======================================================================;;;====================================================================== (defun Annotation_txt () (setq old_osmode (getvar "osmode")) ( if ( <= plength 1.00) (progn (setq pt1 (polar sp pangle (* plength 0.12))) (setq pt2 (polar pt1 angp90 (+ (/ width 2)0.05))) (setq pt3 (polar pt2 pangle 0.36)) );;fin plength =< 1.00 (progn (setq pt1 (polar sp pangle (* plength 0.40))) (setq pt2 (polar pt1 angp90 (+ (/ width 2)0.05))) (setq pt3 (polar pt2 pangle 0.46)) );;fin de progn > 1.00 );;fin de if (setvar "clayer" "_CM_STRUCTURES_TXT" ) (setvar "cecolor" "3" ) (command "texte" pt2 "0.16" (angtos pangle 0 8) "IPE" "") (setvar "cecolor" "Ducalque" ) (command "texte" pt3 "0.12" (angtos pangle 0 8) myItem1 "") ) ;;;======================================================================;;;====================================================================== (defun dess_ipe () (command "_.undo" "_begin") (setq old_layer (getvar "clayer")) (setq old_osmode (getvar "osmode")) ( setq old_celtype (getvar "celtype")) ( Util_layer ) ( rect_util ) (setvar "clayer" "_CM_STRUCTURES" ) (setvar "cecolor" "Ducalque" ) (setvar "celtype" "Ducalque" ) ( dess_rect ) (setq old_celtscale (getvar "celtscale")) ( TP_ligne ) (setvar "celtype" "cache2" ) (setvar "celtscale" 0.02 ) (setvar "cecolor" "5" ) ( dess_Ligne ) (setvar "celtype" old_celtype ) (setvar "celtscale" old_celtscale ) ( Annotation_txt ) (setvar "filedia" 1) (command "_.undo" "_end") ) Et le code DCL IPE : dialog { label = "CHOIX DU TYPE DE PROFILE"; : column { : popup_list { key = "mylist1"; label = "IPE"; fixed_width_font = true; width = 20; value = "0"; } } : boxed_row { : button { key = "accept"; label = "OK"; is_default = true; } : button { key = "cancel"; label = "ANNULEE"; is_default = false; is_cancel = true; } } }
cadpolo Posté(e) le 4 octobre 2006 Auteur Posté(e) le 4 octobre 2006 Re....Bon ....Je pense qu'un exemple parlera mieux, comment peux t'on coller une image ...Mais Tramber et gile La valeur de width est de 0.00 et j'ai aussi rajouter un (rtos (setq width 0.064) 3 3) qui normalement devrais garder les trois chiffres après la virgule ..... Eh ben NON ça marche bien que si Osmode est à 0 .Malheureusement je ne peux tracer sans accrochage aux objets ....
(gile) Posté(e) le 4 octobre 2006 Posté(e) le 4 octobre 2006 La valeur de width est de 0.00 et j'ai aussi rajouter un (rtos (setq width 0.064) 3 3) qui normalement devrais garder les trois chiffres après la virgule ..... Eh ben NON ça marche bien que si Osmode est à 0 .Malheureusement je ne peux tracer sans accrochage aux objets .... ??????????????? :casstet: :casstet: :casstet: Je ne pense pas qu'il y ait de rapport entre la valeur de OSMODE et le nombre de décimales affichées par (rtos ...) Je comprends que tu aies besoin d'accrochages aux objets pour desssiner ou lors des (getpoint ...).Mais lorsqu'on utilise des (command ...) pour créer des objets graphiques il est quasi impératif de désactiver les accrochages. Tu peux stocker la valeur courante dans une variable locale, désactiver tous les accochages avant de faire les (command ...), puis restaurer la valeur initiale après : (setq os (getvar "osmode")) ; stocker(setvar "osmode" 0) ; désactiver(command ...)(command ...)(setvar "osmode" os) ; restaurer On peut aussi désactiver les accrochages en ajoutant 16384 à la valeur courante. (setvar "osmode" (+ (getvar "osmode") 16384)) ; désactiver(command ...)(command ...)(setvar "osmode" (+ (rem (getvar "osmode") 16384) 16384)) ; restaurer Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
cadpolo Posté(e) le 6 octobre 2006 Auteur Posté(e) le 6 octobre 2006 Salut ....Gile Je vais essayer ça ...... Tchao .....
cadpolo Posté(e) le 8 octobre 2006 Auteur Posté(e) le 8 octobre 2006 Re les mecs .....Ben Gile tu as raison, ça marche en désactivant osmode ....Mais ce n'est pas normal qu'on doive désactivé osmode , vu que l'on a déja rentré les points de coordonnées .....Bon ça marche .... Salut et merci
(gile) Posté(e) le 8 octobre 2006 Posté(e) le 8 octobre 2006 Mais ce n'est pas normal qu'on doive désactivé osmode , vu que l'on a déja rentré les points de coordonnées Avec la fonction (command ...), suivant les valeurs de APERTURE et de zoom, si les coordonnées d'un point se trouvent être proche d'un accrochage actif c'est l'accochage qui prime (comme quand OSNAPCOORD est à 0). C'est pourquoi l'utilisation de cette fonction pour créer des entités graphique nécessite de désactiver les accrochages. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant