Aller au contenu

Messages recommandés

Posté(e)

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 .....

 

 

 

 

 

 

 

Posté(e)

une habitude dans mes programmes

au 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

Posté(e)

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 )

Posté(e)

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

 

./__\.
(.°=°.)
Posté(e)

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 ....................................

Posté(e)

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;

}

 

}

}

 

 

 

 

Posté(e)

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 ....

 

Posté(e)

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

Posté(e)

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

Posté(e)

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

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • 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é