philsogood Posté(e) le 6 avril 2016 Posté(e) le 6 avril 2016 helloje cherche à décomposer une lignej'ai une ligne (en l'occurrence un spline) qui est sur le style de trait zigzagje vais pas refaire une speech sur les inconvénients de ce type de ligne mais je souhaiterai savoir si il est possible de décomposer une spline en x ligne à une échelle donnée?je ne crois pas avoir vu de tels lisps mais j'ai peut être mal cherché.merci pour vos lumièresPhilPS : l'idéal serait même de convertir ces mulmtitudes de lignes en une plyligne pour pouvoir l'effacer plus rapidement pour le cas ou on aurait à faire des modifications sur l'objet (qui serait pour le coup inmodifiable - ou presque) Citer Projeteur Revit Indépendant - traitement des eaux/CVC
x_all Posté(e) le 6 avril 2016 Posté(e) le 6 avril 2016 j' ai vu passer un lisp qui converti une spine en poly S2P http://cadxp.com/topic/28979-svp-test-routine-s2plsp-sur-acad-20102011/ Citer quelques trucs sur autocad
Olivier Eckmann Posté(e) le 6 avril 2016 Posté(e) le 6 avril 2016 Bonjour, tu copies/colles ta spline dans un dessin vierge, tu l'enregistres en DXF12, tu le fermes et tu le ré-ouvres, c'est une polyligne. Olivier Citer
(gile) Posté(e) le 6 avril 2016 Posté(e) le 6 avril 2016 Salut, Ça commence à faire quelques versions (au moins 2013) qu'il existe une commande native pour convertir les splines en polylignes : EDITSPLINE (_SPLINEDIT) option : convertir en Polyligne (voir aussi les variables PLINECONVERTMODE et DELOBJ). Cette commande est aussi accessible via le menu contextuel des splines. Citer Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
x_all Posté(e) le 6 avril 2016 Posté(e) le 6 avril 2016 tien? n'étant pas amateur de ce type d'entités, j'étais passé à coté de cette "nouvelle" commandemerci pour la piqure de rappel, comme quoi il y a des développeurs chez tocad qui font autre chose que du design d’icônes(humour off) Citer quelques trucs sur autocad
(gile) Posté(e) le 7 avril 2016 Posté(e) le 7 avril 2016 Re, En fait les méthodes .NET Spline.ToPolyline(), Spline.ToPolyline(uint numOfVertices) et Spline.ToPolylineWithPrecision(int precision) sont arrivées avec la version 2010, on peut donc raisonnablement penser que cette option de la commande EDITSPLINE existe au moins depuis cette version. Citer Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
philsogood Posté(e) le 7 avril 2016 Auteur Posté(e) le 7 avril 2016 hellole problème n'est pas tant la conversion de la SPL en PL (ça fait déjà qqs temps que j'ai un lisp pour cette manip) mais ce que je souhaiterai c'est convertir cette SPL (ou PL convertie) sur le style de ligne zigzag en une autre polyligne qui serait composé de très nombreuses lignes si on venait à la décomposerle gros problème sur les styles de lignes de ce type là c'est que l'affichage varie en fonction de l'échelle à laquelle on imprime.ça rend bien à une échelle et c'est tout pourri à une autre or mon zigzag représente les parois extérieures d'une flexibleune petite image de l'objet que j'ai actuellement (et que je souhaite invariable suivant les échelles)http://img15.hostingpics.net/thumbs/mini_905655flexible.pngj'espère que ça sera plus clair pour vous tousPhil Citer Projeteur Revit Indépendant - traitement des eaux/CVC
bryce Posté(e) le 7 avril 2016 Posté(e) le 7 avril 2016 Bonjour, Ça ne serait pas plus simple de mettre PSLTSCALE à 0 ? Citer Brice, formateur AutoCAD - Inventor - SolidWorks - ZWCad - DraftSight - SketchUp indépendant
bonuscad Posté(e) le 7 avril 2016 Posté(e) le 7 avril 2016 Ce que tu souhaites faire: Décomposer un type de ligne en ligne, n'est pas possible. La seule solution que je percois (et qui n'est pas très pratique) est de faire une sortie traceur en fichier DXB (installer le pilote si celui-ci n'a jamais été utilisé). Une fois l'impression effectuée (avec les bons réglages) réimporter celui-ci avec la commande _DXBIN. A partir de là tu auras effectivement des lignes décomposées de ta représentation de type de ligne. Procédure fastidieuse, mais seul moyen pour obtenir ce résultat. Autrement dessiner le flexible avec un lisp. J'avais récupéré un lisp qui faisait cela, je te le met en ligne si ça peut le faire pour toi. ;;;=======================[ FlexDuct.lsp ]============================== ;;; Author: Copyright© 2007 Charles Alan Butler ;;; Contact or Updates @ www.TheSwamp.org ;;; Version: 1.3 October 6,2007 ;;; Purpose: Create Flex Duct from a centerline that the user picks ;;; Centerline may be anything vla-curve will handle ;;; Sub_Routines: ;;; makePline which creates a LW Polyline ;;; Restrictions: UCS is supported ;;; No layer support at this time ;;; No error handler at this time ;;; Known Issues: ;;; Tight curves cause the pline jacket to cross over ;;; Returns: none ;;;===================================================================== ;;; THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED ; ;;; WARRANTY. ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR ; ;;; PURPOSE AND OF MERCHANTABILITY ARE HEREBY DISCLAIMED. ; ;;; ; ;;; You are hereby granted permission to use, copy and modify this ; ;;; software without charge, provided you do so exclusively for ; ;;; your own use or for use by others in your organization in the ; ;;; performance of their normal duties, and provided further that ; ;;; the above copyright notice appears in all copies and both that ; ;;; copyright notice and the limited warranty and restricted rights ; ;;; notice below appear in all supporting documentation. ; ;;;===================================================================== (defun c:Flex (/ cl-ent ribWidth RibShort RibLong collar dist steps ribFlag pt curAng curDer RibPtLst1 RibPtLst2 p1 p2 doc space cflag cl-len ribRadius tmp NewPline FlexLayer NewPtlst1 NewPtlst2 InsulThick ) (vl-load-com) (setq Doc (vla-get-activedocument (vlax-get-acad-object))) (vla-endundomark doc) (vla-startundomark doc) (setq Flexlayer "0") ; put your Duct layer here (setq InsulThick 0) ; to be added to duct diameter, use 2 for 1" insulation ;; -------- Local Functions --------- ;; Expects pts to be a list of 2D or 3D points (defun makePline (spc pts) (if (= (length (car pts)) 2) ; 2d point list (setq pts (apply 'append pts)) (setq pts (apply 'append (mapcar '(lambda (x) (list (car x) (cadr x))) pts)) ) ) (setq pts (vlax-make-variant (vlax-safearray-fill (vlax-make-safearray vlax-vbdouble (cons 0 (1- (length pts)))) pts ) ) ) (vla-addlightweightpolyline spc pts) ) ;; ------------------------------------- ;; Get the Duct Diameter, global variable (or duct:dia (setq duct:dia 16.0)) ; default value (while ; Main Loop (progn (prompt (strcat "\nDuct diameter is set to " (vl-princ-to-string duct:dia))) (setvar "errno" 0) ; must pre set the errno to 0 (initget "Diametre _Diameter") (setq cl-ent (entsel "\nSelect center of flex duct.[Diameter] Enter to quit.") ) (cond ((= (getvar "errno") 52) ; exit if user pressed ENTER nil ; exit loop ) ((= cl-ent "Diameter") (initget (+ 2 4)) (setq tmp (getdist (strcat "\nSpecify duct diameter <" (rtos duct:dia) ">: ") ) ) (and tmp (setq duct:dia tmp)) t ; stay in loop ) ((not (null cl-ent)) ;; check entity before making the duct (if (not (vl-catch-all-error-p (setq tmp (vl-catch-all-apply 'vlax-curve-getpointatparam (list (car cl-ent) 0.0) ) ) ) ) (progn ; OK to make duct (setq cl-ent (car cl-ent) ; Center Line ribWidth (* duct:dia 0.167) RibShort (+ duct:dia InsulThick) ; add insulation RibLong (+ RibShort (* ribWidth 2)) ) ;; centerline length (setq cl-len (vlax-curve-getdistatparam cl-ent (vlax-curve-getendparam cl-ent) ) steps (/ cl-len ribWidth) ) (if (= (logand (fix steps) 1) 1) ; T = odd (setq steps (fix steps)) (setq steps (1+ (fix steps))) ) (setq ribWidth (/ (- cl-len 0.25) (1- steps)) collar (* 3 ribWidth) ; collar at each end dist 0.125 ; distance along center line ) (setq ribFlag 0 cflag t ) ;; ---------- Create Rib End Points ----------- (repeat steps (setq pt (vlax-curve-getpointatdist cl-ent dist)) (setq curDer (trans (vlax-curve-getfirstderiv cl-ent (vlax-curve-getparamatpoint cl-ent pt) ) 0 1 ) ) ;; Get angle 90 deg to curve (setq curAng (+ (/ pi 2) (angle '(0 0) curDer))) (setq ribRadius (if (zerop ribFlag) (/ RibShort 2) (/ RibLong 2))) (setq pt (trans pt 0 1)) ; WCS > UCS (setq p1 (polar pt curAng ribRadius)) (setq p2 (polar pt (+ pi curAng) ribRadius)) (if cflag ; create start collar points (setq RibPtLst1 (list (polar p1 (angle curDer '(0 0)) collar)) RibPtLst2 (list (polar p2 (angle curDer '(0 0)) collar)) cflag nil ) ) (setq RibPtLst1 (cons p1 RibPtLst1)) (setq RibPtLst2 (cons p2 RibPtLst2)) (setq ribFlag (- 1 ribFlag) dist (+ ribWidth dist) ) ) ;; create end collar points (setq RibPtLst1 (cons (polar p1 (angle '(0 0) curDer) collar) RibPtLst1) RibPtLst2 (cons (polar p2 (angle '(0 0) curDer) collar) RibPtLst2) ) ;; rearrange point lists (setq idx 0 NewPtlst1 nil NewPtlst2 nil ) (repeat (1- (length RibPtLst1)) (if (= (logand idx 1) 1) ; T = odd (setq NewPtlst1 (cons (nth idx RibPtLst2) NewPtlst1) NewPtlst1 (cons (nth (1+ idx) RibPtLst2) NewPtlst1) NewPtlst2 (cons (nth idx RibPtLst1) NewPtlst2) NewPtlst2 (cons (nth (1+ idx) RibPtLst1) NewPtlst2) ) (setq NewPtlst1 (cons (nth idx RibPtLst1) NewPtlst1) NewPtlst1 (cons (nth (1+ idx) RibPtLst1) NewPtlst1) NewPtlst2 (cons (nth idx RibPtLst2) NewPtlst2) NewPtlst2 (cons (nth (1+ idx) RibPtLst2) NewPtlst2) ) ) (setq idx (1+ idx)) ) ;; -------- point list to WCS ------------ (setq NewPtlst1 (mapcar '(lambda (x) (trans x 1 0)) NewPtlst1)) (setq NewPtlst2 (mapcar '(lambda (x) (trans x 1 0)) NewPtlst2)) ;; -------- create jacket plines ------------ (or space (setq space (if (zerop (vla-get-activespace doc)) (if (= (vla-get-mspace doc) :vlax-true) (vla-get-modelspace doc) ; active VP (vla-get-paperspace doc) ) (vla-get-modelspace doc) ) ) ) (setq newpline (makePline space NewPtlst1)) (vla-put-layer newpline Flexlayer) ;;(vla-put-elevation newpline z) (setq newpline (makePline space NewPtlst2)) (vla-put-layer newpline Flexlayer) ;;(vla-put-elevation newpline z) ) ; progn (princ "\nError - Can not use that object, Try again.") ) ; endif t ) (t (princ "\nMissed Try again.")) ) ; cond stmt ) ; progn ) ; while (vla-endundomark doc) (vlax-release-object space) (vlax-release-object doc) ;;----------- E N D O F L I S P ---------------------------- (princ) ) (prompt "\nFlex Duct loaded, Enter FLEX to run.") (princ) Citer Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
(gile) Posté(e) le 7 avril 2016 Posté(e) le 7 avril 2016 Salut, le gros problème sur les styles de lignes de ce type là c'est que l'affichage varie en fonction de l'échelle à laquelle on imprime.ça rend bien à une échelle et c'est tout pourri à une autre or mon zigzag représente les parois extérieures d'une flexible Je pense, comme Bryce, que la variable PSLTSCALE sert précisément à ça, par contre, je dirais qu'il faut la mettre à 1. Il faut, bien sûr, régler LTSCALE pour avoir un affichage correct en espace papier (mm par défaut) et régénérer chaque fenêtre. Citer Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Messages recommandés