Aller au contenu

Faire une polyligne double trait et hachuré, c\'est possible?


zizou_elec

Messages recommandés

Bonjour,

Je dois dessiné un ensemble de chemin de cable.Pour me faire gagner un temps précieux ( avant des vacances imminentes :D je souhaiterais savoir s'il existe un lisp pour faire des doubles lignes qui serait hachurée automatiquement?

C'est utopique ou possible?

 

Merci d'avance!!

 

[Edité le 29/7/2008 par zizou_elec]

Lien vers le commentaire
Partager sur d’autres sites

un polyligne avec largeur ne conviendrait-elle pas ? (équivalent a deux traits décales de l'axe avec hachure SOLID dedans)

 

 

 

Et AutoCAD se tourna vers le dessinateur à bout de nerfs, et lui dit:

"ERREUR FATALE: Unhandled Access Violation Reading 0x5e43dff0 Exception at 5e43dff0h"

Ce à quoi le dessinateur répondit:

"Ca tombe bien je vais en profiter pour écouter un peu de rock qui décrasse les esgourdes"

http://www.facebook.com/pages/Ex-Voto/206836112741129?sk=wall

Lien vers le commentaire
Partager sur d’autres sites

;;;
;;; lancer une commande autocad

(defun mycmd (LCMD / CMD ETL LELEM RES OLDCMDECHO)
 (setq ETL (entlast))
 (setq OLDCMDECHO (getvar "CMDECHO"))
 (setvar "CMDECHO" 1)
 (foreach CMD LCMD
   (command CMD)
 )
 (while (not (zerop (getvar "cmdactive")))
   (command pause)
 )
 (setvar "CMDECHO" OLDCMDECHO)
 (setq LELEM nil)
 (if (not ETL) 
   (setq ETL (entnext))
   (setq ETL (entnext ETL))
 )
 (while ETL
   (setq LELEM (cons ETL LELEM))
   (setq ETL (entnext ETL))
 )
 (setq RES LELEM)
)


(defun c:chem_cable (/ D PLENAM PLOBJ OFFSETD OFFSETG PTOD PTFD PTOG PTFG AcDoc Space LO LF)
 (vl-load-com)
 ;; largeur de la polyligne
 (setq D (getreal "\nLargeur du chemin de cable : "))
 ;; tracer une polyligne
 (setq PLENAM (car (mycmd '("_pline"))))
 ;; transformer en vla-object
 (setq PLOBJ (vlax-ename->vla-object PLENAM))
 ;; faire les décallages
 (vla-offset PLOBJ (/ D 2.0))    ; à droite
 (setq OFFSETD (vlax-ename->vla-object (entlast)))
 (vla-offset PLOBJ (/ D -2.0))    ; à gauche
 (setq OFFSETG (vlax-ename->vla-object (entlast)))
 ; effacer la polyligne d'origine
 (vla-erase PLOBJ)
 ; fermer les extrémités avec des lignes
 (setq PTOD (vlax-curve-getStartPoint OFFSETD))
 (setq PTFD (vlax-curve-getEndPoint OFFSETD))
 (setq PTOG (vlax-curve-getStartPoint OFFSETG))
 (setq PTFG (vlax-curve-getEndPoint OFFSETG))

 (setq AcDoc (vla-get-activeDocument (vlax-get-acad-object))
       Space (if (= (getvar "CVPORT") 1)
               (vla-get-PaperSpace AcDoc)
               (vla-get-ModelSpace AcDoc) 
             )
 )
 (vla-addLine
   Space
   (vlax-3d-point PTOD)
   (vlax-3d-point PTOG)
 )
 (setq LO (entlast))
 (vla-addLine
   Space
   (vlax-3d-point PTFD)
   (vlax-3d-point PTFG)
 )
 (setq LF (entlast))
 ;; on fait un PEDIT "Joindre" avec tout ça
 (setvar "peditaccept" 1)
 (command "_pedit" "_m" LO (vlax-vla-object->ename OFFSETD) LF (vlax-vla-object->ename OFFSETG) "" "_j" 0.1 "_w" "0.0" "")
 ;; et enfin on y met une hachure (qu'on peut changer ici)
 (command "-fhach" "_p" "_u" "45" D "_n" "_s" (entlast) "" "")
 (princ)
) 

 

ou quelque chose dans le genre

 

Amicalement

Vincent

 

 

[Edité le 7/8/2008 par zebulon_]

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

Lien vers le commentaire
Partager sur d’autres sites

Faut croire que zizou_elec est parti en vacances ;)

 

 

je vous remercie Mr ZEBULON_

 

je viens de découvrire se lisp qui va me faciliter grandement mon travail (chemin de cable a dessiner souvent)

 

encore merci

 

 

j'ai quand meme une petite question je viens de creer plusieur fois le lsp pour les differentes largueur de chemin de cable mais peut on rajouter cette option a la commande d'origine

 

style longeur du Chc et largueur

 

 

[Edité le 7/8/2008 par stephane69100]

Lien vers le commentaire
Partager sur d’autres sites

je remonte un peu ce post car je suis moi aussi interessé par une valeur d'imput...

 

d'abord car ce lisp me sera effectivement utile, et ensuite car ça me ferai un exemple concret pour voir comment on implémente ça et me permettra de bricoler qqs lisp avec l'appel d'une variable numérique à l'utilisateur

 

merci

 

Lien vers le commentaire
Partager sur d’autres sites

perso je viens de modfie le lisp avec toutes mes largeurs donc pour cela plus de soucis

 

sa marche super bien

 

question quand meme

 

peut on integrer dans le lîsp un rayon de courbure au niveau des changement de direction (courbe differente à l'interrieur qu'a l'exterieur en veriter ces la valeur du raccords decaler par la largeur du Chemin de cable)

 

disons que pour une largeur de temps j'ai un rayon de courbure de temps

 

donc a chaque changement de direction j'ai un rayon de courbure de temps

 

merci encore et merci d'avance

 

 

[Edité le 7/8/2008 par stephane69100]

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

je remonte un peu ce post car je suis moi aussi interessé par une valeur d'imput...

 

j'ai modifié le lisp ci-dessus et j'ai rajouté un getreal (on peut faire mieux, mais c'est plus cher) pour que le lisp vous demande à chaque fois la largeur voulue.

 

peut on integrer dans le lîsp un rayon de courbure au niveau des changement de direction

Au départ, le lisp demande à l'utilisateur de tracer une polyligne dont il fait 2 "décaler", un à droite et un à gauche. Le lisp utilise la commande Autocad _PLINE et, de ce fait (et sans trop se fatiguer à programmer) il y a possibilité d'entrer un ou plusieurs segments courbes. Donc, il suffit de dessiner intelligemment la polyligne de construction avec les rayons qui vont bien.

 

perso je viens de modfie le lisp avec toutes mes largeurs donc pour cela plus de soucis

Tu pourrais partager ta personnalisation. Cela pourrait peut être en intéresser l'un ou l'autre.

 

 

Amicalement

Vincent

 

 

 

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

Lien vers le commentaire
Partager sur d’autres sites

bonjour monsieur zebulon

 

j'ai juste multiplier le lips de facon a avoir toute les largeurs que je desirais

 

;;;

;;; lancer une commande autocad

 

(defun mycmd (LCMD / CMD ETL LELEM RES OLDCMDECHO)

(setq ETL (entlast))

(setq OLDCMDECHO (getvar "CMDECHO"))

(setvar "CMDECHO" 1)

(foreach CMD LCMD

(command CMD)

)

(while (not (zerop (getvar "cmdactive")))

(command pause)

)

(setvar "CMDECHO" OLDCMDECHO)

(setq LELEM nil)

(if (not ETL)

(setq ETL (entnext))

(setq ETL (entnext ETL))

)

(while ETL

(setq LELEM (cons ETL LELEM))

(setq ETL (entnext ETL))

)

(setq RES LELEM)

)

 

 

(defun c:99 (/ D PLENAM PLOBJ OFFSETD OFFSETG PTOD PTFD PTOG PTFG AcDoc Space LO LF)

(vl-load-com)

;; largeur de la polyligne (à changer si nécessaire)

(setq D 0.099)

;; tracer une polyligne

(setq PLENAM (car (mycmd '("_pline"))))

;; transformer en vla-object

(setq PLOBJ (vlax-ename->vla-object PLENAM))

;; faire les décallages

(vla-offset PLOBJ (/ D 2.0)) ; à droite

(setq OFFSETD (vlax-ename->vla-object (entlast)))

(vla-offset PLOBJ (/ D -2.0)) ; à gauche

(setq OFFSETG (vlax-ename->vla-object (entlast)))

; effacer la polyligne d'origine

(vla-erase PLOBJ)

; fermer les extrémités avec des lignes

(setq PTOD (vlax-curve-getStartPoint OFFSETD))

(setq PTFD (vlax-curve-getEndPoint OFFSETD))

(setq PTOG (vlax-curve-getStartPoint OFFSETG))

(setq PTFG (vlax-curve-getEndPoint OFFSETG))

 

(setq AcDoc (vla-get-activeDocument (vlax-get-acad-object))

Space (if (= (getvar "CVPORT") 1)

(vla-get-PaperSpace AcDoc)

(vla-get-ModelSpace AcDoc)

)

)

(vla-addLine

Space

(vlax-3d-point PTOD)

(vlax-3d-point PTOG)

)

(setq LO (entlast))

(vla-addLine

Space

(vlax-3d-point PTFD)

(vlax-3d-point PTFG)

)

(setq LF (entlast))

;; on fait un PEDIT "Joindre" avec tout ça

(setvar "peditaccept" 1)

(command "_pedit" "_m" LO (vlax-vla-object->ename OFFSETD) LF (vlax-vla-object->ename OFFSETG) "" "_j" 0.1 "_w" "0.0" "")

;; et enfin on y met une hachure (qu'on peut changer ici)

(command "-fhach" "_p" "_u" "45" D "_n" "_s" (entlast) "" "")

(princ)

)

 

(defun c:123 (/ D PLENAM PLOBJ OFFSETD OFFSETG PTOD PTFD PTOG PTFG AcDoc Space LO LF)

(vl-load-com)

;; largeur de la polyligne (à changer si nécessaire)

(setq D 0.123)

;; tracer une polyligne

(setq PLENAM (car (mycmd '("_pline"))))

;; transformer en vla-object

(setq PLOBJ (vlax-ename->vla-object PLENAM))

;; faire les décallages

(vla-offset PLOBJ (/ D 2.0)) ; à droite

(setq OFFSETD (vlax-ename->vla-object (entlast)))

(vla-offset PLOBJ (/ D -2.0)) ; à gauche

(setq OFFSETG (vlax-ename->vla-object (entlast)))

; effacer la polyligne d'origine

(vla-erase PLOBJ)

; fermer les extrémités avec des lignes

(setq PTOD (vlax-curve-getStartPoint OFFSETD))

(setq PTFD (vlax-curve-getEndPoint OFFSETD))

(setq PTOG (vlax-curve-getStartPoint OFFSETG))

(setq PTFG (vlax-curve-getEndPoint OFFSETG))

 

(setq AcDoc (vla-get-activeDocument (vlax-get-acad-object))

Space (if (= (getvar "CVPORT") 1)

(vla-get-PaperSpace AcDoc)

(vla-get-ModelSpace AcDoc)

)

)

(vla-addLine

Space

(vlax-3d-point PTOD)

(vlax-3d-point PTOG)

)

(setq LO (entlast))

(vla-addLine

Space

(vlax-3d-point PTFD)

(vlax-3d-point PTFG)

)

(setq LF (entlast))

;; on fait un PEDIT "Joindre" avec tout ça

(setvar "peditaccept" 1)

(command "_pedit" "_m" LO (vlax-vla-object->ename OFFSETD) LF (vlax-vla-object->ename OFFSETG) "" "_j" 0.1 "_w" "0.0" "")

;; et enfin on y met une hachure (qu'on peut changer ici)

(command "-fhach" "_p" "_u" "45" D "_n" "_s" (entlast) "" "")

(princ)

)

 

(defun c:220 (/ D PLENAM PLOBJ OFFSETD OFFSETG PTOD PTFD PTOG PTFG AcDoc Space LO LF)

(vl-load-com)

;; largeur de la polyligne (à changer si nécessaire)

(setq D 0.22)

;; tracer une polyligne

(setq PLENAM (car (mycmd '("_pline"))))

;; transformer en vla-object

(setq PLOBJ (vlax-ename->vla-object PLENAM))

;; faire les décallages

(vla-offset PLOBJ (/ D 2.0)) ; à droite

(setq OFFSETD (vlax-ename->vla-object (entlast)))

(vla-offset PLOBJ (/ D -2.0)) ; à gauche

(setq OFFSETG (vlax-ename->vla-object (entlast)))

; effacer la polyligne d'origine

(vla-erase PLOBJ)

; fermer les extrémités avec des lignes

(setq PTOD (vlax-curve-getStartPoint OFFSETD))

(setq PTFD (vlax-curve-getEndPoint OFFSETD))

(setq PTOG (vlax-curve-getStartPoint OFFSETG))

(setq PTFG (vlax-curve-getEndPoint OFFSETG))

 

(setq AcDoc (vla-get-activeDocument (vlax-get-acad-object))

Space (if (= (getvar "CVPORT") 1)

(vla-get-PaperSpace AcDoc)

(vla-get-ModelSpace AcDoc)

)

)

(vla-addLine

Space

(vlax-3d-point PTOD)

(vlax-3d-point PTOG)

)

(setq LO (entlast))

(vla-addLine

Space

(vlax-3d-point PTFD)

(vlax-3d-point PTFG)

)

(setq LF (entlast))

;; on fait un PEDIT "Joindre" avec tout ça

(setvar "peditaccept" 1)

(command "_pedit" "_m" LO (vlax-vla-object->ename OFFSETD) LF (vlax-vla-object->ename OFFSETG) "" "_j" 0.1 "_w" "0.0" "")

;; et enfin on y met une hachure (qu'on peut changer ici)

(command "-fhach" "_p" "_u" "45" D "_n" "_s" (entlast) "" "")

(princ)

)

 

(defun c:316 (/ D PLENAM PLOBJ OFFSETD OFFSETG PTOD PTFD PTOG PTFG AcDoc Space LO LF)

(vl-load-com)

;; largeur de la polyligne (à changer si nécessaire)

(setq D 0.316)

;; tracer une polyligne

(setq PLENAM (car (mycmd '("_pline"))))

;; transformer en vla-object

(setq PLOBJ (vlax-ename->vla-object PLENAM))

;; faire les décallages

(vla-offset PLOBJ (/ D 2.0)) ; à droite

(setq OFFSETD (vlax-ename->vla-object (entlast)))

(vla-offset PLOBJ (/ D -2.0)) ; à gauche

(setq OFFSETG (vlax-ename->vla-object (entlast)))

; effacer la polyligne d'origine

(vla-erase PLOBJ)

; fermer les extrémités avec des lignes

(setq PTOD (vlax-curve-getStartPoint OFFSETD))

(setq PTFD (vlax-curve-getEndPoint OFFSETD))

(setq PTOG (vlax-curve-getStartPoint OFFSETG))

(setq PTFG (vlax-curve-getEndPoint OFFSETG))

 

(setq AcDoc (vla-get-activeDocument (vlax-get-acad-object))

Space (if (= (getvar "CVPORT") 1)

(vla-get-PaperSpace AcDoc)

(vla-get-ModelSpace AcDoc)

)

)

(vla-addLine

Space

(vlax-3d-point PTOD)

(vlax-3d-point PTOG)

)

(setq LO (entlast))

(vla-addLine

Space

(vlax-3d-point PTFD)

(vlax-3d-point PTFG)

)

(setq LF (entlast))

;; on fait un PEDIT "Joindre" avec tout ça

(setvar "peditaccept" 1)

(command "_pedit" "_m" LO (vlax-vla-object->ename OFFSETD) LF (vlax-vla-object->ename OFFSETG) "" "_j" 0.1 "_w" "0.0" "")

;; et enfin on y met une hachure (qu'on peut changer ici)

(command "-fhach" "_p" "_u" "45" D "_n" "_s" (entlast) "" "")

(princ)

)

 

(defun c:412 (/ D PLENAM PLOBJ OFFSETD OFFSETG PTOD PTFD PTOG PTFG AcDoc Space LO LF)

(vl-load-com)

;; largeur de la polyligne (à changer si nécessaire)

(setq D 0.412)

;; tracer une polyligne

(setq PLENAM (car (mycmd '("_pline"))))

;; transformer en vla-object

(setq PLOBJ (vlax-ename->vla-object PLENAM))

;; faire les décallages

(vla-offset PLOBJ (/ D 2.0)) ; à droite

(setq OFFSETD (vlax-ename->vla-object (entlast)))

(vla-offset PLOBJ (/ D -2.0)) ; à gauche

(setq OFFSETG (vlax-ename->vla-object (entlast)))

; effacer la polyligne d'origine

(vla-erase PLOBJ)

; fermer les extrémités avec des lignes

(setq PTOD (vlax-curve-getStartPoint OFFSETD))

(setq PTFD (vlax-curve-getEndPoint OFFSETD))

(setq PTOG (vlax-curve-getStartPoint OFFSETG))

(setq PTFG (vlax-curve-getEndPoint OFFSETG))

 

(setq AcDoc (vla-get-activeDocument (vlax-get-acad-object))

Space (if (= (getvar "CVPORT") 1)

(vla-get-PaperSpace AcDoc)

(vla-get-ModelSpace AcDoc)

)

)

(vla-addLine

Space

(vlax-3d-point PTOD)

(vlax-3d-point PTOG)

)

(setq LO (entlast))

(vla-addLine

Space

(vlax-3d-point PTFD)

(vlax-3d-point PTFG)

)

(setq LF (entlast))

;; on fait un PEDIT "Joindre" avec tout ça

(setvar "peditaccept" 1)

(command "_pedit" "_m" LO (vlax-vla-object->ename OFFSETD) LF (vlax-vla-object->ename OFFSETG) "" "_j" 0.1 "_w" "0.0" "")

;; et enfin on y met une hachure (qu'on peut changer ici)

(command "-fhach" "_p" "_u" "45" D "_n" "_s" (entlast) "" "")

(princ)

)

 

(defun c:508 (/ D PLENAM PLOBJ OFFSETD OFFSETG PTOD PTFD PTOG PTFG AcDoc Space LO LF)

(vl-load-com)

;; largeur de la polyligne (à changer si nécessaire)

(setq D 0.508)

;; tracer une polyligne

(setq PLENAM (car (mycmd '("_pline"))))

;; transformer en vla-object

(setq PLOBJ (vlax-ename->vla-object PLENAM))

;; faire les décallages

(vla-offset PLOBJ (/ D 2.0)) ; à droite

(setq OFFSETD (vlax-ename->vla-object (entlast)))

(vla-offset PLOBJ (/ D -2.0)) ; à gauche

(setq OFFSETG (vlax-ename->vla-object (entlast)))

; effacer la polyligne d'origine

(vla-erase PLOBJ)

; fermer les extrémités avec des lignes

(setq PTOD (vlax-curve-getStartPoint OFFSETD))

(setq PTFD (vlax-curve-getEndPoint OFFSETD))

(setq PTOG (vlax-curve-getStartPoint OFFSETG))

(setq PTFG (vlax-curve-getEndPoint OFFSETG))

 

(setq AcDoc (vla-get-activeDocument (vlax-get-acad-object))

Space (if (= (getvar "CVPORT") 1)

(vla-get-PaperSpace AcDoc)

(vla-get-ModelSpace AcDoc)

)

)

(vla-addLine

Space

(vlax-3d-point PTOD)

(vlax-3d-point PTOG)

)

(setq LO (entlast))

(vla-addLine

Space

(vlax-3d-point PTFD)

(vlax-3d-point PTFG)

)

(setq LF (entlast))

;; on fait un PEDIT "Joindre" avec tout ça

(setvar "peditaccept" 1)

(command "_pedit" "_m" LO (vlax-vla-object->ename OFFSETD) LF (vlax-vla-object->ename OFFSETG) "" "_j" 0.1 "_w" "0.0" "")

;; et enfin on y met une hachure (qu'on peut changer ici)

(command "-fhach" "_p" "_u" "45" D "_n" "_s" (entlast) "" "")

(princ)

)

 

comme tu peux le voir je suis partis de ton lips et j'ai crée une version pour chaque Chemin de cable que j'utilise donc 99, 123,220,316,412 et 508

 

avec un appel par taille

 

comme cela pas de soucis

 

voila j'ai pas fait de révolution sur le script car je n'y connais rien malheureusement

 

 

Lien vers le commentaire
Partager sur d’autres sites

yes merci beaucoup...

 

je vien d'apprendre ma 1ere cmd lisp: getreal

:)

 

tu dis dans tes comments :;; et enfin on y met une hachure (qu'on peut changer ici)

mais je comprend pas trop la ligne qui suit... je m'attendais à voir apparaitre ansi31

d'autant que je vien de tester pour une route (largeur 7m) et pour un chemin de cable (largeur .2) et les hachure ont dans les deux cas un aspect lisible... ou est donc le parametre d'echelle de la hachure???

 

ha les mystères de la programmation... quand on y connet rien ça ressemble a un tour de magie

 

mais ça va deja bien me servir comme ça...

pour estimer des surfaces de voirie au Km vite vite fait...

 

encore merci

 

[Edité le 7/8/2008 par x_all]

Lien vers le commentaire
Partager sur d’autres sites

(command "-fhach" "_p" "_u" "45" D "_n" "_s" (entlast) "" "")

 

"-fhach" c'est la commande de hachure

 

"_p" c'est pour avoir accès au propriétés de cette commande

 

"_u" c'est pour faire une hachure de type "Utilisateur"

 

"45" c'est l'angle des traits de hachure

 

D la distance entre deux traits de hachure. D est une variable, dans laquelle on stocke la largeur du chemin. Donc plus D est grand, moins la hachure sera dense (et inversement, bien sûr)

 

"_n" pour dire qu'on ne veut pas de hachures doubles

 

"_s" pour sélectionner des contours à hachurer

 

(entlast) c'est la dernière entité, fabriquée par _pedit, et qui sert de contour

 

"" pour terminer le "choix de objets" formant les contours

 

"" pour sortir de la commande.

 

Si tu veux de l'ANSI, il faut modifier cette ligne. Le mieux, c'est de le faire "à la main" dans Autocad et noter tout ce qu'on tape et le reproduire dans le lisp. Personnellement, j'utilise autant que possible les hachures "utilisateur" : elles sont simples (angle + distance) et, en plus, la distance demandée est en unités de dessin. Il n'y a pas de notion d'échelle (où on n'a jamais ce qu'on veut du premier coup !) comme pour les autres types de hachures.

 

Pour Stéphane, la duplication est à proscrire, surtout en programmation. Dupliquer tout un lisp parce qu'il y a une ligne qui change, c'est un peu violent.

 

Amicalement

Vincent

 

Et arrêtez de m'appeler Monsieur. On n'est pas à l'école.

 

[Edité le 7/8/2008 par zebulon_]

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

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é