Aller au contenu

Fermer Polylignes !!


Messages recommandés

Posté(e)

Bonjour ,

 

J'ai un gros problemes , j'ai recupérer des plans , et je dois en autre calculer les carac méca ( poids périm , inertes ,..) de ces profils .

 

Ils ont été mal dessinés , il y a aucune polyligne de fermée , j'utiliserai bien la fonction , "objet,polyligne , joindre ou clore , mais cela ne me donne pas les résultats espéraient .

 

Si vous pouviez m'aiguiller sur une routine , en lisp ou vba , pour automatiser cela ,soit ( fermer polyligne , créer region , calcul inertie , deplacer la profil au point 0,0 ) .

 

A bientot .

 

Posté(e)

bonjour,

 

message typique du nouvel inscrit,

je n'ai pas compris la finalité,

tes "profils" sont dessinés en LIGNES ?

y a t'il des ARCS ?

pourquoi les déplacer au point 0,0,0 ?

 

La première solution qui me vient à l'esprit c'est

d'isoler tes éléments, de faire un zoom qui centre bien l'objet à l'écran

ensuite utiliser la commande CONTOUR, en choisissant l'option REGION.

 

amicalement

Posté(e)

bonjour,

 

tu sélectionnes toutes tes polylignes avec _qselect (ou menu contextuel : sélection rapide ...)

Dans _qselect, tu choisis :

- Appliquer à : dessin entier

- Type d'objet : Polyligne

- Propriétés : fermée

- Opérateur : = égal à

- Valeur : Non

 

mode d'application : inclure dans le nouveau jeu de sélection

 

puis OK

 

Toutes tes polylignes non fermées sont sélectionnées. Il suffit de lancer la commande _properties (ou menu contextuel : Propriétés ...) et changer la ligne Fermée : Non en Fermée : Oui.

 

Amicalement

 

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)

Posté(e)

Merci pour vos réponses ,

 

je vais essayer cela des cet a Midi .

Je souhaite dépalcer le profil (déssiné avec des lignes , des arc , des slines , des ellipses ,...,) au point 0,0. je m'explique , je souhaite que le centre de garvité du profil ( 1 ou plusieurs région) soit au pint 0,0 , car ainsi j'aia les moments d'inertie correct .

 

Merci encore et à bientot .

 

 

Posté(e)

 

Hello

 

Il faut faire attention, car clore / fermer (par cette excellente méthode) plusieurs centaines / milliers de polylignes peut provoquer quelques surprises !

 

Des effets papillons (croisement) par exemple si les polylignes ont été mal dessinées !

 

Donc apres la manipulation, qq zooms en profondeur pour examiner "un peu" les polylignes closes / fermées peut s'avérer utile ...

 

Le Decapode

 

Autodesk Expert Elite Team

Posté(e)

Salut,

 

Une réponse en LISP :

 

