Aller au contenu

Spline => Polyligne 2D dans bloc imbriqué


Messages recommandés

Posté(e)

Bonjour à tous,

 

J'ai lu beaucoup discussions sur votre forum sur des sujets similaires, mais...

 

Ma problématique est la suivante :

Je souhaite convertir toutes les splines en polylignes 2D, y compris les splines présentes dans les blocs et même dans des blocs imbriqués.

J'ai testé la commande "FLATTEN" qui fonctionne sur l'ensemble des splines, mais qui les convertit en plusieurs petits segments de polylignes.

 

Pour info, je travaille sur AutoCAD 2013. Le but de cette manip est d'exporter des plans ARCHI vers REVIT qui ne supporte pas les splines et petits segments de polyligne.

 

Si vous avez la réponse à ma requette, je désire par la suite l'intégrer à un LISP que j'ai déjà et qui élimine les solides 2D et hachurages.

 

Par avance merci pour vos réponses.

Posté(e)

Salut,

tu peux aussi essayer ça, ça sera plus facile à implémenter à l'intérieur d'un bloc

pour avoir du lissage, il faut t'inspirer de ce code, mais crer une POLYLIGN avec un code de lissage puis un vertex, puis un sequend.

a+

Gérald

 

 

;***************************************************************************
;§/dessin/Converti une spline en polyligne/none
;
;
(defun c:spl2pl ( / lpt endpa precis para lpt ospl  )
(setq endpa (vlax-curve-getEndParam (setq ospl (vlax-ename->vla-object (car (entsel))))))
(setq precis (getreal "\nLongueur discretisation"))
(setq para (vlax-curve-getStartParam ospl))
(while (< para  endpa)
 (setq pt (vlax-curve-getPointAtParam ospl para))
 (setq para (+ para precis))
 (setq lpt (cons pt lpt))
 
)
(setq lpt (cons (vlax-curve-getPointAtParam ospl endpa) lpt))
(setq lpt (reverse lpt))
(entmake (append
 
 

     '((0 . "LWPOLYLINE"))
     '((100 . "AcDbEntity"))
     '((67 . 0))
     '((410 . "Model"))
     '((100 . "AcDbPolyline"))
     (list (cons 90 (length lpt)))
 
     '((70 . 0))
 '((43 . 0.0))
 '((38 . 0.0))
 '((39 . 0.0))
     (mapcar
       '(lambda (x)
	 (cons 10 x))
       lpt)
     
     '((210 0.0 0.0 1.0))
     
   )
 )
)

----------------------------------------------------------------------

Site: https://www.g-eaux.fr

Blog: http://g-eaux.over-blog.com

Posté(e)

Bonjour à vous,

 

Merci également à toi, CEGEMATIC, pour ta réponse.

 

Le lisp proposé par Bonuscad répond d'avantage à mes attentes.

Il fonctionne bien, mais uniquement pour les splines situées sur le dessin directement.

Les splines situées dans des blocs et/ou dans des blocs imbriqués ne se transforment pas en polylignes 2D...

 

Donc, encore merci à toi Bonuscad.

 

Maintenant, si un p'tit génie du LISP pouvait faire en sorte qu'il s'applique aux blocs imbriqués, ça serait le TOP !!! :)

 

D'avance merci,

Posté(e)

Hello

 

Une idee en passant pour les Splines dans les Blocs et Blocs imbriques !

 

Lors d'un Enregistrer sous en DXF R12, TOUTES les Splines sont automatiquement transformees en Polylignes

On va perdre les champs (a priori), les blocs dynamiques et parametriques, les epaisseurs de ligne et qq autres trucs

mais peut etre que cela n'est pas important pour les blocs concernes !?

 

C juste une idee du vieux decapode en vacances au ski ...

 

Sinon tu trouveras ci-joint une excellente routine de notre INDISPENSABLE Gilles

suite a une demande PERSO pour un besoin proche du tien !

 

Cette routine "BF_Spline" selectionne TOUS les Blocs contenant au moins UNE SPLINE !

C'etait suffisant pour mon besoin, car comme j'en avais peu ...

Je les attaquais tout de suite avec l'editeur de blocs ...

 

Tu verras que la routine est FACILEMENT adaptable pour trouver les blocs ayant par exemple une Ellipse !

 

MERCI Gilles, Bye, lecrabe

 

Autodesk Expert Elite Team

Posté(e)

Salut,

 

Ce que tu demandes me semble assez complexe en LISP.

La routine proposée par bonuscad utilise les commandes natives pour transformer les splines en polylignes 2d splinées. Or on ne pas appeler les commandes depuis ailleurs que l'éditeur d'AutoCAD, et quand on entre dans les définitions de blocs on n'a plus accès à l'éditeur. Il faudrait donc ré-écrire en LISP la partie de la commande PEDIT qui crée les polylignes 2d splinées ou la nouvelle (AutoCAD 2010) option des commandes PEDIT ou EDITSPLINE qui permettent de convertir une spline en polyligne.

 

Avec .NET, le type Spline fournit (depuis 2010) une méthode Spline.ToPolylineWithPrecision() qui offre les mêmes possibilités que l'option "Convertir en polyligne".

J'ai donc essayé de faire quelque chose en utilisant cette fonctionnalité.

 

SplineToPolyline.zip contient 2 DLLs : SplineToPolyline_18.dll pour AutoCAD 2010-2012 et SplineToPolyline_19.dll pour AutoCAD 2013 et plus.

 

Il est possible qu'il soit nécessaire de "débloquer" le fichier ZIP ou les DLLs.

 

Pour charger la DLL dans AutoCAD, utiliser la commande NETLOAD (pour un chargement automatique, voir ici).

 

Ce programme définit deux commandes et une fonction LISP.

SPL2PL qui convertit toutes les splines contenues dans le dessin (y compris dans les blocs) en fonction des paramètres spécifiés dans la petite boite de dialogue :

SplineToPolyline.png

Précision correspond à la même chose qu'avec l'option "Convertir en polyligne" : une valeur entre 0 et 99 qui traduit la précision de l'approxiamtion (plus la valeur est grande, plus grand sera le nombre de sommets/segments.

Type de polyligne permet de spécifier le type de polylignes générées pour les spline planes (les splines 3d génèreront des polylignes 3d) : 2D pour les polyligne 2d "ancienne mode" ou lourdes, Optimisée pour les polyligne "modernes" ou allégeés (variable système PLINETYPE).

Segments de polylignes permet de spécifier le type de segments pour les polylignes 2d ou optimisées (variable système PLINECONVERTMODE).

 

-SPL2PL (avec un tiret) qui offre les mêmes options en ligne commande.

 

gc-Spline2Polyline une fonction LISP qui a le même effet et requiert 3 arguments :

(gc-Spline2Polyline precision plineType plineConvertMode)

precision : un entier entre 0 et 99

plineType : 0 (polyligne 2d) ou 1 (polyligne optimisée)

plineConvertMode : 0 (ligne) ou 1 (arc)

La fonction retourne T si tout s'est bien passé ou nil en cas d'erreur, le message d'erreur sera affiché dans la fen^tre de texte.

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é