Aller au contenu

Courbe de visibilité


Megeon

Messages recommandés

j'avais fait un tableau excel à l'époque de l'archi, c'est vrai qu'avec un lisp ça doit être jouable.

 

Mais je ne retrouve pas le tableau. De ce que je me rappelle, c'était pas une fonction, mais une suite (la valeur P n donne la valeur P n+1)

Je sortais les x,y de chaque point en ft de P0 et du point visé.

 

Il faudrait que tu nous donne la définition de la suite car je sais plus le faire...

 

 

 

 

 

Lien vers le commentaire
Partager sur d’autres sites

j'avais fait un tableau excel à l'époque de l'archi, c'est vrai qu'avec un lisp ça doit être jouable.

 

Mais je ne retrouve pas le tableau. De ce que je me rappelle, c'était pas une fonction, mais une suite (la valeur P n donne la valeur P n+1)

Je sortais les x,y de chaque point en ft de P0 et du point visé.

 

Il faudrait que tu nous donne la définition de la suite car je sais plus le faire...

 

Ça viendra avec le temps, je viens d'arriver dans ma nouvelle boite, et on m'a dit que cette option existait, et que donc, il faudrait la chercher !

 

Du coup si on peux calculer la courbe avec autocad, et faire en sorte de faire des réseaux par courbe ça serais cool ce truc !

 

Je vous tiens au courant ! je cherchais juste si ça existait déjà !

 

merci en tout cas.

Lien vers le commentaire
Partager sur d’autres sites

Coucou

 

Effectivement en lisp il y a moyen de faire

Par contre il va expliciter falloir clairement les données

 

Pour ce qui est de la "fonction" AutoCAD en natif, tel que tu expliques je ne connais rien

Si tu dessines tes points sur une coupe je dirais que les relier par une spline me semble un visuel correct.

 

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Tu peux essayer ça :

 

(defun c:CourbeVisib (/ tan p0 p1 ix iy x n pts a)
 (defun tan (a) (/ (sin a) (cos a)))
 (if
   (and
     (setq p1 (getpoint "\nSpécifiez le premier point de vue: "))
     (setq p0 (getpoint p1 "\nSpécifiez le point cible: "))
     (setq iy (getdist p1 "\nSpécifiez le décalage en hauteur (y): "))
     (setq ix (getdist "\nSpécifiez la largeur des rangs (x): "))
   )
    (progn
      (initget 7)
      (setq n (getint "\nEntrez le nombre de rangs: "))
      (setq pts (list p1))
      (setq ix (if (minusp (- (car p1) (car p0)))
                 (- (abs ix))
                 (abs ix)
               )
            iy (abs iy)
      )
      (repeat n
        (setq a   (angle p0 (list (car p1) (+ (cadr p1) iy)))
              x   (+ (car p1) ix)
              p1  (list x (+ (cadr p0) (* (tan a) (- x (car p0)))))
              pts (cons p1 pts)
        )
      )
      (command "_spline")
      (foreach p (reverse pts)
        (command "_non" p)
      )
      (command "" "" "")
    )
 )
 (princ)
)

 

  • Upvote 1

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

Lien vers le commentaire
Partager sur d’autres sites

Ho ! Merci gile, je pense qu'il y a une bonne base, cependant il y a eu un pti soucis (voir image)

 

En tout cas merci de la réactivité, et de la vitesse pour faire le code !

 

EDIT: J'ai ACAD2018 je ne sais pas si ça change qqch

 

EDIT 2 : D’ailleurs il existe un moyen de s'accrocher aux poinyt de la spline ?

 

 

le résultat est la courbe bleu

587916essai1.jpg

Lien vers le commentaire
Partager sur d’autres sites

Il faut que tu sélectionnes en premier le point de vue le plus bas (regarde la vidéo).

 

Tu peux essayer cette version qui dessine les lignes de visibilité sur le calque VISIBILITE.

On pourrait aussi dessiner un point ou insérer un bloc à chaque sommet de la spline.

 

