Aller au contenu

Bug? Traçage en 3d d\'un cube


Messages recommandés

Posté(e)

Bonjour à tous, je suis nouveau.

 

J'ai fait un petit programme en Lisp qui trace un cube à partir de 2 points opposés, disons (0,0,0) et (1,1,1). Le voici: (nommez le fichier disons cucube.lsp)

 

(defun cucube (cp0 cp7)

 

(setq cp1 (list (car cp0) (cadr cp7) (caddr cp0)))

(setq cp2 (list (car cp7) (cadr cp0) (caddr cp0)))

(setq cp3 (list (car cp7) (cadr cp7) (caddr cp0)))

(setq cp4 (list (car cp0) (cadr cp0) (caddr cp7)))

(setq cp5 (list (car cp0) (cadr cp7) (caddr cp7)))

(setq cp6 (list (car cp7) (cadr cp0) (caddr cp7)))

 

(command "_line" cp0 cp1 "")

(command "_line" cp1 cp3 "")

(command "_line" cp3 cp2 "")

(command "_line" cp2 cp0 "")

(command "_line" cp0 cp4 "")

(command "_line" cp1 cp5 "")

(command "_line" cp2 cp6 "")

(command "_line" cp3 cp7 "")

(command "_line" cp4 cp5 "")

(command "_line" cp5 cp7 "")

(command "_line" cp7 cp6 "")

(command "_line" cp6 cp4 "")

)

 

 

Je le lance avec

(cucube '(0 0 0) '(100 100 100))

Et dépendamment de l'orientation de la vue au moment ou je fais ma commande, le cube sera parfait où tout déformé. Disons que je suis dans la vue "x-y", quand je fais 3D Orbit je ne vois qu'un rectangle en 3D. Si je prends la vue isométrique avant de lancer la commande, à ce moment le cube est replié sur lui-même d'une drôle de façon. Par contre, si je prends une vue 3D quelconque, disons en déplaçant avec 3D Orbit, et je lance ma commande, le cube est parfait.

 

Est-ce une option que je n'ai pas activée ou c'est un bug d'autocad? Merci de m'aider c'est plutôt urgent!

 

Posté(e)

Salut et bienvenue,

 

Je ne pense pas que les différents comportements viennent de la vue (ortho ou iso) mais plutôt de la valeur du zoom.

 

En fait le problème vient desaccrochage aux objets permanents (variable OSMODE).

 

Par principe toute routine LISP qui utilise command pour créer des objets graphiques devrait contenir la désactivation des accrochages aux objets.

 

La méthode la plus courament utilisée consiste en récupérer la valeur initiale de OSMODE en début de routine, mettre OSMODE à 0, faire tous les command et enfin restaurer sa valeur initiale à osmode.

 

(defun cucube (cp0 cp7 / os)

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

(setq cp1 (list (car cp0) (cadr cp7) (caddr cp0)))
(setq cp2 (list (car cp7) (cadr cp0) (caddr cp0)))
(setq cp3 (list (car cp7) (cadr cp7) (caddr cp0)))
(setq cp4 (list (car cp0) (cadr cp0) (caddr cp7)))
(setq cp5 (list (car cp0) (cadr cp7) (caddr cp7)))
(setq cp6 (list (car cp7) (cadr cp0) (caddr cp7)))

(command "_line" cp0 cp1 "")
(command "_line" cp1 cp3 "")
(command "_line" cp3 cp2 "")
(command "_line" cp2 cp0 "")
(command "_line" cp0 cp4 "")
(command "_line" cp1 cp5 "")
(command "_line" cp2 cp6 "")
(command "_line" cp3 cp7 "")
(command "_line" cp4 cp5 "")
(command "_line" cp5 cp7 "")
(command "_line" cp7 cp6 "")
(command "_line" cp6 cp4 "")

(setvar "OSMODE" os)

) 

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é