(defun c:inert_prof (/ pl reg cen inert)
 (if (setq pl (ssget "_:S:E" '((0 . "LWPOLYLINE"))))
   (progn
     (setq pl (vlax-ename->vla-object (ssname pl 0)))
     (vla-put-closed pl :vlax-true)
     (setq reg	(car (vlax-invoke
	       (vla-get-ModelSpace
		 (vla-get-ActiveDocument
		   (vlax-get-acad-object)
		 )
	       )
	       'addRegion
	       (list pl)
	     )
	)
     )
     (setq cen (append (vlax-get reg 'Centroid) '(0.0)))
     (vla-Move reg (vlax-3d-point cen) (vlax-3d-point '(0 0 0)))
     (setq inert (vlax-get reg 'MomentofInertia))
     (alert (strcat "Moments d'inertie.\nX: "
	     (rtos (car inert) 2 1)
	     "\nY: "
	     (rtos (cadr inert) 2 1)
     )
     )
   )
 )
 (princ)
) 

 

[Edité le 22/11/2006 par (gile)]

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

Posté(e)

Re,

 

En l'état, la routine ci dessus ne fonctionne qu'avec des polylignes. Elle les ferme si elle ne le sont pas, crée une region, la déplace de façon à ce que le centre de gravité soit en 0,0 et retourne les moments d'inertitie dans un message.

La polyligne source n'est pas effacée.

 

Il est possible de modifier cette routine :

- si la région doit être créée à partir de plusieurs objets

- si les objets sources doivent être effacés.

- si on préfère ne pas replacer la région à son point départ

- si on veut mettre un objet point sur le centre de gravité

etc ...

 

Si tu veux bien préciser ta demande, je verrais ce que je peux faire.

 

 

[Edité le 22/11/2006 par (gile)]

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

Posté(e)

Merci encore pour vos reponses .

 

Je vous soupsonne de ne pas manger pour etre aussi prompt pour les reponse . :D

Je vais tester tout cela et je vous tiens au courant ...

 

Posté(e)

Je vous soupçonne de ne pas manger pour etre aussi prompt pour les reponses

bienvenu dans la secte CADxp qui, par la prière, le jeûne, la pénitence, la solitude et dans l'état de célibat, recherche l'union avec la divinité Autocad. Mais CADxp n'est pas monothéiste, tu trouveras aussi des adeptes d'autres chapelles : Catia, MicroStation, Revit etc... et les plus dangereux : les adeptes de LISP et VLISP.

Tu ne pourras pas dire que tu n'as pas été prévenu :)

 

Amicalement

 

Zebulon_

  • Like 1

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)

Posté(e)

Voilou ,

 

1-

Je viens de tester le lisp .

 

Cela me retourne comme message :""""; erreur: type d'argument incorrect: numberp: nil" ""

Je travaille avec autocad 2007 , Il me retourne ce message , juste apres avoir charger la lisp .

 

2-

La methode à zébulon 'qselect ' ne marche pas tres bien , car quand il ferme les polylignes , il l'utilise la fonction clore et du coup c'est pas top .

 

Merci encore !!!

 

 

 

 

 

 

 

Posté(e)

Cela me retourne comme message :""""; erreur: type d'argument incorrect: numberp: nil" ""

Je travaille avec autocad 2007 , Il me retourne ce message , juste apres avoir charger la lisp .

Est tu bien sûr d'avoir copié tout le code et que le code ? :casstet:

 

 

 

quand il ferme les polylignes , il l'utilise la fonction clore et du coup c'est pas top .

J'ai peur de ne pas bien comprendre, le LISP aussi, pour fermer les polylignes utilise un équivalent de la fonction clore.

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

Posté(e)
les adeptes de LISP et VLISP.

Eh oui, mefie-toi du Lost In Stupid Parenthesis

 

http://smileys.sur-la-toile.com/repository/Grands_Smileys/emoticon-msn-hypnose.gif.gif

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

On est deux a ne pas comprendre.

Je pense que dans son fichier il y a des bouts de lignes, des arcs qui devraient faire partie d'un polyligne, mais qui sont des lignes et des arcs, tous seuls dans leur coin. Alors, bien sûr, si on fait juste "clore", ça donne de la daube.

 

Si c'est ça, il pourra peut être s'en sortir en isolant le calque sur lequel se trouve les objets à analyser (pour autan qu'ils sont sur un calque à part ?), puis en lançant la commande PEDIT Multiple et sélectionner les objets à transformer en polylignes.

Commande: pe PEDIT Sélectionnez la polyligne ou [Multiple]: m

 

Choix des objets: Spécifiez le coin opposé: 19 trouvé(s)

 

Entrez une option

[Clore/Ouvrir/Joindre/Epaiss/Lissage/sPline/Retrouver/Typeligne gén/Annuler]: j

Type de jointure = Prolonger

Entrez une distance approximative ou [type de Jointure] <0.00>:

16 segments ajoutés aux 3 polylignes

Entrez une option

[Clore/Ouvrir/Joindre/Epaiss/Lissage/sPline/Retrouver/Typeligne gén/Annuler]: c

Donc en faisant un Joindre (avec une distance de 0.00, ou un peu plus si c'est vraiment mal dessiné) avant de faire le Clore.

 

Amicalement

 

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)

Posté(e)

hello

 

c'est le pôv garçon qui revient avec ses radoteries...

 

il n'est possible de programmer que si la base graphique est propre,

il n'existe pas de solution aisée pour ton problème,

 

isole les objets et utilise CONTOUR,

tu obtiendras des entités créées par toi qui ensuite

pourront subir un traitement LISP ou autre

pour les centres de gravité ou autre...

 

amicalement

Posté(e)

Hello à tous ;)

 

J'ai le même probleme et biensur la selection rapide et le "fermé=oui" me donne une grosseuce,grosseuce catastropheu !!!

 

Bref je n'ai pas le temps de tout reprendre en contour, puisque qu'il le refuse aussi et je voudrais juste hachurer mais je ne parviens pas à donner une tolerance suffisante poour que cela marche !!!

Je croyais qu'autocad 2005 permet d'hachurer des zone non closes ??

Q"en était-il donc ???

 

 

Mercdi d'avance

 

Posté(e)

Re,

 

Voici une version plus aboutie, elle fonctionne avec les arcs, cercles, ellipses, lignes, polylignes, splines. les objets doivent être jointifs.

Si plusieurs régions sont créées, les ilots dans le profil (trous) sont soustraits de la région qui a la plus grande superficie.

 

Une fois le LISP chargé, taper prop_profil et sélectionner tous les objets qui constituent un profil.

 

Si les objets sélectionnés constituent un contour fermé, une (ou des) région(s) est (sont) créée(s).

 

Si plusieurs régions sont créées, celles dont les surfaces sont plus petites sont soustraites de celle dont la surface est la plus grande, pour ne donner qu'une région avec des ilots (trous).

 

Seule la région créée est conservée (a sa place originale).

 

Un message donne ensuite les moments d'inertie et l'aire de la région.

 

(defun c:prop_profil (/ ss lst reg cen inert)
 (prompt "\nSélectionnez les objets décrivant le profil: ")
 (if (setq ss (ssget '((0 . "ARC,CIRCLE,ELLIPSE,LINE,LWPOLYLINE,REGION,SPLINE"))))
   (progn
     (setq lst	(mapcar	'vlax-ename->vla-object
		(vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
	)
     )
     (if (vl-every '(lambda (x) (= x "AcDbRegion"))
	    (mapcar 'vla-get-ObjectName lst)
  )
(setq reg lst
      lst nil
)
(progn
  (foreach obj lst
    (if	(= (vla-get-ObjectName obj) "AcDbRegion")
      (setq lst (append (vlax-invoke obj 'Explode) (vl-remove obj lst)))
    )
  )
  (if (not
	(listp
	  (setq	reg (vl-catch-all-apply
		      'vlax-invoke
		      (list
			(vla-get-ModelSpace
			  (vla-get-ActiveDocument
			    (vlax-get-acad-object)
			  )
			)
			'addRegion
			lst
		      )
		    )
	  )
	)
      )
    (setq reg nil)
  )
)
     )
     (if reg
(progn
  (setq reg (vl-sort reg '(lambda (e1 e2) (	  (while (cdr reg)
    (vla-Boolean (last reg) acSubtraction (car reg))
    (setq reg (cdr reg))
  )
  (setq cen (append (vlax-get (car reg) 'Centroid) '(0.0)))
  (vla-Move (car reg) (vlax-3d-point cen) (vlax-3d-point '(0 0 0)))
  (setq inert (vlax-get (car reg) 'MomentofInertia))
  [surligneur](vla-Move (car reg) (vlax-3d-point '(0 0 0)) (vlax-3d-point cen))[/surligneur]
  (alert (strcat "Moments d'inertie.\nX: "
		 (rtos (car inert) 2 1)
		 "\nY: "
		 (rtos (cadr inert) 2 1)
		 "\nAire de la section: "
		 (rtos (vla-get-Area (car reg)))
		 "\nPérimètre: "
		 (rtos (vla-get-Perimeter (car reg)))
	 )
  )
  (mapcar 'vla-delete lst)
)
     (alert "Pas de région créée.")
     )
   )
 )
 (princ)
) 

[Edité le 22/11/2006 par (gile)]

 

[Edité le 23/11/2006 par (gile)]

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

Posté(e)

Merci pour ce lisp .

 

Il marche tres bien , serais til possible de deplacer la region au point 0,0, et ensuite afficher les données :

Moments d'inerties ,l'aire et le périmetre . :)

 

Pour le probleme des polylignes non fermées , je crois que la solution serait d'automatiser "Modification-objet-polyligne-multiple- Oui-Joindre-type de jointure-les deux- )

Puis recommencer mais cette fois ci finir par clore , et ensuite lancer ton lisp .

Et peut etre commencer par "overkill"

 

Existe til une façon "simple " de faire cela , svp ???

 

 

 

Merci pour vos réponses ,

Posté(e)

Salut,

 

Il marche tres bien , serais til possible de deplacer la region au point 0,0, et ensuite afficher les données :

Moments d'inerties ,l'aire et le périmetre .

Tu ne le vois pas à l'écran, mais le LISP déplace la région (centre de gravité en 0,0) avant de récupérer les moments d'inertie, puis le replace dans sa position initiale.

Si tu veux que la région reste en 0,0 supprime ou met un point virgule devant la ligne :

[surligneur](vla-Move (car reg) (vlax-3d-point '(0 0 0)) (vlax-3d-point cen))[/surligneur]

Je rajoute le périmètre aux informations données dans le message.

Si tu préfères que ces informations apparaissent dans la fenêtre de texte, c'est possible aussi.

 

 

Pour le probleme des polylignes non fermées , je crois que la solution serait d'automatiser "Modification-objet-polyligne-multiple- Oui-Joindre-type de jointure-les deux- )

Voici un petit LISP qui fait ça, je pense qu'il est inutile de clore ou de faire un overkill puisque tous les objets sont ensuite transformés en une région unique par le LISP prop_profil.

 

(defun c:JoinPoly (/ ss)
 (if (setq ss (ssget '((0 . "ARC,LINE,LWPOLYLINE"))))
   (if	(or (= 1 (getvar "PEDITACCEPT"))
    (vl-every '(lambda (x) (= "LWPOLYLINE" (cdr (assoc 0 (entget x)))))
	      (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
    )
)
     (command "_.pedit" "_m" ss "" "_j" "_j" "_b" pause "_c" "")
     (command "_.pedit" "_m" ss "" "_y" "_j" "_j" "_b" pause "_c" "")
   )
 )
 (princ)
) 

[Edité le 23/11/2006 par (gile)]

 

[Edité le 23/11/2006 par (gile)]

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

Posté(e)

Je viens de tester l'enchainement des deux lisp .

:D

Ils marchent tres bien

je dois juste faire clore apres le remier lisp , car sans cela , il ne me créer pas de région dans le second lisp .

 

Je peux donc ainsi transformer un profil aml déssiné en une region fermée avec les caractéristiques méca .

 

Je vais essayer de comprendre comment fonctione les lisp pour pouvoir essayer de me dépatouiller .

 

Merci Encore

 

 

 

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é