CADxp: Couper polyligne avec OD à chaque sommet - CADxp

Aller au contenu

Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

Couper polyligne avec OD à chaque sommet

#1 L'utilisateur est hors-ligne   Hyppolight 

  • ceinture orange
  • Groupe : Membres
  • Messages : 27
  • Inscrit(e) : 12-janvier 15

Posté 05 décembre 2015 - 09:51

Bonjour,

J'utilise depuis longtemps le lisp MAPBREAK de (gile) permettant de couper une poyligne en deux tout en conservant les données d'objets sur les 2 poylignes. (Voir fichier lisp ci-joint)

Je viens de découvrir le lisp break_lw de Bonuscad permettant d'itérer sur l'ensemble des polylignes d'un dwg et de les coupés à chaque sommet. (Voir fichier lisp ci-joint)

J'aurais aimé savoir s'il était possible de combiner les deux afin de pouvoir couper toutes les poylignes d'un dwg à chacun de ces sommets tout en conservant les données d'objets?

Par avance merci.

Hyppolight

Fichier(s) joint(s)

  • Fichier joint  MAPBRK.lsp (6,32 Ko)
    Nombre de téléchargements : 9
  • Fichier joint  break_lw.lsp (6,13 Ko)
    Nombre de téléchargements : 7

0

#2 L'utilisateur est hors-ligne   bonuscad 

  • ceinture rouge et blanche 8em dan
  • Groupe : Membres
  • Messages : 4657
  • Inscrit(e) : 20-juin 03

Posté 05 décembre 2015 - 14:58

Bonjour,

Alors je vais compléter le mien.
RESTRICTIONS: NE COPIE PAS les données empilées. (seul le premier enregistrement est lu)