(defun c:courbeVisib (/ tan p0 p1 x y n ix iy pts a)
 (defun tan (a) (/ (sin a) (cos a)))
 (if
   (and
     (setq p1 (getpoint "\nSpécifiez le premier point de vue: "))
     (setq p0 (getpoint p1 "\nSpécifiez le point cible: "))
     (setq iy (getdist p1 "\nSpécifiez le décalage en hauteur (y): "))
     (setq ix (getdist "\nSpécifiez la largeur des rangs (x): "))
   )
    (progn
      (initget 7)
      (setq n (getint "\nEntrez le nombre de rangs: "))
      (setq pts (list p1))
      (setq ix (if (minusp (- (car p1) (car p0)))
                 (- (abs ix))
                 (abs ix)
               )
            iy (abs iy)
      )
      (repeat n
        (setq a   (angle p0 (list (car p1) (+ (cadr p1) iy)))
              x   (+ (car p1) ix)
              p1  (list x (+ (cadr p0) (* (tan a) (- x (car p0)))))
              pts (cons p1 pts)
        )
      )
      (command "_spline")
      (foreach p (reverse pts)
        (command "_non" p)
      )
      (command "" "" "")
      (foreach p pts
        (entmakex
          (list
            (cons 0 "LINE")
            (cons 10 (trans p 1 0))
            (cons 11 (trans p0 1 0))
            (cons 8 "VISIBILITE")
          )
        )
      )
    )
 )
 (princ)
)

  • Upvote 1

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

Lien vers le commentaire
Partager sur d’autres sites

c'est ce que j'ai fait pour la sélection ! ( d’ailleurs je fait comme dans la vidéo ! )

 

C'est curieux, la seconde version est identique à la première excepté l'ajout des lignes de visibilité...

 

EDIT : c'est peut-être un problème avec les accrochages aux objets, j'ai modifié les deuc code ci-dessus pour forcer les accrochages sur "AUCun" ("_NONe").

  • Upvote 1

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

Lien vers le commentaire
Partager sur d’autres sites

  • 3 mois après...

 

.....

 

)

(command "" "" "")

(foreach p pts

(entmakex

(list

(cons 0 "LINE")

(cons 10 (trans p 1 0))

(cons 11 (trans p0 1 0))

(cons 8 "VISIBILITE")

)

)

)

)

)

(princ)

 

Bonjour,

 

Très intéressent votre lisp ci-dessus mais est-il possible d'avoir un calque "VISIBILITE DROITE" (les lignes droites du point de vue aux cibles ) en rouge et un autre calque pour "VISIBILITE COURBE" en vert ?

 

Meilleures salutations

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

(defun c:courbeVisib (/ tan p0 p1 x y n ix iy pts a)
 (defun tan (a) (/ (sin a) (cos a)))
 (if
   (and
     (setq p1 (getpoint "\nSpécifiez le premier point de vue: "))
     (setq p0 (getpoint p1 "\nSpécifiez le point cible: "))
     (setq iy (getdist p1 "\nSpécifiez le décalage en hauteur (y): "))
     (setq ix (getdist "\nSpécifiez la largeur des rangs (x): "))
   )
    (progn
      (or (tblsearch "LAYER" "VISIBILITE_DROITE")
          (entmake '((0 . "LAYER")
                     (100 . "AcDbSymbolTableRecord")
                     (100 . "AcDbLayerTableRecord")
                     (2 . "VISIBILITE_DROITE")
                     (70 . 0)
                     (62 . 1)
                     (6 . "Continuous")
                    )
          )
      )
      (or (tblsearch "LAYER" "VISIBILITE_COURBE")
          (entmake '((0 . "LAYER")
                     (100 . "AcDbSymbolTableRecord")
                     (100 . "AcDbLayerTableRecord")
                     (2 . "VISIBILITE_COURBE")
                     (70 . 0)
                     (62 . 3)
                     (6 . "Continuous")
                    )
          )
      )
      (initget 7)
      (setq n (getint "\nEntrez le nombre de rangs: "))
      (setq pts (list p1))
      (setq ix (if (minusp (- (car p1) (car p0)))
                 (- (abs ix))
                 (abs ix)
               )
            iy (abs iy)
      )
      (repeat n
        (setq a   (angle p0 (list (car p1) (+ (cadr p1) iy)))
              x   (+ (car p1) ix)
              p1  (list x (+ (cadr p0) (* (tan a) (- x (car p0)))))
              pts (cons p1 pts)
        )
      )
      (entmakex
        (vl-list*
          (cons 0 "SPLINE")
          (cons 100 "AcDbEntity")
          (cons 8 "VISIBILITE_COURBE")
          (cons 100 "AcDbSpline")
          (cons 71 (length pts))
          (mapcar '(lambda (p) (cons 11 p)) pts)
        )
      )
      (foreach p pts
        (entmakex
          (list
            (cons 0 "LINE")
            (cons 10 (trans p 1 0))
            (cons 11 (trans p0 1 0))
            (cons 8 "VISIBILITE_DROITE")
          )
        )
      )
    )
 )
 (princ)
)

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

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é