Aller au contenu

prob lisp sous Acad 2008


dilack

Messages recommandés

bonjour,

ce lisp bug sous le version 2008 (de bonuscad) et je ne vois pas la solution.

J'aurais besoin de vos lumières.

Merci d'avance

 

Théoriquement la polyligne multucolore devrait se dessiné comme le tracé en rouge.

A chaque fois j'ai un retour avec un angle

 

http://http://img87.imageshack.us/img87/2315/capture01n.jpg

 

Uploaded with ImageShack.us

 

 

 

 

(defun c:mp(/ Cmd Co Coo Compt ep Lg os Pt1 Pt2 Pts Pas s)



 (defun *errmp* (msg)

   (if (/= msg "Function cancelled")

     (if (= msg "quit / exit abort")

       (princ)

       (princ (strcat "\nErreur : " msg))

     )

     (princ)

   )

   (if os

     (setvar "osmode" os)

   )

   (setvar "cecolor" coo)

   (command "_.undo" "_end")

   (setvar "cmdecho" Cmd)

   (setq *error* s)

   (princ)

 )



 (defun cg_co()

   (setvar "cecolor" (itoa Co))

   (if (= Co 50)

     (setq Co 100)

     (setq Co 50)

   )

 )



 (setq s *error*)

 (setq *error* *errmp*)

 (setq Cmd (getvar "cmdecho") Coo (getvar "cecolor"))

 (setvar "cmdecho" 0)

 (setq Ep (getstring (strcat "\nEpaisseur des polylignes <" (rtos (getvar "plinewid")) "> : ")))

 (if Ep

   (setvar "plinewid" (atof Ep))

 )

 (setq Pt1 (getpoint "\nPremier point : ") Pt2 '(0.0 0.0 0.0) Co 50 Compt 0)

 (if Pt1

   (progn

     (setq Pts (list (cons 0 Pt1)))

     (while Pt2

       (initget "Undo")

       (setq Pt2 (getpoint Pt1 "\nPoint suivant / Undo : "))

       (if Pt2

         (progn

           (if (= Pt2 "Undo")

             (progn

               (if (/= Compt 0)

                 (progn

                   (command "_.undo" "1")

                   (setq Pts (vl-remove (assoc Compt Pts) Pts) Compt (1- Compt) Pt1 (cdr (assoc Compt Pts)))

                 )

                 (princ "\nRien à annuler")

               )

             )

             (progn

               (command "_.undo" "_group")

               (setq os (getvar "osmode"))

               (setvar "osmode" 0)

               (setq Pas 0 Lg (* (getvar "ltscale") 5))

               (while (< Pas (- (distance Pt1 Pt2) Lg))

                 (cg_co)

                 (command "_.pline" (if (= Pas 0)

                                      Pt1

                                      "@"

                                    )

                                    (strcat "@" (rtos Lg) "<" (angtos (angle Pt1 Pt2) 0 16))

                                    "")

                 (setq Pas (+ Pas Lg))

               )

               (cg_co)

               (command "_.pline" "@" Pt2 "")

               (setvar "osmode" os)

               (setvar "cecolor" coo)

               (command "_.undo" "_end")

               (setq Pt1 Pt2 Compt (1+ Compt) Pts (append Pts (list (cons Compt Pt2))))

             )

           )

         )

       )

     )

   )

 )

 (setvar "cmdecho" Cmd)

 (setq *error* s)

 (princ)

)

Lien vers le commentaire
Partager sur d’autres sites

merci bonuscad.

petite question pour changer la couleur je dois modifier quelle ligne? je n'arrive pas à les identifier.

 

 

j'ai une erreur:

 

Commande: pmc

Sélectionner une entité curviligne:

Choix des objets:

Longueur du tireté à généré: 0.5

; erreur: no function definition: VLAX-ENAME->VLA-OBJECT

 

[Edité le 13/10/2010 par dilack]

Lien vers le commentaire
Partager sur d’autres sites

; erreur: no function definition: VLAX-ENAME->VLA-OBJECT

 

Un oubli de ma part... généralement je pense à mettre l'instruction

(vl-load-com)

en tête de fichier.

 

 

petite question pour changer la couleur je dois modifier quelle ligne? je n'arrive pas à les identifier.

 

(setq n (length lst_pt) count 1  [surligneur]first_color 1[/surligneur] )
;.....
(setq first_color (rem (1+ first_color) 3))
(if (zerop first_color) (setq first_color 1))

 

Ici je m'étais simplifié la vie pour générer l'alternance de couleur (numéro de couleur à 1 ou 2)

Pour faire d'autres combinaisons revoir la fonction (rem) qui peut te permettre de faire une alternance sur plus de couleurs, mais celles ci doivent se suivre. (3 4 5 6) ou (5 6 7 8 9) etc...

 

Ou alors revoir complétement la génération du numéro de couleur avec une autre technique...

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

pour avoir une alternance rouge noir?

 

Tu peux remplacer par exemple les 2 dernières lignes précitées par cette unique ligne:

 

(if (eq first_color 1) (setq first_color 7) (setq first_color 1)) 

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

appliquer une épaisseur

 

Il y a quand même l'épaisseur générale des objets qui peut être appliqué. C'est sur que cela n'a rien à voir avec l'épaisseur (largeur) que l'on peut avoir avec une polyligne, mais au traçage cela reste applicable.

 

Et puis les segments restent groupés. Cela facilite la manipulation...

 

Il reste que le code n'est parfait, on peut faire mieux.

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

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é