(defun c:break_lw@vtx_withOD ( / js i ent dxf_obj xd_l dxf_43 dxf_38 dxf_39 dxf_10 dxf_40 dxf_41 dxf_42 dxf_39 dxf_210 n lst_data nwent tbldef )
  (initget "Toutes Sélection _All Select")
  (if (eq (getkword "\nLWPolylignes à couper à chaque sommets? [Toutes/Sélection] <Sélection>: ") "All")
	(setq
  	js
    	(ssget "_X" 
      	(list
        	(cons 0 "LWPOLYLINE")
        	(cons 67 (if (eq (getvar "CVPORT") 2) 0 1))
        	(cons 410 (if (eq (getvar "CVPORT") 2) "Model" (getvar "CTAB")))
      	)
    	)
  	i -1
	)
	(setq
  	js
    	(ssget
      	(list
        	(cons 0 "LWPOLYLINE")
        	(cons 67 (if (eq (getvar "CVPORT") 2) 0 1))
        	(cons 410 (if (eq (getvar "CVPORT") 2) "Model" (getvar "CTAB")))
      	)
    	)
  	i -1
	)
  )
  (cond
	(js
  	(repeat (sslength js)
    	(setq
      	dxf_obj (entget (setq ent (ssname js (setq i (1+ i)))) (list "*"))
      	xd_l (assoc -3 dxf_obj)
    	)
    	(if (cdr (assoc 43 dxf_obj))
      	(setq dxf_43 (cdr (assoc 43 dxf_obj)))
      	(setq dxf_43 0.0)
    	)
    	(if (cdr (assoc 38 dxf_obj))
      	(setq dxf_38 (cdr (assoc 38 dxf_obj)))
      	(setq dxf_38 0.0)
    	)
    	(if (cdr (assoc 39 dxf_obj))
      	(setq dxf_39 (cdr (assoc 39 dxf_obj)))
      	(setq dxf_39 0.0)
    	)
    	(setq
      	dxf_10 (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) dxf_obj))
      	dxf_40 (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 40)) dxf_obj))
      	dxf_41 (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 41)) dxf_obj))
      	dxf_42 (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 42)) dxf_obj))
      	dxf_210 (cdr (assoc 210 dxf_obj))
    	)
    	(if (not (zerop (boole 1 (cdr (assoc 70 dxf_obj)) 1)))
      	(setq
        	dxf_10 (append dxf_10 (list (car dxf_10)))
        	dxf_40 (append dxf_40 (list (car dxf_40)))
        	dxf_41 (append dxf_41 (list (car dxf_41)))
        	dxf_42 (append dxf_42 (list (car dxf_42)))
        	n (cdr (assoc 90 dxf_obj))
      	)
      	(setq n (1- (cdr (assoc 90 dxf_obj))))
    	)
    	(repeat n
      	(entmake
        	(append
          	(list
            	(cons 0 "LWPOLYLINE")
            	(cons 100 "AcDbEntity")
            	(assoc 67 dxf_obj)
            	(assoc 410 dxf_obj)
            	(assoc 8 dxf_obj)
            	(if (assoc 62 dxf_obj) (assoc 62 dxf_obj) (cons 62 256))
            	(if (assoc 6 dxf_obj) (assoc 6 dxf_obj) (cons 6 "BYLAYER"))
            	(if (assoc 370 dxf_obj) (assoc 370 dxf_obj) (cons 370 -1))
            	(cons 100 "AcDbPolyline")
            	(cons 90 2)
            	(cons 70 (boole 1 (cdr (assoc 70 dxf_obj)) 128))
            	(cons 38 dxf_38)
            	(cons 39 dxf_39)
            	(cons 10 (car dxf_10))
            	(cons 40 (car dxf_40))
            	(cons 41 (car dxf_41))
            	(cons 42 (car dxf_42))
            	(cons 10 (cadr dxf_10))
            	(cons 40 (cadr dxf_40))
            	(cons 41 (cadr dxf_41))
            	(cons 42 (cadr dxf_42))
            	(assoc 210 dxf_obj)
          	)
          	(if xd_l (list xd_l) '())
        	)
      	)
      	(setq dxf_10 (cdr dxf_10) dxf_40 (cdr dxf_40) dxf_41 (cdr dxf_41) dxf_42 (cdr dxf_42) lst_data nil nwent (entlast))
      	(if
        	(or
          	(numberp (vl-string-search "Map 3D" (vla-get-caption (vlax-get-acad-object))))
          	(numberp (vl-string-search "Civil 3D" (vla-get-caption (vlax-get-acad-object))))
        	)
        	(progn
          	(foreach n (ade_odgettables ent)
            	(setq tbldef (ade_odtabledefn n))
            	(setq lst_data
              	(cons
                	(mapcar
                  	'(lambda (fld / tmp_rec numrec)
                    	(setq numrec (ade_odrecordqty ent n))
                    	(cons
                      	n
                      	(while (not (zerop numrec))
                        	(setq numrec (1- numrec))
                        	(if (zerop numrec)
                          	(if tmp_rec
                            	(cons fld (list (cons (ade_odgetfield ent n fld numrec) tmp_rec)))
                            	(cons fld (ade_odgetfield ent n fld numrec))
                          	)
                          	(setq tmp_rec (cons (ade_odgetfield ent n fld numrec) tmp_rec))
                        	)
                      	)
                    	)
                  	)
                  	(mapcar 'cdar (cdaddr tbldef))
                	)
                	lst_data
              	)
            	)
          	)
          	(cond
            	(lst_data
              	(mapcar
                	'(lambda (x / ct)
                  	(while (< (ade_odrecordqty nwent (caar x)) (ade_odrecordqty ent (caar x)))
                    	(ade_odaddrecord nwent (caar x))
                  	)
                  	(foreach el (mapcar 'cdr x)
                    	(if (listp (cdr el))
                      	(progn
                        	(setq ct -1)
                        	(mapcar
                          	'(lambda (y / )
                            	(ade_odsetfield nwent (caar x) (car el) (setq ct (1+ ct)) y)
                          	)
                          	(cadr el)
                        	)
                      	)
                      	(ade_odsetfield nwent (caar x) (car el) 0 (cdr el))
                    	)
                  	)
                	)
                	lst_data
              	)
            	)
          	)
        	)
      	)
    	)
    	(entdel ent)
  	)
  	(print (sslength js)) (princ " LWpolyligne(s) coupée(s) à ses sommets avec ses Object Datas.")
	)
  )
  (prin1)
)
 


EDIT du 14-05-19: lève la restriction sur les N records

Ce message a été modifié par bonuscad - 14 mai 2019 - 15:02 .

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
1

#3 L'utilisateur est hors-ligne   Hyppolight 

  • ceinture orange
  • Groupe : Membres
  • Messages : 27
  • Inscrit(e) : 12-janvier 15

Posté 05 décembre 2015 - 18:15

Re-bonjour,

Un grand merci pour la spontanéité...

J'ai testé sur un petit bout du SIG que j'ai a traité et ca marche parfaitement...

