KSJ77
Membres-
Compteur de contenus
27 -
Inscription
-
Dernière visite
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par KSJ77
-
Re Heu :mellow: alors là je donne ma langue au chat, mis à part si tu as des trames de calcul très différentes je ne vois pas. Je reviens de faire un test sur les 2 versions et avec même pièce cubique, même nbr de luminaire, même coefficient de réflexion et même facteur d'entretien -> Emoy sont égaux (seul les Emax et Emin sont un peu différent) Je me demande si sur Evo les point de calculs (trames n' co) sont bien calculer suivant la NF EN 12-464-1 à approfondir
-
Salut Vérifie que tes facteurs d'entretien/maintenance soit identique sur les 2 versions Par défaut on a: 0.9 sur la 4.12 (qui est une aberration au passage à moins d’être dans des salles très très propre) 0.8 sur 5.2 a+
-
Exemple d'un parc de stationnement http://img11.hostingpics.net/pics/283617parc1.jpg http://img11.hostingpics.net/pics/130759parc2.jpg http://img11.hostingpics.net/pics/389937parc3.jpg Un exemple que le Dialux de base est plus complet c'est la méthode de définition du facteur de maintenance http://www.dial.de/DIAL/fr/dialux/conseils-et-astuces/articles/la-methode-detaillee-du-plan-de-maintenance.html
-
@Patrick_35 mon screen avec une meilleure résolution :) (il faut cliquer sur "modifier le degré de réflexion..." ) http://img15.hostingpics.net/pics/282360Evo.jpg Mais pas que ... je fais tous mes calculs avec celle-ci (NF EN 12-464, accessibilité etc..) que je trouve plus complète. Mais le jour où Evo intégrera l'import-export IFC je ne servirai plus de la version de base :)
-
Bonjour, Je n'ai pas la dernière version de Evo mais sur la précédente c'est ici http://img15.hostingpics.net/pics/146407Evo.jpg Par contre il y a deux version de Dialux tu es sûr que tu n'as pas confondu avec le Dialux "normal" ? http://www.dial.de/DIAL/fr/dialux/telechargement.html Cordialement
-
Merci pour vos suggestions :) J'ai quand même cherché une solution lisp et j'en ai trouvé un que j'ai légèrement modifié afin de l'adapter à mes besoins Voici le code (defun c:Xref2Block (/ ActDoc BlkCol LayCol Sel EntData BlkName BlkRefObj LayList NewBlk FullPath dbxApp ObjList Message NewBlkName) (setq ActDoc (vla-get-ActiveDocument (vlax-get-Acad-Object))) (setq BlkCol (vla-get-Blocks ActDoc)) (setq LayCol (vla-get-Layers ActDoc)) (setq Message "\n Enter block name: ") (if (and (while (or (not NewBlkName) (not (vl-catch-all-error-p (vl-catch-all-apply 'vla-Item (list BlkCol NewBlkName)))) ) (not (while (= (setq NewBlkName (getstring T Message)) ""))) (setq Message "\n Block name already exist, please type another: ") ) (setq Sel (entsel "\n Select Xref to turn into block: ")) (setq EntData (entget (car Sel))) (= (cdr (assoc 0 EntData)) "INSERT") (setq BlkName (cdr (assoc 2 EntData))) (setq BlkRefObj (vla-item BlkCol BlkName)) (= (vla-get-IsXref BlkRefObj) :vlax-true) ) (progn (vlax-for i LayCol (if (and (wcmatch (setq LayName (vla-get-Name i)) (strcat BlkName "|*")) (= (vla-get-LayerOn i) :vlax-true) (= (vla-get-Freeze i) :vlax-false) ) (setq LayList (cons (substr LayName (+ 2 (strlen BlkName))) LayList)) ) ) (setq NewBlk (vla-Add BlkCol (vla-get-Origin BlkRefObj) (strcat NewBlkName))) (if (setq FullPath (findfile (vla-get-Path (vlax-ename->vla-object (car Sel))))) (progn (setq dbxApp (if (< (atoi (setq oVer (substr (getvar "acadver") 1 2))) 16) (vla-GetInterfaceObject (vlax-get-acad-object) "ObjectDBX.AxDbDocument") (vla-GetInterfaceObject (vlax-get-acad-object) (strcat "ObjectDBX.AxDbDocument." oVer)) ) ) (vla-Open dbxApp FullPath) (vlax-for i (vla-get-ModelSpace dbxApp) (if (vl-position (vla-get-Layer i) LayList) (setq ObjList (cons i ObjList)) ) ) (vlax-invoke dbxApp 'CopyObjects ObjList NewBlk) (prompt (strcat "\n New block created name \"" NewBlkName "\".")) ) (progn (prompt "\n Can not find darwing to open.") (vla-Delete NewBlk) ) ) (vlax-release-object dbxApp) (setq dbxApp nil) ) ) (command "_erase" Sel "" "") (command "-inserer" NewBlkName (getpoint) 1 1 0 ) (princ) ) Il faut maintenant que je cherche à rajouter une alerte ou un filtre car lorsque l'on sélectionne autre chose qu'une Xref cela provoque une erreur (sélection d'un bloc par exemple).
-
Bonjour, Lorsqu'un xref est présent plusieurs fois dans l'espace objet est-il possible de convertir l'un d'entre eux en bloc Je m'explique, sur un plan j'ai X chambres identiques dont chacune renvoi à un même Xref. Problème, je ne trouve pas la solution pour modifier une chambre spécifique (peut-être via un lisp), sachant que je ne veux pas passer par le gestionnaire de référence car cela va me transformer toute les chambres en bloc. Existe t-il un lisp inverse de "blocktoxref"? Merci d'avance pour votre aide :)
-
Selection de blocs par attributs en .net (C#)
KSJ77 a répondu à un(e) sujet de KSJ77 dans ObjectARX/DBX, C++, .NET, RealDWG
Salut, Je vais compiler ceci, Par la suite j'essaierai d'intégrer ce filtre de sélection à la routine EATT histoire de me faire un exercice supplémentaire sous VS (comme je débute en .net) Encore merci -
Selection de blocs par attributs en .net (C#)
KSJ77 a répondu à un(e) sujet de KSJ77 dans ObjectARX/DBX, C++, .NET, RealDWG
Merci pour ta réponse (je vais tester et étudier cela) et puis par la même occasion merci pour tout le reste :) . EDIT: Fonctionne très bien, par contre si il y a d'autres attributs (par exemple un bloc composé de TOTO et TOTO2) chez moi cela ne fonctionne plus -
Selection de blocs par attributs en .net (C#)
KSJ77 a posté un sujet dans ObjectARX/DBX, C++, .NET, RealDWG
Bonjour, Je voudrais savoir comment complèter/modifier (si c'est possible) ce code avec un fitre supplémentaire afin de pouvoir par exemple selectionner que les blocs ayant l'attribut "TOTO" (peu importe sa valeur) TypedValue[] filter = new TypedValue[2] { new TypedValue(0, "INSERT"), new TypedValue(66, 1) }; PromptSelectionResult psr = _ed.GetSelection(new SelectionFilter(filter)); if (psr.Status != PromptStatus.OK) return; Merci d'avance -
Salut, Je déterre ce post car j'ai trouvé un lisp pour la numérotation de bloc avec une direction donnée auquel j'ai ajouté la possibilité de rajouter un suffixe ou préfixe. Voilà le code, si jamais ça peut aidé :) (defun c:numps(/ stStr stNum nLen cAtr dLst blName fLst blLst blSet aName sLst lZer aStr pt1 pt2 xSrt ySrt atype ns ss en ed an ad av nv) (vl-load-com) (if (and (setq stStr(getstring "\nSpécifier le numéro de départ: ")) (setq stNum(atoi stStr)) (setq nLen(strlen stStr)) ); end and (progn (if (and (setq cAtr(nentsel "\nSélectionner Attribut > ")) (= "ATTRIB"(cdr(assoc 0(setq dLst(entget(car cAtr)))))) ); end and (if (and (setq pt1(getpoint "\nSélectionner la direction de numérotation ")) (setq pt2(getpoint pt1 "\nSélectionner la direction de numérotation ")) ); end and (progn (if(<=(car pt1)(car pt2))(setq xSrt '<)(setq xSrt '>)) (if(<=(cadr pt1)(cadr pt2))(setq ySrt '<)(setq ySrt '>)) (setq blName (vla-get-Name (vla-ObjectIDToObject (vla-get-ActiveDocument (vlax-get-acad-object)) (vla-get-OwnerID (vlax-ename->vla-object(car cAtr))))) fLst(list '(0 . "INSERT")(cons 2 blName)) aName(cdr(assoc 2 dLst)) ); end setq (princ "\n<<< Selection des blocs à numéroter >>> ") (if (setq blSet(ssget fLst)) (progn (setq sLst (mapcar 'vlax-ename->vla-object (mapcar 'car (vl-sort (vl-sort (mapcar '(lambda(x)(list x (trans(cdr(assoc 10(entget x)))0 1))) (vl-remove-if 'listp (mapcar 'cadr(ssnamex blSet)))) '(lambda(a B)((eval xSrt)(caadr a)(caadr B)))) '(lambda(a B)((eval ySrt)(cadadr a)(cadadr B))))))) (foreach i sLst (setq lZer "") (repeat(- nLen(strlen(itoa stNum))) (setq lZer(strcat lZer "0")) ); end repeat (setq atLst (vlax-safearray->list (vlax-variant-value (vla-GetAttributes i)))) (foreach a atLst (if (= aName(vla-get-TagString a)) (vla-put-TextString a (strcat lZer(itoa stNum))) ); end if ); end foreach (setq stNum(1+ stNum)) ); end foreach ); end progn (princ "\nSélection nulle! Quit. ") ); end if ); end progn (princ "\nDirection non spécifiée! Quit. ") ); end if (princ "\nCe n'est pas un attribut! Quit. ") ); end if ); end progn (princ "\nNuméro de départ invalide! Quit. ") ); end if (prin1) (initget 1 "Suffix Prefix") (setq atype (getkword "\nAjout Suffix ou Prefix (S/P): ")) (initget 1) (setq ns (getstring t "\ntexte à ajouter: ")) (while (setq en (ssname blSet 0)) (setq ed (entget en) an (entnext en) ad (entget an)) (while (/= "SEQEND" (cdr (assoc 0 ad))) (setq av (cdr (assoc 1 ad)) nv (if (= atype "Prefix") (strcat ns av) (strcat av ns))) (entmod (subst (cons 1 nv) (assoc 1 ad) ad)) (setq an (entnext an) ad (entget an))) (entupd en) (ssdel en blSet)); end while (princ) ); end of c:numps
-
Sélection de blocs orphelin (sans attaches de polylignes)
KSJ77 a répondu à un(e) sujet de KSJ77 dans Débuter en LISP
Bonjour, Je vais essayer de suivre tes conseils :) En toute honnêteté il m'arrive de faire du copier coller de fonctions, mais j'ai bien pris conscience que programmer un lisp sans comprendre c'est comme faire du reverse engineering sur un code que l'on ne comprends pas. Question : Existe t-il un site équivalent à Afralisp en Français? Sur ce je vais me replonger une 2ème fois dans le guide de @Gilles. -
Sélection de blocs orphelin (sans attaches de polylignes)
KSJ77 a répondu à un(e) sujet de KSJ77 dans Débuter en LISP
Bonjour, merci je vais étudier tout ça :) -
Sélection de blocs orphelin (sans attaches de polylignes)
KSJ77 a répondu à un(e) sujet de KSJ77 dans Débuter en LISP
Déjà Merci :) (setq ss1 (ssget '((0 . "INSERT")))) (setq ss2 (ssget '((0 . "LWPOLYLINE") (-4 . "<or") (8 . "X1") (8 . "X2") (-4 . "or>")))) heu là je sèche :( -
Sélection de blocs orphelin (sans attaches de polylignes)
KSJ77 a posté un sujet dans Débuter en LISP
Bonjour, En lisp comment faire une sélection de blocs qui ne sont pas "touchée" par des polylignes (polylignes qui serait sur les calques X1 et X2) Voici le résultat de cette sélection spéciale (2 blocs sélectionnés) http://img11.hostingpics.net/pics/195871lisp2.jpg Merci d'avance ;) -
Je suis du même avis que Oli553 (logiciels fabriquant), sachant que pour ce genre de réalisation de schémas simple sans notes de calculs le meilleur logiciel était pour moi le couple Sispro avec la passerelle See building (saisie des circuits sous forme de tableur) puis generation automatique du schéma de distribution vers See Building LT (avec la possibilité de modifications). Malheureusement ce projet à été abandonné :( (mais heureusement j'ai gardé une copie :) )
-
Bonjour, Pour répondre à ta question : Hauteur de montage : C'est la hauteur du luminaire dans la pièce Hauteur du point d'éclairage : C'est la hauteur (distance) entre ton plan de travail (qui doit être à 0.90 dans ton cas) et ton luminaire Voici un petit résumé en allemand (Lichtpunkthöhe=Hauteur du point d'éclairage) http://img15.hostingpics.net/pics/464430dialux.jpg
-
Bonjour, Tout d'abord merci pour ta suggestion, en effet plus simple et efficace! (plus de problèmes de valeurs superposées non remplies). Mais je préfère travailler avec des blocs+attributs car une fois les longueurs remplies dans les blocs, j'utilise le merveilleux programme "eatt" de Gille afin de l'exporter vers Excel (j'aurais dû le préciser dans mon premier post). Je vais donc continuer mon début d'apprentissage sur Autolisp/Vlisp afin d'améliorer et de corriger ce code mais toute aide est le bienvenu ;)
-
merci bien :)
-
Un membre de Cadtutor m'a filé un coup de main voici le LISP que j'ai essayé de retrvailler mais il n'est pas encore parfait : - je voudrais ajouter au filtre de sélection un filtre par nom d'étiquette de bloc "LONGUEUR" est-ce que la fonction conditionnelle " (if (= (vla-get-tagstring X) "LONGUEUR") peut être rajouté au filtre de sélection? - je m'aperçois que si des blocs sont semi-supperposé la fonction "vla-put-Textstring" ne marche pas .... (defun l-coor2l-pt (lst flag / ) (if lst (cons (list (car lst) (cadr lst) (if flag (+ (if (vlax-property-available-p ename 'Elevation) (vlax-get ename 'Elevation) 0.0) (caddr lst)) (if (vlax-property-available-p ename 'Elevation) (vlax-get ename 'Elevation) 0.0) ) ) (l-coor2l-pt (if flag (cdddr lst) (cddr lst)) flag) ) ) ) (defun c:CABLECDC2 ( / js dxf_cod mod_sel n lremov ename l_pt l_pr key js_cl obj_vlax pr lst_pt pt pt_cl e ans attlst blk doc en_pt obj ss ss1 ss2 st_pt) (setq e (entsel "\nFiltre de Sélection par Bloc (Attribut LONGUEUR) : ")) (if e (setq js (ssget "_X" (list(cons 2 (cdr (assoc 2 (entget (car e)))))(cons 0 "INSERT"))))) (vl-load-com) (setq dxf_cod (entget (ssname js 0))) (foreach m (foreach n dxf_cod (if (not (member (car n) '(0 2 ))) (setq lremov (cons (car n) lremov)))) (setq dxf_cod (vl-remove (assoc m dxf_cod) dxf_cod)) ) (initget "Unique Tout Manuel _Single All Manual") (if (eq (setq mod_sel (getkword "\nMode de sélection filtrée, choix [unique/Tout/Manuel]<Manuel>: ")) "Single") (setq n -1) (if (eq mod_sel "All") (setq js (ssget "_X" dxf_cod) n -1) (setq js (ssget dxf_cod) n -1) ) ) (repeat (sslength js) (setq ename (vlax-ename->vla-object (ssname js (setq n (1+ n))))) (setq l_pr (list 'StartPoint 'EndPoint 'Center 'InsertionPoint 'Coordinates 'FitPoints)) (foreach n l_pr (if (vlax-property-available-p ename n) (setq l_pt (if (or (eq n 'Coordinates) (eq n 'FitPoints)) (append (if (eq (vla-get-ObjectName ename) "AcDbPolyline") (l-coor2l-pt (vlax-get ename n) nil) (if (and (eq n 'FitPoints) (zerop (vlax-get ename 'FitTolerance))) (l-coor2l-pt (vlax-get ename 'ControlPoints) T) (l-coor2l-pt (vlax-get ename n) T) ) ) l_pt ) (cons (vlax-get ename n) l_pt) ) ) ) ) ) (cond (l_pt (while (and (setq key (grread T 4 0)) (/= (car key) 3)) (redraw) (cond ((eq (car key) 5) (foreach n l_pt (grdraw (trans n 0 1) (cadr key) 3) ) ) ) ) (if (eq (car key) 3) (progn (princ "\nSélectionner le Chemin de câble (polyligne) comme passage obligé: ") (while (not (setq js_cl (ssget "_+.:E:S" '((0 . "LWPOLYLINE")))))) (setq obj_vlax (vlax-ename->vla-object (ssname js_cl 0)) pr -1 lst_pt nil) (repeat (if (zerop (vlax-get obj_vlax 'Closed)) (1+ (fix (vlax-curve-getEndParam obj_vlax))) (fix (vlax-curve-getEndParam obj_vlax))) (setq pt (vlax-curve-GetPointAtParam obj_vlax (setq pr (1+ pr))) lst_pt (cons pt lst_pt) ) ) (if (< (distance (car lst_pt) (trans (cadr key) 1 0)) (distance (last lst_pt) (trans (cadr key) 1 0))) (setq lst_pt (reverse lst_pt)) ) (foreach n l_pt (setq pt_cl (vlax-curve-getClosestPointTo obj_vlax n)) (command "_.pline" "_none" (trans n 0 1) "_none" (trans pt_cl 0 1)) (foreach el lst_pt (if (<= (distance el (trans (cadr key) 1 0)) (distance pt_cl (trans (cadr key) 1 0))) (command "_none" (trans el 0 1)) ) ) (command "_none" (cadr key) "") ) ) ) (redraw) ) ) (vl-load-com) (command "_.ucs" "_world") (princ "\nSélectionner les câbles (polylignes): ") (setq doc (vla-get-ActiveDocument (vlax-get-acad-object))) (if (and (setq ss (ssget '((0 . "LWPOLYLINE")))) (not (initget 1 "Champs Text")) (setq ans (getkword "\nEnter an option [Champs/Text]: ")) ) (repeat (setq i (sslength ss)) (setq obj (vlax-ename->vla-object (ssname ss (setq i (1- i)))) str (rtos (vla-get-Length obj) 2 2) st_pt (trans (vlax-curve-getStartPoint obj) 0 1) en_pt (trans (vlax-curve-getEndPoint obj) 0 1) ) (command "_.zoom" "_C" st_pt "") (setq ss1 (ssget "_C" (polar st_pt (* 0.25 pi) 0.1) (polar st_pt (* 1.25 pi) 0.1) (list '(0 . "INSERT") (assoc 2 dxf_cod) '(66 . 1)) ) ) (command "_.zoom" "_C" en_pt "") (setq ss2 (ssget "_C" (polar en_pt (* 0.25 pi) 0.1) (polar en_pt (* 1.25 pi) 0.1) (list '(0 . "INSERT") (assoc 2 dxf_cod) '(66 . 1)) ) ) (cond (ss1 (setq blk (vlax-ename->vla-object (ssname ss1 0))) ) (ss2 (setq blk (vlax-ename->vla-object (ssname ss2 0))) ) ) (if blk (progn (setq attlst (vlax-invoke blk 'GetAttributes)) (foreach a attlst (if (= (vla-get-TagString a) "LONGUEUR") (vla-put-TextString a (if (= ans "Champs") (strcat "%<\\AcObjProp Object(%<\\_ObjId " (LM:GetObjectID doc obj) ">%).Length \\f \"%lu2%pr1\">%" ) str ) ) ) ) ) ) ) ) (command "UCS" "P") (vla-regen doc AcActiveViewport) (princ) ) (defun LM:GetObjectID (doc obj) (if (eq "X64" (strcase (getenv "PROCESSOR_ARCHITECTURE"))) (vlax-invoke-method (vla-get-Utility doc) 'GetObjectIdString obj :vlax-false ) (itoa (vla-get-Objectid obj)) ) )
-
Bonjour, Je suis à la recherche du Lisp "ProtOng.VLX" que Patrick à écrit à cette occasion Merci d'avance
-
Bon j'avance petit à petit sur mon lisp J'ai réussi à faire un filtre par sélection de type de Bloc et j'ai modifié la fin du Lisp pour mettre les longueurs dans des attributs mais sous forme de champs (extrait d'un lisp de Lee Mac) (defun l-coor2l-pt (lst flag / ) (if lst (cons (list (car lst) (cadr lst) (if flag (+ (if (vlax-property-available-p ename 'Elevation) (vlax-get ename 'Elevation) 0.0) (caddr lst)) (if (vlax-property-available-p ename 'Elevation) (vlax-get ename 'Elevation) 0.0) ) ) (l-coor2l-pt (if flag (cdddr lst) (cddr lst)) flag) ) ) ) (defun c:CABLECDC2 ( / js dxf_cod mod_sel n lremov ename l_pt l_pr key js_cl obj_vlax pr lst_pt pt pt_cl *error* tables doc spc p s q ExitFlag e) (setq e (entsel "\nFiltre de Sélection par Nom de Bloc: ")) (if e (setq js (ssget "_X" (list(cons 2 (cdr (assoc 2 (entget (car e)))))(cons 0 "INSERT"))))) (vl-load-com) (setq dxf_cod (entget (ssname js 0))) (foreach m (foreach n dxf_cod (if (not (member (car n) '(0 2 ))) (setq lremov (cons (car n) lremov)))) (setq dxf_cod (vl-remove (assoc m dxf_cod) dxf_cod)) ) (initget "Unique Tout Manuel _Single All Manual") (if (eq (setq mod_sel (getkword "\nMode de sélection filtrée, choix [unique/Tout/Manuel]<Manuel>: ")) "Single") (setq n -1) (if (eq mod_sel "All") (setq js (ssget "_X" dxf_cod) n -1) (setq js (ssget dxf_cod) n -1) ) ) (repeat (sslength js) (setq ename (vlax-ename->vla-object (ssname js (setq n (1+ n))))) (setq l_pr (list 'StartPoint 'EndPoint 'Center 'InsertionPoint 'Coordinates 'FitPoints)) (foreach n l_pr (if (vlax-property-available-p ename n) (setq l_pt (if (or (eq n 'Coordinates) (eq n 'FitPoints)) (append (if (eq (vla-get-ObjectName ename) "AcDbPolyline") (l-coor2l-pt (vlax-get ename n) nil) (if (and (eq n 'FitPoints) (zerop (vlax-get ename 'FitTolerance))) (l-coor2l-pt (vlax-get ename 'ControlPoints) T) (l-coor2l-pt (vlax-get ename n) T) ) ) l_pt ) (cons (vlax-get ename n) l_pt) ) ) ) ) ) (cond (l_pt (while (and (setq key (grread T 4 0)) (/= (car key) 3)) (redraw) (cond ((eq (car key) 5) (foreach n l_pt (grdraw (trans n 0 1) (cadr key) 3) ) ) ) ) (if (eq (car key) 3) (progn (princ "\nSélectionner le Chemin de câble (polyligne) comme passage obligé: ") (while (not (setq js_cl (ssget "_+.:E:S" '((0 . "LWPOLYLINE")))))) (setq obj_vlax (vlax-ename->vla-object (ssname js_cl 0)) pr -1 lst_pt nil) (repeat (if (zerop (vlax-get obj_vlax 'Closed)) (1+ (fix (vlax-curve-getEndParam obj_vlax))) (fix (vlax-curve-getEndParam obj_vlax))) (setq pt (vlax-curve-GetPointAtParam obj_vlax (setq pr (1+ pr))) lst_pt (cons pt lst_pt) ) ) (if (< (distance (car lst_pt) (trans (cadr key) 1 0)) (distance (last lst_pt) (trans (cadr key) 1 0))) (setq lst_pt (reverse lst_pt)) ) (foreach n l_pt (setq pt_cl (vlax-curve-getClosestPointTo obj_vlax n)) (command "_.pline" "_none" (trans n 0 1) "_none" (trans pt_cl 0 1)) (foreach el lst_pt (if (<= (distance el (trans (cadr key) 1 0)) (distance pt_cl (trans (cadr key) 1 0))) (command "_none" (trans el 0 1)) ) ) (command "_none" (cadr key) "") ) ) ) (redraw) ) ) (vl-load-com) (while (defun *error* ( msg ) (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*") (princ (strcat "\n** Error: " msg " **"))) (princ) ) (setq tables (LM:ss->vla (ssget "_X" '((0 . "ACAD_TABLE"))))) (LM:ActiveSpace 'doc 'spc) (cond ( (setq p (LM:Selectif (lambda ( x ) (vlax-property-available-p (vlax-ename->vla-object x) 'Length ) ) "\nMétré longeur, Selectionner cable: " nil ) ) (setq s (strcat "%<\\AcObjProp Object(%<\\_ObjId " (LM:GetObjectID doc (vlax-ename->vla-object p)) ">%).Length \\f \"%lu6\">%" ) ) (while (progn (or ExitFlag (progn (initget "Point") (setq p (nentsel "\nSelect Text, MText or Attribute for Result [Point] <Exit> : ")) ) ) (cond ( ExitFlag nil ) ( (vl-consp p) (if (wcmatch (cdr (assoc 0 (entget (car p)))) "ATTRIB,*TEXT") (vla-put-TextString (vlax-ename->vla-object (car p)) s) (princ "\n** Object Must be Text, MText or Attribute **") ) ) ) ) ) ) ) (vla-regen doc AcActiveViewport) (princ) ) ) (defun LM:ActiveSpace ( *doc *spc ) (set *spc (if (or (eq AcModelSpace (vla-get-ActiveSpace (set *doc (vla-get-ActiveDocument (vlax-get-acad-object) ) ) ) ) (eq :vlax-true (vla-get-MSpace (eval *doc))) ) (vla-get-ModelSpace (eval *doc)) (vla-get-PaperSpace (eval *doc)) ) ) ) (defun LM:Selectif ( foo str nest / e ) (while (progn (setq e (car ((if nest nentsel entsel) str))) (cond ( (eq 'ENAME (type e)) (if (not (foo e)) (princ "\n** Invalid Object Selected **")) ) ) ) ) e ) (defun LM:GetObjectID ( doc obj ) (if (eq "X64" (strcase (getenv "PROCESSOR_ARCHITECTURE"))) (vlax-invoke-method (vla-get-Utility doc) 'GetObjectIdString obj :vlax-false) (itoa (vla-get-Objectid obj)) ) ) (defun LM:ss->vla ( ss ) (if ss ( (lambda ( i / e l ) (while (setq e (ssname ss (setq i (1+ i)))) (setq l (cons (vlax-ename->vla-object e) l)) ) l ) -1 ) ) ) Maintenant reste à savoir s'il est possible d'extraire automatiquement la longueur de chaque polyligne vers un attribut du bloc attaché à cette dernière. Le résultat serait comme ceci (il s'agit d'un montage vidéo): http://img4.hostingpics.net/pics/623817lisp2.gif De plus j'ai essayé de modifier la ligne suivante pour pouvoir sélectionner plusieurs passages obligés (princ "\nSélectionner le Chemin de câble (polyligne) comme passage obligé: ") (while (not (setq js_cl (ssget "_+.:E:S" '((0 . "LWPOLYLINE")))))) par (princ "\nSélectionner le Chemin de câble (polyligne) comme passage obligé: ") (while (not (setq js_cl (ssget "_+.:E" '((0 . "LWPOLYLINE")))))) mais sans succès,une seule polyligne est pris en compte, quelqu'un aurait la solution?
-
J'ai complété le lisp afin de pouvoir integrer les longueurs des polylines dans des attributs. Cependant je suis obligé de sélectionner chaque polyligne et chaques attribut, es ce qu'il y aurait une autre méthode pour réduire le nombre d'opérations Ensuite je n'arrive pas à rajouter dans le filtre de sélection, une sélection par nom de block. (defun l-coor2l-pt (lst flag / ) (if lst (cons (list (car lst) (cadr lst) (if flag (+ (if (vlax-property-available-p ename 'Elevation) (vlax-get ename 'Elevation) 0.0) (caddr lst)) (if (vlax-property-available-p ename 'Elevation) (vlax-get ename 'Elevation) 0.0) ) ) (l-coor2l-pt (if flag (cdddr lst) (cddr lst)) flag) ) ) ) (defun c:CABLECDC ( / js dxf_cod mod_sel n lremov ename l_pt l_pr key js_cl obj_vlax pr lst_pt pt pt_cl atent attobj ent leng obj) (princ "\nChoix d'un objet modèle pour le filtrage: ") (while (null (setq js (ssget "_+.:E:S" (list '(0 . "*LINE,POINT,ARC,CIRCLE,ELLIPSE,INSERT") ; <--filtre de selection que je n'arrive pas à modifier (cons 67 (if (eq (getvar "CVPORT") 1) 1 0)) (cons 410 (if (eq (getvar "CVPORT") 1) (getvar "CTAB") "Model")) ) ) ) ) (princ "\nCe n'est pas un objet valable pour cette fonction!") ) (vl-load-com) (setq dxf_cod (entget (ssname js 0))) (foreach m (foreach n dxf_cod (if (not (member (car n) '(0 67 410 8 6 62 48 420 70))) (setq lremov (cons (car n) lremov)))) (setq dxf_cod (vl-remove (assoc m dxf_cod) dxf_cod)) ) (initget "Unique Tout Manuel _Single All Manual") (if (eq (setq mod_sel (getkword "\nMode de sélection filtrée, choix [unique/Tout/Manuel]<Manuel>: ")) "Single") (setq n -1) (if (eq mod_sel "All") (setq js (ssget "_X" dxf_cod) n -1) (setq js (ssget dxf_cod) n -1) ) ) (repeat (sslength js) (setq ename (vlax-ename->vla-object (ssname js (setq n (1+ n))))) (setq l_pr (list 'StartPoint 'EndPoint 'Center 'InsertionPoint 'Coordinates 'FitPoints)) (foreach n l_pr (if (vlax-property-available-p ename n) (setq l_pt (if (or (eq n 'Coordinates) (eq n 'FitPoints)) (append (if (eq (vla-get-ObjectName ename) "AcDbPolyline") (l-coor2l-pt (vlax-get ename n) nil) (if (and (eq n 'FitPoints) (zerop (vlax-get ename 'FitTolerance))) (l-coor2l-pt (vlax-get ename 'ControlPoints) T) (l-coor2l-pt (vlax-get ename n) T) ) ) l_pt ) (cons (vlax-get ename n) l_pt) ) ) ) ) ) (cond (l_pt (while (and (setq key (grread T 4 0)) (/= (car key) 3)) (redraw) (cond ((eq (car key) 5) (foreach n l_pt (grdraw (trans n 0 1) (cadr key) 3) ) ) ) ) (if (eq (car key) 3) (progn (princ "\nSélectionner la colonne de cablage comme passage obligé: ") (while (not (setq js_cl (ssget "_+.:E:S" '((0 . "LWPOLYLINE")))))) (setq obj_vlax (vlax-ename->vla-object (ssname js_cl 0)) pr -1 lst_pt nil) (repeat (if (zerop (vlax-get obj_vlax 'Closed)) (1+ (fix (vlax-curve-getEndParam obj_vlax))) (fix (vlax-curve-getEndParam obj_vlax))) (setq pt (vlax-curve-GetPointAtParam obj_vlax (setq pr (1+ pr))) lst_pt (cons pt lst_pt) ) ) (if (< (distance (car lst_pt) (trans (cadr key) 1 0)) (distance (last lst_pt) (trans (cadr key) 1 0))) (setq lst_pt (reverse lst_pt)) ) (foreach n l_pt (setq pt_cl (vlax-curve-getClosestPointTo obj_vlax n)) (command "_.pline" "_none" (trans n 0 1) "_none" (trans pt_cl 0 1)) (foreach el lst_pt (if (<= (distance el (trans (cadr key) 1 0)) (distance pt_cl (trans (cadr key) 1 0))) (command "_none" (trans el 0 1)) ) ) (command "_none" (cadr key) "") ) ) ) (redraw) ) ) (vl-load-com) (while (setq ent (entsel "\nSelect Polyline (or press eEnter to Exit): ")) (setq obj (vlax-ename->vla-object (car ent))) (setq leng (rtos (vlax-get-property obj "Length") 2 3 ; <--precison 3 decimals ) ) (if (setq atent (nentsel "\nSelect Attribute: ")) (progn (setq attobj (vlax-ename->vla-object (car atent))) (vlax-put-property attobj "TextString" leng) ) ) ) (princ) ) Merci pour ceux qui pourront m'aider, je débute ;) Et bonnes fêtes de fin d'année à tous
-
je comprends tout a fait
-
Merci @bonuscad ;) Je vais essayer de le comprendre avant de l'utiliser
