Aller au contenu

prob les cotes ne sont pas exacte


Messages recommandés

Posté(e)

Bonjour,

 

 

j'essais de faire un "programme" qui permettrai de faire une bande de 90mm de largeur avec au milieu de cette bande 4 cercles

soit la bande fait un "coude" dans ce cas a priori sa marche

soit elle fait un "double coude" dans ce cas uniquement une des trois bande a ses cotés parallèle les 2 autres ne sont pas parallèle et elles ne font pas 90 de large mais 90 et des poussières

 

(defun c:cli (/	   nbr	C1   C2	  C3   C4   A1	 A2   A3   Q	MQ
      CT   P1	P2   P31  P32  P41  P42	 P71  P72  P81	P82
      P5   P6	P3   P4	  P7   P8   P61	 P62  S1   S2	S3
      S4   S5	i    nom
     )
 (setq nbr (getint "nombre de branche, 2 ou 3 ?"))
 (setq C1 (getpoint "1er point"))
 (setq C2 (getpoint "2eme point"))
 (setq C3 (getpoint "3eme point"))
 (setq C4 (getpoint "4eme point"))
 (setq A1 (angle C1 C2))
 (setq A2 (angle C2 C3))
 (setq A3 (angle C4 C3))
 (setq Q (/ pi 2.0))
 (setq MQ (* (/ 3.0 2.0) pi))
 (setq ct 90.)
 (if (= nbr 3)
   (progn
     (Setq P1 (polar C1 (+ A1 MQ) 45.))
     (setq P1 (polar P1 (+ A1 pi) 40.))
     (Setq P2 (polar P1 (+ A1 Q) ct))
     (setq P31 (polar C2 (+ A1 Q) 45.))
     (setq P32 (polar (polar C2 A1 40.) (+ A2 Q) 45.))
     (setq P41 (polar (polar C3 A3 40.) (+ A2 Q) 45.))
     (setq P42 (polar C3 (+ A3 MQ) 45.))
     (setq P71 (polar C3 (+ A3 Q) 45.))
     (setq P72 (polar P41 (+ A2 MQ) ct))
     (setq P81 (polar P32 (+ A2 MQ) ct))
     (setq P82 (polar C2 (+ A1 MQ) 45.))
     (Setq P5 (polar C4 (+ A3 MQ) 45.))
     (setq P5 (polar P5 (+ A3 pi) 40.))
     (Setq P6 (polar P5 (+ A3 Q) ct))
     (setq P3 (inters P2 P31 P32 P41 nil))
     (setq P4 (inters P32 P41 P42 P5 nil))
     (setq P7 (inters P6 P71 P72 P81 nil))
     (setq P8 (inters P72 P81 P82 P1 nil))
     (command "dimaligned" P1 P2 (polar P1 (+ A1 pi) ct))
     (command "dimaligned" P2 P3 (polar P2 (+ A1 Q) ct))
     (command "dimaligned" P3 P4 (polar P3 (+ A2 Q) ct))
     (command "dimaligned" P4 P5 (polar P4 (+ A3 MQ) ct))
     (command "dimaligned" P5 P6 (polar P5 (+ A3 pi) ct))
     (command "cercle" C1 "10")
     (setq s1 (entlast))
     (command "cercle" C2 "10")
     (setq s2 (entlast))
     (command "cercle" C3 "10")
     (setq s3 (entlast))
     (command "cercle" C4 "10")
     (setq s4 (entlast))
     (command "polylign" P1 P2 P3 P4 P5 P6 P7 P8 "cl")
     (setq s5 (entlast))
   )
 )
 (if (= nbr 2)
   (progn
     (Setq P1 (polar C1 (+ A1 MQ) 45))
     (setq P1 (polar P1 (+ A1 pi) 40))
     (Setq P2 (polar P1 (+ A1 Q) 90))
     (setq P31 (polar C2 (+ A1 Q) 45))
     (setq P32 (polar C3 (+ A3 MQ) 45))
     (setq P61 (polar C3 (+ A3 Q) 45))
     (setq P62 (polar C2 (+ A1 MQ) 45))
     (Setq P4 (polar C4 (+ A3 MQ) 45))
     (setq P4 (polar P4 (+ A3 pi) 40))
     (Setq P5 (polar P4 (+ A3 Q) 90))
     (setq P3 (inters P2 P31 P32 P4 nil))
     (setq P6 (inters P5 P61 P62 P1 nil))
     (command "dimaligned" P1 P2 (polar P1 (+ A1 pi) ct))
     (command "dimaligned" P2 P3 (polar P2 (+ A1 Q) ct))
     (command "dimaligned" P3 P4 (polar P3 (+ A2 Q) ct))
     (command "dimaligned" P4 P5 (polar P4 A2 ct))
     (command "cercle" C1 "10")
     (setq s1 (entlast))
     (command "cercle" C2 "10")
     (setq s2 (entlast))
     (command "cercle" C3 "10")
     (setq s3 (entlast))
     (command "cercle" C4 "10")
     (setq s4 (entlast))
     (command "polylign" P1 P2 P3 P4 P5 P6 "cl")
     (setq s5 (entlast))
   )
 )
 (setq i 1)
 (while (tblsearch "BLOCK"
	    (setq nom (strcat "éclisse spé_" (itoa i)))
 )
   (setq i (1+ i))
 )
 (command "-bloc" nom C1 S1 S2 S3 S4 S5 "")
 (command "-inserer" nom C1 1 1 0)
)

 

 

Posté(e)

Salut,

 

Je n'ai pas le temps d'étudier en profondeur ton code ce matin, mais tu peux essayer d'appliquer la règle d'or qui veut que quand on utilise command pour dessiner des entités, on désactives les accrochages aux objets.

 

Soit à chaque appel de la fonction command ("_non" ou "auc" pour une version française correspond à "aucun" accrochage):

(command "dimaligned" "_non" P1 "_non" P2 "_non" (polar P1 (+ A1 pi) ct))

 

Soit en mettant la variable OSMODE à 0 après avoir stocké sa valeur en début de code pour pouvoir la restaurer à la fin :

 

(setq accrobj (getvar "OSMODE"))
(setvar "OSMODE" 0)

;; ici le code avec les appels à command

(setvar "OSMODE" accrobj)

 

 

 

PS : Quand tu postes du code, pour le rendre plus lisible utilise les bbcodes :

 

[surligneur][[/surligneur][surligneur]code[/surligneur][surligneur]][/surligneur] ici le code [surligneur][[/surligneur][surligneur]/code[/surligneur][surligneur]][/surligneur]

 

donne :

 ici  le code 

 

Accessible via l'icône [#] :

http://img94.imageshack.us/img94/8380/bbcode.png

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Re,

 

J'ai fait quelques tests même si je ne comprends pas bien ce qu'est censé faire la routine suivant qu'on choisisse 2 ou 3 branches.

 

J'ai effectivement vu un problème avec l'option 3 branches qui semble plus dû à un problème de géométrie qu'à un problème de LISP proprement dit.

 

Si j'ai bien compris, les points de références sont des prolongement de 40 unités des segments C1 C2 et C4 C3. Or tu calcules tes points à partir de ceux-ci mais en utilisant les perpendiculaires à l'angle du segment C2 C3 au lieu de celles à l'angle décris par ces deux points de référence.

 

En espérant avoir été clair.

 

PS : ceci n'enlève rien à ce que j'ai dit précédemment concernant les accrochages aux objets

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é