Merci également pour la restriction, je la connaissais mais c'est gentil de préciser.


Voir le messagebonuscad, le 05 décembre 2015 - 14:58 , dit :

Bonjour,

Alors je vais compléter le mien.
RESTRICTIONS: NE COPIE PAS les données empilées. (seul le premier enregistrement est lu)

(defun c:break_lw_withOD ( / js i ent dxf_obj dxf_43 dxf_38 dxf_39 dxf_10 dxf_40 dxf_41 dxf_42 dxf_39 dxf_210 n lst_data nwent tbldef )
  (initget "Toutes Sélection _All Select")
  (if (eq (getkword "\nLWPolylignes à couper à chaque sommets? [Toutes/Sélection] <Sélection>: ") "All")
    (setq
      js
        (ssget "_X" 
          (list
            (cons 0 "LWPOLYLINE")
            (cons 67 (if (eq (getvar "CVPORT") 2) 0 1))
            (cons 410 (if (eq (getvar "CVPORT") 2) "Model" (getvar "CTAB")))
          )
        )
      i -1
    )
    (setq
      js
        (ssget
          (list
            (cons 0 "LWPOLYLINE")
            (cons 67 (if (eq (getvar "CVPORT") 2) 0 1))
            (cons 410 (if (eq (getvar "CVPORT") 2) "Model" (getvar "CTAB")))
          )
        )
      i -1
    )
  )
  (cond
    (js
      (repeat (sslength js)
        (setq dxf_obj (entget (setq ent (ssname js (setq i (1+ i))))))
        (if (cdr (assoc 43 dxf_obj))
          (setq dxf_43 (cdr (assoc 43 dxf_obj)))
          (setq dxf_43 0.0)
        )
        (if (cdr (assoc 38 dxf_obj))
          (setq dxf_38 (cdr (assoc 38 dxf_obj)))
          (setq dxf_38 0.0)
        )
        (if (cdr (assoc 39 dxf_obj))
          (setq dxf_39 (cdr (assoc 39 dxf_obj)))
          (setq dxf_39 0.0)
        )
        (setq
          dxf_10 (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) dxf_obj))
          dxf_40 (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 40)) dxf_obj))
          dxf_41 (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 41)) dxf_obj))
          dxf_42 (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 42)) dxf_obj))
          dxf_210 (cdr (assoc 210 dxf_obj))
        )
        (if (not (zerop (boole 1 (cdr (assoc 70 dxf_obj)) 1)))
          (setq
            dxf_10 (append dxf_10 (list (car dxf_10)))
            dxf_40 (append dxf_40 (list (car dxf_40)))
            dxf_41 (append dxf_41 (list (car dxf_41)))
            dxf_42 (append dxf_42 (list (car dxf_42)))
            n (cdr (assoc 90 dxf_obj))
          )
          (setq n (1- (cdr (assoc 90 dxf_obj))))
        )
        (repeat n
          (entmake
            (list
              (cons 0 "LWPOLYLINE")
              (cons 100 "AcDbEntity")
              (assoc 67 dxf_obj)
              (assoc 410 dxf_obj)
              (assoc 8 dxf_obj)
              (if (assoc 62 dxf_obj) (assoc 62 dxf_obj) (cons 62 256))
              (if (assoc 6 dxf_obj) (assoc 6 dxf_obj) (cons 6 "BYLAYER"))
              (if (assoc 370 dxf_obj) (assoc 370 dxf_obj) (cons 370 -1))
              (cons 100 "AcDbPolyline")
              (cons 90 2)
              (cons 70 (boole 1 (cdr (assoc 70 dxf_obj)) 128))
              (cons 38 dxf_38)
              (cons 39 dxf_39)
              (cons 10 (car dxf_10))
              (cons 40 (car dxf_40))
              (cons 41 (car dxf_41))
              (cons 42 (car dxf_42))
              (cons 10 (cadr dxf_10))
              (cons 40 (cadr dxf_40))
              (cons 41 (cadr dxf_41))
              (cons 42 (cadr dxf_42))
              (assoc 210 dxf_obj)
            )
          )
          (setq dxf_10 (cdr dxf_10) dxf_40 (cdr dxf_40) dxf_41 (cdr dxf_41) dxf_42 (cdr dxf_42) lst_data nil nwent (entlast))
          (foreach n (ade_odgettables ent)
            (setq tbldef (ade_odtabledefn n))
            (setq lst_data (cons (mapcar '(lambda (fld) (cons n (cons fld (ade_odgetfield ent n fld 0)))) (mapcar 'cdar (cdr (nth 2 tbldef)))) lst_data))
          )
          (cond
            (lst_data
              (mapcar '(lambda (x) (ade_odaddrecord nwent (caar x)) (foreach el x (ade_odsetfield nwent (car el) (cadr el) 0 (cddr el)))) lst_data)
            )
          )
        )
        (entdel ent)
      )
      (print (sslength js)) (princ " LWpolyligne(s) coupée(s) à ses sommets avec ses Object Datas.")
    )
  )
  (prin1)
)


0

#4 L'utilisateur est hors-ligne   lili2006 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 11935
  • Inscrit(e) : 21-décembre 05

Posté 05 décembre 2015 - 19:03

Bonsoir à toutes et tous,

Citation

RESTRICTIONS: NE COPIE PAS les données empilées. (seul le premier enregistrement est lu)

Quelqu'un pourrait développer un peu SVP ?

Merci d'avance,
AutoCAD MAP 3D 2020 - Covadis 17.0e
Forum : http://genie-civil.bbactif.com/
0

#5 L'utilisateur est hors-ligne   lecrabe 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 8368
  • Inscrit(e) : 10-décembre 03
  • LocationLoire (42)

Posté 07 décembre 2015 - 09:29

Hello

Avec AutoCAD MAP (ou CIVIL) on affecte une table OD (prealablement definie) sur un objet graphique, et ensuite on "remplit" les ODs ...

Sauf que (si on manipule MAL), on peut avoir N records OD pour UNE table OD !
Dans ce cas, on ne voit par la case de dialogue des proprietes (ou par un MAPEXPORT) que le PREMIER record OD !!

Seule la commande ADEEDITDATA (ou par programmation) permet de voir/modifier/supprimer les N records OD !!!

Bye, lecrabe
Autodesk Expert Elite Team
0

#6 L'utilisateur est hors-ligne   lili2006 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 11935
  • Inscrit(e) : 21-décembre 05

Posté 07 décembre 2015 - 19:53

Bonsoir à toutes et tous,

Salut Patrice,

Merci pour ces précisions mais comment on peut avoir =>

Citation

N records OD pour UNE table OD
! ???



Merci d'avance,


(PS: Tu connais mon niveau sous MAp d'ou cette demande de précision,...Image IPB)
AutoCAD MAP 3D 2020 - Covadis 17.0e
Forum : http://genie-civil.bbactif.com/
0

#7 L'utilisateur est hors-ligne   bonuscad 

  • ceinture rouge et blanche 8em dan
  • Groupe : Membres
  • Messages : 4657
  • Inscrit(e) : 20-juin 03

Posté 14 mai 2019 - 14:58

Bonjour à tous,
Alors 4 ans après, toujours dans la même optique: couper une LWPOLYLINE (avec ou sans arc, fermée ou pas) sans perdre les données d'objet attachés mais à la différence qu'ici cela permettra de couper celles-ci aux intersections avec d'autres objets.Normalement (si pas de bug) copie aussi les N records et les Xdata si existants et fonctionne depuis et dans n'importe quel SCU.
J'ai fais des tests qui se sont bien déroulés, mais des cas entraînant un bug reste possible.Je vais aussi éditer le post #2 pour le mettre au goût du jour.
Ces routines doivent pouvoir aussi fonctionner sans Autocad Map ou Civil, mais dans ce cas bien sur les OD ne sont pas traitées.
(vl-load-com)
(defun add_vtx (obj add_pt ent_name / bulg)
  (vla-addVertex
	obj
	(1+ (fix add_pt))
	(vlax-make-variant
  	(vlax-safearray-fill
    	(vlax-make-safearray vlax-vbdouble (cons 0 1))
      	(list
        	(car (trans (vlax-curve-getpointatparam obj add_pt) 0 ent_name))
        	(cadr (trans (vlax-curve-getpointatparam obj add_pt) 0 ent_name))
      	)
  	)
	)
  )
  (setq bulg (vla-GetBulge obj (fix add_pt)))
  (vla-SetBulge obj
	(fix add_pt)
	(/
  	(sin (/ (* 4 (atan bulg) (- add_pt (fix add_pt))) 4))
  	(cos (/ (* 4 (atan bulg) (- add_pt (fix add_pt))) 4))
	)
  )
  (vla-SetBulge obj
	(1+ (fix add_pt))
	(/
  	(sin (/ (* 4 (atan bulg) (- (1+ (fix add_pt)) add_pt)) 4))
  	(cos (/ (* 4 (atan bulg) (- (1+ (fix add_pt)) add_pt)) 4))
	)
  )
  (vla-update obj)
)
(defun c:break_lw_withOD ( / js i js_b i ent obj nb tmp_obj vrt_pt pt lst_pt dxf_obj xd_l dxf_43 dxf_38 dxf_39 dxf_10 dxf_40 dxf_41 dxf_42 dxf_39 dxf_210 n_vtx l nwent tbldef lst_data)
  (princ "\nSélection des LWPOLYLINE à couper")
  (setq js
	(ssget
  	(list
    	(cons 0 "LWPOLYLINE")
    	(cons 67 (if (eq (getvar "CVPORT") 2) 0 1))
    	(cons 410 (if (eq (getvar "CVPORT") 2) "Model" (getvar "CTAB")))
  	)
	)
  )
  (princ "\nSélection des objets curvilignes coupant les polylignes")
  (setq js_b
	(ssget
  	(list
    	(cons 0 "LINE,ARC,SPLINE,LWPOLYLINE,POLYLINE,CIRCLE,ELLIPSE,XLINE,RAY,MPOLYGON")
    	(cons 67 (if (eq (getvar "CVPORT") 2) 0 1))
    	(cons 410 (if (eq (getvar "CVPORT") 2) "Model" (getvar "CTAB")))
  	)
	)
  )
  (cond
	((and js js_B)
  	(repeat (setq i (sslength js))
    	(setq
      	ent (ssname js (setq i (1- i)))
      	obj (vlax-ename->vla-object ent)
    	)
    	(repeat (setq nb (sslength js_B))
      	(setq tmp_name (ssname js_b (setq nb (1- nb))))
      	(cond
        	(tmp_name
          	(setq
            	tmp_obj (vlax-ename->vla-object tmp_name)
            	vrt_pt (vlax-variant-value (vla-IntersectWith obj tmp_obj 0))
          	)
          	(if (>= (vlax-safearray-get-u-bound vrt_pt 1) 0)
            	(progn
              	(setq pt (vlax-safearray->list vrt_pt))
              	(if pt
                	(if (> (length pt) 3)
                  	(repeat (/ (length pt) 3)
                    	(setq lst_pt (cons (list (car pt) (cadr pt) (caddr pt)) lst_pt) pt (cdddr pt))
                  	)
                  	(setq lst_pt (cons pt lst_pt))
                	)
              	)
            	)
          	)
        	)
      	)
    	)
    	(if (and lst_pt (listp lst_pt))
      	(foreach el lst_pt
        	(add_vtx obj (vlax-curve-getparamatpoint obj (vlax-curve-getClosestPointTo obj el)) ent)
      	)
    	)
    	(setq
      	dxf_obj (entget (vlax-vla-object->ename obj) (list "*"))
      	xd_l (assoc -3 dxf_obj)
    	)
    	(if (cdr (assoc 43 dxf_obj))
      	(setq dxf_43 (cdr (assoc 43 dxf_obj)))
      	(setq dxf_43 0.0)
    	)
    	(if (cdr (assoc 38 dxf_obj))
      	(setq dxf_38 (cdr (assoc 38 dxf_obj)))
      	(setq dxf_38 0.0)
    	)
    	(if (cdr (assoc 39 dxf_obj))
      	(setq dxf_39 (cdr (assoc 39 dxf_obj)))
      	(setq dxf_39 0.0)
    	)
    	(setq
      	dxf_10 (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) dxf_obj))
      	dxf_40 (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 40)) dxf_obj))
      	dxf_41 (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 41)) dxf_obj))
      	dxf_42 (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 42)) dxf_obj))
      	dxf_210 (cdr (assoc 210 dxf_obj))
    	)
    	(if (not (zerop (boole 1 (cdr (assoc 70 dxf_obj)) 1)))
      	(setq
        	dxf_10 (append dxf_10 (list (car dxf_10)))
        	dxf_40 (append dxf_40 (list (car dxf_40)))
        	dxf_41 (append dxf_41 (list (car dxf_41)))
        	dxf_42 (append dxf_42 (list (car dxf_42)))
      	)
    	)
    	(setq lst_pt (reverse (mapcar '(lambda (x) (list (car (trans x 0 ent)) (cadr (trans x 0 ent)))) lst_pt)))
    	(repeat (length lst_pt)
      	(setq n_vtx -1 l nil)
      	(entmake
        	(append
          	(list
            	(cons 0 "LWPOLYLINE")
            	(cons 100 "AcDbEntity")
            	(assoc 67 dxf_obj)
            	(assoc 410 dxf_obj)
            	(assoc 8 dxf_obj)
            	(if (assoc 62 dxf_obj) (assoc 62 dxf_obj) (cons 62 256))
            	(if (assoc 6 dxf_obj) (assoc 6 dxf_obj) (cons 6 "BYLAYER"))
            	(if (assoc 370 dxf_obj) (assoc 370 dxf_obj) (cons 370 -1))
            	(cons 100 "AcDbPolyline")
            	(cons 90 (1+ (vl-position T (mapcar '(lambda (x) (equal x (car lst_pt) 1E-8)) dxf_10))))
            	(cons 70 (boole 1 (cdr (assoc 70 dxf_obj)) 128))
            	(cons 38 dxf_38)
            	(cons 39 dxf_39)
          	)
          	(reverse
            	(repeat (1+ (vl-position T (mapcar '(lambda (x) (equal x (car lst_pt) 1E-8)) dxf_10)))
              	(setq l
                	(append
                  	(list
                    	(cons 42 (nth (1+ n_vtx) dxf_42))
                    	(cons 41 (nth (1+ n_vtx) dxf_41))
                    	(cons 40 (nth (1+ n_vtx) dxf_40))
                    	(cons 10 (nth (setq n_vtx (1+ n_vtx)) dxf_10))
                  	)
                  	l
                	)
              	)
            	)
          	)
          	(list (assoc 210 dxf_obj))
          	(if xd_l (list xd_l) '())
        	)
      	)
      	(repeat n_vtx
        	(setq dxf_10 (cdr dxf_10) dxf_40 (cdr dxf_40) dxf_41 (cdr dxf_41) dxf_42 (cdr dxf_42))
      	)
      	(setq lst_pt (cdr lst_pt) lst_data nil nwent (entlast))
      	(if
        	(or
          	(numberp (vl-string-search "Map 3D" (vla-get-caption (vlax-get-acad-object))))
          	(numberp (vl-string-search "Civil 3D" (vla-get-caption (vlax-get-acad-object))))
        	)
        	(progn
          	(foreach n (ade_odgettables ent)
            	(setq tbldef (ade_odtabledefn n))
            	(setq lst_data
              	(cons
                	(mapcar
                  	'(lambda (fld / tmp_rec numrec)
                    	(setq numrec (ade_odrecordqty ent n))
                    	(cons
                      	n
                      	(while (not (zerop numrec))
                        	(setq numrec (1- numrec))
                        	(if (zerop numrec)
                          	(if tmp_rec
                            	(cons fld (list (cons (ade_odgetfield ent n fld numrec) tmp_rec)))
                            	(cons fld (ade_odgetfield ent n fld numrec))
                          	)
                          	(setq tmp_rec (cons (ade_odgetfield ent n fld numrec) tmp_rec))
                        	)
                      	)
                    	)
                  	)
                  	(mapcar 'cdar (cdaddr tbldef))
                	)
                	lst_data
              	)
            	)
          	)
          	(cond
            	(lst_data
              	(mapcar
                	'(lambda (x / ct)
                  	(while (< (ade_odrecordqty nwent (caar x)) (ade_odrecordqty ent (caar x)))
                    	(ade_odaddrecord nwent (caar x))
                  	)
                  	(foreach el (mapcar 'cdr x)
                    	(if (listp (cdr el))
                      	(progn
                        	(setq ct -1)
                        	(mapcar
                          	'(lambda (y / )
                            	(ade_odsetfield nwent (caar x) (car el) (setq ct (1+ ct)) y)
                          	)
                          	(cadr el)
                        	)
                      	)
                      	(ade_odsetfield nwent (caar x) (car el) 0 (cdr el))
                    	)
                  	)
                	)
                	lst_data
              	)
            	)
          	)
        	)
      	)
    	)
    	(setq n_vtx -1 l nil)
    	(entmake
      	(append
        	(list
          	(cons 0 "LWPOLYLINE")
          	(cons 100 "AcDbEntity")
          	(assoc 67 dxf_obj)
          	(assoc 410 dxf_obj)
          	(assoc 8 dxf_obj)
          	(if (assoc 62 dxf_obj) (assoc 62 dxf_obj) (cons 62 256))
          	(if (assoc 6 dxf_obj) (assoc 6 dxf_obj) (cons 6 "BYLAYER"))
          	(if (assoc 370 dxf_obj) (assoc 370 dxf_obj) (cons 370 -1))
          	(cons 100 "AcDbPolyline")
          	(cons 90 (length dxf_10))
          	(cons 70 (boole 1 (cdr (assoc 70 dxf_obj)) 128))
          	(cons 38 dxf_38)
          	(cons 39 dxf_39)
        	)
        	(reverse
        	(repeat (length dxf_10)
          	(setq l
            	(append
              	(list
                	(cons 42 (nth (1+ n_vtx) dxf_42))
                	(cons 41 (nth (1+ n_vtx) dxf_41))
                	(cons 40 (nth (1+ n_vtx) dxf_40))
                	(cons 10 (nth (setq n_vtx (1+ n_vtx)) dxf_10))
              	)
              	l
            	)
          	)
        	)
        	)
        	(list (assoc 210 dxf_obj))
        	(if xd_l (list xd_l) '())
      	)
    	)
    	(setq lst_data nil nwent (entlast))
    	(if
      	(or
        	(numberp (vl-string-search "Map 3D" (vla-get-caption (vlax-get-acad-object))))
        	(numberp (vl-string-search "Civil 3D" (vla-get-caption (vlax-get-acad-object))))
      	)
      	(progn
        	(foreach n (ade_odgettables ent)
          	(setq tbldef (ade_odtabledefn n))
          	(setq lst_data
            	(cons
              	(mapcar
                	'(lambda (fld / tmp_rec numrec)
                  	(setq numrec (ade_odrecordqty ent n))
                  	(cons
                    	n
                    	(while (not (zerop numrec))
                      	(setq numrec (1- numrec))
                      	(if (zerop numrec)
                        	(if tmp_rec
                          	(cons fld (list (cons (ade_odgetfield ent n fld numrec) tmp_rec)))
                          	(cons fld (ade_odgetfield ent n fld numrec))
                        	)
                        	(setq tmp_rec (cons (ade_odgetfield ent n fld numrec) tmp_rec))
                      	)
                    	)
                  	)
                	)
                	(mapcar 'cdar (cdaddr tbldef))
              	)
              	lst_data
            	)
          	)
        	)
        	(cond
          	(lst_data
            	(mapcar
              	'(lambda (x / ct)
                	(while (< (ade_odrecordqty nwent (caar x)) (ade_odrecordqty ent (caar x)))
                  	(ade_odaddrecord nwent (caar x))
                	)
                	(foreach el (mapcar 'cdr x)
                  	(if (listp (cdr el))
                    	(progn
                      	(setq ct -1)
                      	(mapcar
                        	'(lambda (y / )
                          	(ade_odsetfield nwent (caar x) (car el) (setq ct (1+ ct)) y)
                        	)
                        	(cadr el)
                      	)
                    	)
                    	(ade_odsetfield nwent (caar x) (car el) 0 (cdr el))
                  	)
                	)
              	)
              	lst_data
            	)
          	)
        	)
      	)
    	)
    	(entdel ent)
  	)
  	(print (sslength js)) (princ " LWpolyligne(s) coupée(s) aux points d'intersection  avec ses Object Datas.")
	)
  )
  (prin1)
)


Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
0

#8 L'utilisateur est hors-ligne   Hyppolight 

  • ceinture orange
  • Groupe : Membres
  • Messages : 27
  • Inscrit(e) : 12-janvier 15

Posté 14 mai 2019 - 16:00

Bonjour,

4 ans après, nouvelle phase de test... je viens de mettre à jour le lisp et la mise à jour a l'air de bien fonctionner.. ;)

Ci-dessous le lisp pour traiter toutes les entités d'un fichiers

(defun c:BREAK_LW_WITH_OD ( / js i ent dxf_obj dxf_43 dxf_38 dxf_39 dxf_10 dxf_40 dxf_41 dxf_42 dxf_39 dxf_210 n lst_data nwent tbldef )
  (initget "Toutes Sélection _All Select")
  (if (eq (getkword "\nLWPolylignes à couper à chaque sommets? [Toutes/Sélection] <Sélection>: ") "All")
    (setq
      js
        (ssget "_X" 
          (list
            (cons 0 "LWPOLYLINE")
            (cons 67 (if (eq (getvar "CVPORT") 2) 0 1))
            (cons 410 (if (eq (getvar "CVPORT") 2) "Model" (getvar "CTAB")))
          )
        )
      i -1
    )
    (setq
      js
        (ssget
          (list
            (cons 0 "LWPOLYLINE")
            (cons 67 (if (eq (getvar "CVPORT") 2) 0 1))
            (cons 410 (if (eq (getvar "CVPORT") 2) "Model" (getvar "CTAB")))
          )
        )
      i -1
    )
  )
  (cond
    (js
      (repeat (sslength js)
        (setq dxf_obj (entget (setq ent (ssname js (setq i (1+ i))))))
        (if (cdr (assoc 43 dxf_obj))
          (setq dxf_43 (cdr (assoc 43 dxf_obj)))
          (setq dxf_43 0.0)
        )
        (if (cdr (assoc 38 dxf_obj))
          (setq dxf_38 (cdr (assoc 38 dxf_obj)))
          (setq dxf_38 0.0)
        )
        (if (cdr (assoc 39 dxf_obj))
          (setq dxf_39 (cdr (assoc 39 dxf_obj)))
          (setq dxf_39 0.0)
        )
        (setq
          dxf_10 (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) dxf_obj))
          dxf_40 (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 40)) dxf_obj))
          dxf_41 (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 41)) dxf_obj))
          dxf_42 (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 42)) dxf_obj))
          dxf_210 (cdr (assoc 210 dxf_obj))
        )
        (if (not (zerop (boole 1 (cdr (assoc 70 dxf_obj)) 1)))
          (setq
            dxf_10 (append dxf_10 (list (car dxf_10)))
            dxf_40 (append dxf_40 (list (car dxf_40)))
            dxf_41 (append dxf_41 (list (car dxf_41)))
            dxf_42 (append dxf_42 (list (car dxf_42)))
            n (cdr (assoc 90 dxf_obj))
          )
          (setq n (1- (cdr (assoc 90 dxf_obj))))
        )
        (repeat n
          (entmake
            (list
              (cons 0 "LWPOLYLINE")
              (cons 100 "AcDbEntity")
              (assoc 67 dxf_obj)
              (assoc 410 dxf_obj)
              (assoc 8 dxf_obj)
              (if (assoc 62 dxf_obj) (assoc 62 dxf_obj) (cons 62 256))
              (if (assoc 6 dxf_obj) (assoc 6 dxf_obj) (cons 6 "BYLAYER"))
              (if (assoc 370 dxf_obj) (assoc 370 dxf_obj) (cons 370 -1))
              (cons 100 "AcDbPolyline")
              (cons 90 2)
              (cons 70 (boole 1 (cdr (assoc 70 dxf_obj)) 128))
              (cons 38 dxf_38)
              (cons 39 dxf_39)
              (cons 10 (car dxf_10))
              (cons 40 (car dxf_40))
              (cons 41 (car dxf_41))
              (cons 42 (car dxf_42))
              (cons 10 (cadr dxf_10))
              (cons 40 (cadr dxf_40))
              (cons 41 (cadr dxf_41))
              (cons 42 (cadr dxf_42))
              (assoc 210 dxf_obj)
            )
          )
          (setq dxf_10 (cdr dxf_10) dxf_40 (cdr dxf_40) dxf_41 (cdr dxf_41) dxf_42 (cdr dxf_42) lst_data nil nwent (entlast))
          (foreach n (ade_odgettables ent)
            (setq tbldef (ade_odtabledefn n))
            (setq lst_data (cons (mapcar '(lambda (fld) (cons n (cons fld (ade_odgetfield ent n fld 0)))) (mapcar 'cdar (cdr (nth 2 tbldef)))) lst_data))
          )
          (cond
            (lst_data
              (mapcar '(lambda (x) (ade_odaddrecord nwent (caar x)) (foreach el x (ade_odsetfield nwent (car el) (cadr el) 0 (cddr el)))) lst_data)
            )
          )
        )
        (entdel ent)
      )
      (print (sslength js)) (princ " LWpolyligne(s) coupée(s) à ses sommets avec ses Object Datas.")
    )
  )
  (prin1)
)

0

Partager ce sujet :


Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

1 utilisateur(s) en train de lire ce sujet
0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)