-
Compteur de contenus
5 029 -
Inscription
-
Dernière visite
-
Jours gagnés
56
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par bonuscad
-
Propriétés d'objets vers Object Data (OD de Map)
bonuscad a répondu à un(e) sujet de bonuscad dans Autodesk Map
@lecrabe Tes désirs sont compréhensibles, mais d'une routine au départ générique tu en veux une spéciale. Mais qui dit spécial dit forcément traitement spécial par le code, donc plus compliqué. Ici je me suis attaché à transformer les LIST en 3 champs de REAL au lieu du POINT à l'initial. Donc par exemple le vecteur de direction NORMAL qui est une liste sera lui aussi exprimé en 3 réels Les polylignes n'ont pas dans les propriétés les champs STARTPOINT et ENDPOINT comme une ligne, mais un champ COORDINATES. Donc impossible (ou compliqué) de générer ces propriétés de liste en point de départ et point d'arrivée en OD de façon générique. Je te livre une avancée (avec des bugs possibles) (defun make_table (tbl fldnamelist fldtypelist / ) (ade_oddefinetab (list (cons "Tablename" tbl) (cons "TableDesc" "") (append '("Columns") (mapcar '(lambda (x y / ) (append (if (eq (type y) 'LIST) (mapcar '(lambda (ux / ) (list (cons "ColName" (strcat x ux)) (cons "ColDesc" "") (cons "ColType" "Real") (cons "DefaultVal" 0.0) ) ) '("_X" "_Y" "_Z") ) (list (cons "ColName" x) (cons "ColDesc" "") (cons "ColType" (cond ((eq (type y) 'REAL) "Real") ((eq (type y) 'INT) "Integer") ((eq (type y) 'LIST) "Real") ((eq (type y) 'STR) "Character") ) ) (cons "DefaultVal" (cond ((eq (type y) 'REAL) 0.0) ((eq (type y) 'INT) 0) ((eq (type y) 'LIST) 0.0) ((eq (type y) 'STR) "") ) ) ) ) ) ) fldnamelist fldtypelist ) ) ) ) ) ;; (bv:property obj check-modify) VDH-Bruno ;; --------------------------------------------------------------------------- ;; Retourne la liste des propriétées de l'objet. Si check-modify est non nil, ;; les propriétées en lecture seules sont omises. ;; Exemples: ;; (bv:property (vlax-ename->vla-object (car(entsel))) nil) ;; --> Retourne la liste de toutes les propriétés consultable de l'objet. ;; (bv:property (vlax-ename->vla-object (car(entsel))) T) ;; --> Retourne la liste de toutes les propriétés modifiable de l'objet. (defun bv:property (obj check-modify) (vl-sort (apply 'append (mapcar '(lambda (x) (if (and (/= x (setq x (vl-string-subst "" "VLA-GET-" x))) (vlax-property-available-p obj x check-modify) ) (list x) ) ) (atoms-family 1) ) ) '< ) ) (defun C:Properties2OD ( / doc js lst_prop pr2trans obj_name tbl tmp_file dcl_file dcl_id what_next lst_obj val ename flag numrec cnt) (setq doc (vla-get-activedocument (vlax-get-acad-object))) (or (setq js (ssget "_I" '((67 . 0)))) (setq js (ssget "_P" '((67 . 0)))) ) (cond (js (sssetfirst nil js) (initget "Existant Nouveau _Existent New") (if (eq (getkword "\nTraiter jeu de sélection [Existant/Nouveau] <Existant>: ") "New") (progn (sssetfirst nil nil) (setq js (ssadd) js (ssget '((67 . 0))))) ) ) (T (setq js (ssget '((67 . 0))))) ) (cond (js (vlax-for for-item (vla-get-activeselectionset doc) (setq lst_prop (reverse (vl-remove "COORDINATE" (bv:property for-item nil))) pr2trans nil) (cond ((null (ade_odtabledefn (setq tbl (strcat "TBL_" (setq obj_name (vlax-get for-item 'ObjectName)))))) (setq tmp_file (vl-filename-mktemp "Prop2OD.dcl") dcl_file (open tmp_file "w") ) (write-line (strcat "Properties2OD : dialog { label = \"Choix des propriétés vers " tbl "\"; : column {") dcl_file ) (foreach el lst_prop (write-line (strcat ": toggle { label = \"" el "\";" "mnemonic = \"" (substr el 1 1) "\";" "key = \"q_" el "\";" "}" ) dcl_file ) ) (write-line "} ok_cancel_err; }" dcl_file ) (close dcl_file) (foreach el lst_prop (eval (read (strcat "(setq q_" el " \"0\")"))) ) (setq dcl_id (load_dialog tmp_file)) (setq what_next 2) (while (< 1 what_next) (if (not (new_dialog "Properties2OD" dcl_id)) (exit)) (foreach el lst_prop (eval (read (strcat "(set_tile \"q_" el"\" q_" el ")"))) ) (foreach el lst_prop (eval (read (strcat "(action_tile \"q_" el "\" \"(setq q_" el " $value)\")"))) ) (action_tile "accept" "(done_dialog 1)") (action_tile "cancel" "(done_dialog 0)") (setq what_next (start_dialog)) ) (unload_dialog dcl_id) (vl-file-delete tmp_file) (foreach z (mapcar' (lambda (j) (strcat "q_" j)) lst_prop) (if (zerop (atoi (eval (read Z)))) (setq lst_prop (vl-remove (substr z 3) lst_prop)) ) (eval (read (strcat "(setq " z " nil)"))) ) (eval (read (strcat "(setq lst_" obj_name " " '"lst_prop" ")"))) (setq lst_obj (cons (strcat "lst_" obj_name) lst_obj)) (eval (read (strcat "(setq lst_prop lst_" obj_name ")"))) ) (T (setq lst_prop (reverse (mapcar 'cdar (cdaddr (ade_odtabledefn tbl))))) (eval (read (strcat "(setq lst_" obj_name " " '"lst_prop" ")"))) (setq lst_obj (cons (strcat "lst_" obj_name) lst_obj)) (mapcar '(lambda (x) (if (wcmatch x "*_[YZ]") (setq lst_prop (vl-remove x lst_prop)))) lst_prop) (mapcar '(lambda (x) (if (wcmatch x "*_X") (setq lst_prop (subst (vl-string-right-trim "_X" x) x lst_prop)))) lst_prop) ) ) (foreach el lst_prop (cond ((vlax-property-available-p for-item (read el)) (setq val (vlax-get for-item (read el))) (if (not (eq (type val) 'VLA-OBJECT)) (setq pr2trans (cons (cons el val) pr2trans)) ) ) ) ) (if pr2trans (progn (if (setq flag (null (ade_odtabledefn tbl))) (make_table tbl (mapcar 'car pr2trans) (mapcar 'cdr pr2trans)) ) (setq ename (vlax-vla-object->ename for-item)) (if (or flag (zerop (ade_odrecordqty ename tbl))) (ade_odaddrecord ename tbl) (progn (setq numrec (ade_odrecordqty ename tbl)) (cond ((> numrec 1) (setq cnt (1- numrec)) (while (not (zerop cnt)) (ade_oddelrecord ename tbl cnt) (setq cnt (- cnt 1)) ) ) ) ) ) (mapcar '(lambda (x y / nb ct tmp_y) (setq tmp_y y) (if (and (eq (type y) 'LIST) (eq x "COORDINATES")) (setq nb (/ (length y) (if (member obj_name '("AcDbPolyline")) 2 3)) ct -1) (setq nb 1 ct -1) ) (repeat nb (mapcar '(lambda (el val / ) (setq ct (1+ ct)) (if (listp el) (mapcar '(lambda (l m / ) (ade_odsetfield ename tbl l ct m ) ) el val ) (ade_odsetfield ename tbl el ct val) ) ) (list (if (eq (type tmp_y) 'LIST) (mapcar '(lambda (ux / ) (strcat x ux) ) '("_X" "_Y" "_Z") ) x ) ) (list (if (eq (type tmp_y) 'LIST) (list (car tmp_y) (cadr tmp_y) (if (and (member obj_name '("AcDbPolyline")) (eq x "COORDINATES")) 0.0 (caddr tmp_y) ) ) y ) ) ) (if (and (> nb 1) (< (1+ ct) nb) (eq (type tmp_y) 'LIST)) (if (and (member obj_name '("AcDbPolyline")) (eq x "COORDINATES")) (progn (setq tmp_y (cddr tmp_y)) (ade_odaddrecord ename tbl)) (progn (setq tmp_y (cdddr tmp_y)) (ade_odaddrecord ename tbl)) ) ) ) ) (mapcar 'car pr2trans) (mapcar 'cdr pr2trans) ) ) ) ) (mapcar '(lambda (x) (eval (read (strcat "(setq " x " nil)")))) lst_obj) ) ) (prin1) ) -
Propriétés d'objets vers Object Data (OD de Map)
bonuscad a répondu à un(e) sujet de bonuscad dans Autodesk Map
J'ai essayé de perfectionner la routine et qu'elle soit le plus générique possible. Déjà pouvoir faire une sélection au lieu de traiter tous les objets de l'espace objet. Si une sélection filtrée (ou non) a été faite au par avant, celle ci peut être reprise par la routine. Pour chaque objet sélectionné différent, une boite de dialogue vous permettra de cocher les paramètres à transférer en donnée d'objet. (Un fois la table définie il n'est pas possible de changer les paramètres par la suite, à moins d'effacer la table et de recommencer pour les objets déjà traités) Pour les objets ayant des points de définition multiple (vertex de polyligne par exemple), seul le point de départ sera visible dans le volet propriété; les autres seront stockés dans n records empilés (commande: _adeeditdata); autant d'enregistrements que de sommets. (defun make_table (tbl fldnamelist fldtypelist / ) (ade_oddefinetab (list (cons "Tablename" tbl) (cons "TableDesc" "") (append '("Columns") (mapcar '(lambda (x y / ) (list (cons "ColName" x) (cons "ColDesc" "") (cons "ColType" (cond ((eq (type y) 'REAL) "Real") ((eq (type y) 'INT) "Integer") ((eq (type y) 'LIST) "Point") ((eq (type y) 'STR) "Character") ) ) (cons "DefaultVal" (cond ((eq (type y) 'REAL) 0.0) ((eq (type y) 'INT) 0) ((eq (type y) 'LIST) "0.0,0.0,0.0") ((eq (type y) 'STR) "") ) ) ) ) fldnamelist fldtypelist ) ) ) ) ) ;; (bv:property obj check-modify) VDH-Bruno ;; --------------------------------------------------------------------------- ;; Retourne la liste des propriétées de l'objet. Si check-modify est non nil, ;; les propriétées en lecture seules sont omises. ;; Exemples: ;; (bv:property (vlax-ename->vla-object (car(entsel))) nil) ;; --> Retourne la liste de toutes les propriétés consultable de l'objet. ;; (bv:property (vlax-ename->vla-object (car(entsel))) T) ;; --> Retourne la liste de toutes les propriétés modifiable de l'objet. (defun bv:property (obj check-modify) (vl-sort (apply 'append (mapcar '(lambda (x) (if (and (/= x (setq x (vl-string-subst "" "VLA-GET-" x))) (vlax-property-available-p obj x check-modify) ) (list x) ) ) (atoms-family 1) ) ) '< ) ) (defun C:Properties2OD ( / doc js lst_prop pr2trans obj_name tbl tmp_file dcl_file dcl_id what_next lst_obj val ename) (setq doc (vla-get-activedocument (vlax-get-acad-object))) (or (setq js (ssget "_I" '((67 . 0)))) (setq js (ssget "_P" '((67 . 0)))) ) (cond (js (sssetfirst nil js) (initget "Existant Nouveau _Existent New") (if (eq (getkword "\nTraiter jeu de sélection [Existant/Nouveau] <Existant>: ") "New") (progn (sssetfirst nil nil) (setq js (ssadd) js (ssget '((67 . 0))))) ) ) (T (setq js (ssget '((67 . 0))))) ) (cond (js (vlax-for for-item (vla-get-activeselectionset doc) (setq lst_prop (reverse (vl-remove "COORDINATE" (bv:property for-item nil))) pr2trans nil) (cond ((null (ade_odtabledefn (setq tbl (strcat "TBL_" (setq obj_name (vlax-get for-item 'ObjectName)))))) (setq tmp_file (vl-filename-mktemp "Prop2OD.dcl") dcl_file (open tmp_file "w") ) (write-line (strcat "Properties2OD : dialog { label = \"Choix des propriétés vers " tbl "\"; : column {") dcl_file ) (foreach el lst_prop (write-line (strcat ": toggle { label = \"" el "\";" "mnemonic = \"" (substr el 1 1) "\";" "key = \"q_" el "\";" "}" ) dcl_file ) ) (write-line "} ok_cancel_err; }" dcl_file ) (close dcl_file) (foreach el lst_prop (eval (read (strcat "(setq q_" el " \"0\")"))) ) (setq dcl_id (load_dialog tmp_file)) (setq what_next 2) (while (< 1 what_next) (if (not (new_dialog "Properties2OD" dcl_id)) (exit)) (foreach el lst_prop (eval (read (strcat "(set_tile \"q_" el"\" q_" el ")"))) ) (foreach el lst_prop (eval (read (strcat "(action_tile \"q_" el "\" \"(setq q_" el " $value)\")"))) ) (action_tile "accept" "(done_dialog 1)") (action_tile "cancel" "(done_dialog 0)") (setq what_next (start_dialog)) ) (unload_dialog dcl_id) (vl-file-delete tmp_file) (foreach z (mapcar' (lambda (j) (strcat "q_" j)) lst_prop) (if (zerop (atoi (eval (read Z)))) (setq lst_prop (vl-remove (substr z 3) lst_prop)) ) (eval (read (strcat "(setq " Z " nil)"))) ) (eval (read (strcat "(setq lst_" obj_name " " '"lst_prop" ")"))) (setq lst_obj (cons (strcat "lst_" obj_name) lst_obj)) ) (T (setq lst_prop (reverse (mapcar 'cdar (cdaddr (ade_odtabledefn tbl))))) (eval (read (strcat "(setq lst_" obj_name " " '"lst_prop" ")"))) (setq lst_obj (cons (strcat "lst_" obj_name) lst_obj)) ) ) (eval (read (strcat "(setq lst_prop lst_" obj_name ")"))) (foreach el lst_prop (cond ((vlax-property-available-p for-item (read el)) (setq val (vlax-get for-item (read el))) (if (not (eq (type val) 'VLA-OBJECT)) (setq pr2trans (cons (cons el val) pr2trans)) ) ) ) ) (if pr2trans (progn (if (null (ade_odtabledefn tbl)) (make_table tbl (mapcar 'car pr2trans) (mapcar 'cdr pr2trans)) ) (ade_odaddrecord (setq ename (vlax-vla-object->ename for-item)) tbl) (mapcar '(lambda (x y / nb ct tmp_y tmp_str) (setq tmp_y y) (if (and (eq (type y) 'LIST) (eq x "COORDINATES")) (setq nb (/ (length y) (if (member obj_name '("AcDbPolyline")) 2 3)) ct -1) (setq nb 1 ct -1) ) (repeat nb (setq tmp_str "") (ade_odsetfield ename tbl x (setq ct (1+ ct)) (if (eq (type tmp_y) 'LIST) (substr (setq tmp_str (apply 'strcat (mapcar '(lambda (i) (strcat (rtos i 2 4) ",") ) (list (car tmp_y) (cadr tmp_y) (if (and (member obj_name '("AcDbPolyline")) (eq x "COORDINATES")) 0.0 (caddr tmp_y) ) ) ) ) ) 1 (1- (strlen tmp_str)) ) y ) ) (setq tmp_str "") (if (and (> nb 1) (< (1+ ct) nb)) (progn (ade_odattachrecord ename (ade_odnewrecord tbl)) (if (and (eq (type tmp_y) 'LIST) (> (length tmp_y) 3)) (setq tmp_y (cddr tmp_y)) (setq tmp_y (cdddr tmp_y)) ) ) ) ) ) (mapcar 'car pr2trans) (mapcar 'cdr pr2trans) ) ) ) ) (mapcar '(lambda (x) (eval (read (strcat "(setq " x " nil)")))) lst_obj) ) ) (prin1) ) J'aurais une question! Je voudrais écarter les propriétés qui lorsque je fais un dump retourne une exception. Par exemple sur un solide3D un dump me retourne ceci (est-ce pareil quelque soit la version AutoCAD?): Comment faire pour écarter ces propriétés qui retournent des exceptions (ici: Position et SolidType), car bien sûr, ça fait un bug dans la routine. Merci de vos suggestions! , -
Bonjour, Suite à la discussion avec une personne, je me suis retrouvé à écrire un petit bout de code. Celui ci est destiné à constituer une table de donnée d'objet contenant les propriétés dudit objet. Celui-ci est embryonnaire. Je l'ai testé sommairement, il s'avère qu'il se crash s'il y a des entités comme des Splines, des Hachures ou des Solides3D. Le code suivant dans l'état traite TOUTES les entités dans l'espace objet. Si quelqu'un a besoin d'un tel truc, il aura déjà une base. Je me suis aidé de l'excellente routine de VDH-Bruno pour constituer celle-ci. (defun make_table (tbl fldnamelist fldtypelist / ) (ade_oddefinetab (list (cons "Tablename" tbl) (cons "TableDesc" "") (append '("Columns") (mapcar '(lambda (x y / ) (list (cons "ColName" x) (cons "ColDesc" "") (cons "ColType" (cond ((eq (type y) 'REAL) "Real") ((eq (type y) 'INT) "Integer") ((eq (type y) 'LIST) "Point") ((eq (type y) 'STR) "Character") ) ) (cons "DefaultVal" (cond ((eq (type y) 'REAL) 0.0) ((eq (type y) 'INT) 0) ((eq (type y) 'LIST) "0.0,0.0,0.0") ((eq (type y) 'STR) "") ) ) ) ) fldnamelist fldtypelist ) ) ) ) ) ;; (bv:property obj check-modify) VDH-Bruno ;; --------------------------------------------------------------------------- ;; Retourne la liste des propriétées de l'objet. Si check-modify est non nil, ;; les propriétées en lecture seules sont omises. ;; Exemples: ;; (bv:property (vlax-ename->vla-object (car(entsel))) nil) ;; --> Retourne la liste de toutes les propriétés consultable de l'objet. ;; (bv:property (vlax-ename->vla-object (car(entsel))) T) ;; --> Retourne la liste de toutes les propriétés modifiable de l'objet. (defun bv:property (obj check-modify) (vl-sort (apply 'append (mapcar '(lambda (x) (if (and (/= x (setq x (vl-string-subst "" "VLA-GET-" x))) (vlax-property-available-p obj x check-modify) ) (list x) ) ) (atoms-family 1) ) ) '< ) ) (defun C:Properties2OD ( / lst_prop pr2trans val tbl ename tmp_str) (vlax-for for-item (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object)) ) (setq lst_prop (vl-remove "COORDINATE" (bv:property for-item nil)) pr2trans nil) (foreach el lst_prop (cond ((vlax-property-available-p for-item (read el)) (setq val (vlax-get for-item (read el))) (if (not (eq (type val) 'VLA-OBJECT)) (setq pr2trans (cons (cons el val) pr2trans)) ) ) ) ) (if pr2trans (progn (if (null (ade_odtabledefn (setq tbl (strcat "TBL_" (vlax-get for-item 'ObjectName))))) (make_table tbl (mapcar 'car pr2trans) (mapcar 'cdr pr2trans)) ) (ade_odaddrecord (setq ename (vlax-vla-object->ename for-item)) tbl) (mapcar '(lambda (x y) (ade_odsetfield ename tbl x 0 (if (eq (type y) 'LIST) (substr (setq tmp_str (apply 'strcat (mapcar '(lambda (i) (strcat (rtos i 2 4) ",")) (list (car y) (cadr y) (caddr y))))) 1 (1- (strlen tmp_str))) y ) ) ) (mapcar 'car pr2trans) (mapcar 'cdr pr2trans) ) ) ) ) (prin1) )
-
Insérer un bloc par rapport à une fenêtre en EP
bonuscad a répondu à un(e) sujet de Aleck_Ultimate dans Débuter en LISP
Un sujet qui pourrait peut être t'inspirer? -
J'ai regardé rapidement ta video. Ce que je peux en déduire, tu cherches à reproduire le résultat d'un programme fait en VBA. (celui ci t'est inaccessible? est protégé? est payant?) dans la video il dessine simplement des lignes, cela pourrait être aussi des polylignes, arcs ou cercles. Je pense que la routine que je t'ai fournie peut fonctionner, il faut simplement que tu transforme manuellement au préalable ton contour extérieur et ton contour intérieur en REGION (ma routine n'accepte que des régions) Donc avec la commande REGION tu transforme ton contour. Faire la commande 2 fois: 1 fois pour le contour externe et une fois pour le contour interne: le programme fera la soustraction par la suite des 2 régions et donnera les résultats dans le tableau. Donc une fois cette transformation effectuée, tu peux utiliser ma routine. Par contre je n'ai pas saisi l'histoire des cercles entre ta première demande (cerle circonscrit dans ton DWG et les cercles de la video qui ont l'air de faire partie simplement des contours) As tu essayé au moins la routine avec le dwg que tu avais mis en exemple au départ? Les profilés en aluminium ne sont pas de ma partie, j'ai simplement appliqué les formules que tu donnais dans ton dwg d'exemple! Je serais incapable d'en faire plus sans explications claires et précises.
-
Bonjour, Tu peux essayer ceci, testé sur ton extrait et ça à l'air de fonctionner... (vl-load-com) (defun c:tab_profil ( / js1 js2 AcDoc Space ename1 ename2 ul ur ex_p in_p nw_style oldlay ins_pt_cell h_t w_c ename_cell n_row n_column lst_data) (princ "\nSélectionnez le contour exterieur") (while (null (setq js1 (ssget "_+.:E:S" '((0 . "REGION") (67 . 0)))))) (princ "\nSélectionnez le contour interieur") (while (null (setq js2 (ssget "_+.:E:S" '((0 . "REGION") (67 . 0)))))) (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)) Space (if (= 1 (getvar "CVPORT")) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) ename1 (vlax-ename->vla-object (ssname js1 0)) ename2 (vlax-ename->vla-object (ssname js2 0)) ) (vla-getboundingbox ename1 'ul 'ur) (setq ex_p (vlax-get ename1 'Perimeter) in_p (vlax-get ename2 'Perimeter)) (vla-Boolean ename1 acSubtraction ename2) (cond ((null (tblsearch "LAYER" "Tableaux-Profils")) (vla-add (vla-get-layers AcDoc) "Tableaux-Profils") ) ) (cond ((null (tblsearch "STYLE" "Tab-Profil")) (setq nw_style (vla-add (vla-get-textstyles AcDoc) "Tab-Profil")) (mapcar '(lambda (pr val) (vlax-put nw_style pr val) ) (list 'FontFile 'Height 'ObliqueAngle 'Width 'TextGenerationFlag) (list "romand.shx" 0.0 0.0 1.0 0.0) ) ) ) (setq oldlay (getvar "clayer")) (setvar "clayer" "Tableaux-Profils") (initget 9) (setq ins_pt_cell (getpoint "\nPoint d'insertion haut gauche du tableau: ")) (initget 6) (setq h_t (getdist ins_pt_cell (strcat "\nHauteur du texte <" (rtos (getvar "textsize")) ">: "))) (if (null h_t) (setq h_t (getvar "textsize")) (setvar "textsize" h_t)) (initget 7) (setq w_c (getdist ins_pt_cell "\nLargeur des cellules: ")) (setq ename_cell (vla-addTable Space (vlax-3d-point ins_pt_cell) 20 2 (* h_t 1.6667) w_c)) (setq n_row 0 n_column 2) (vla-put-horzcellmargin ename_cell (* h_t 0.5)) (vla-put-vertcellmargin ename_cell (* h_t 0.5)) (vla-SetRowHeight ename_cell 0 (* h_t 1.25)) (vla-SetText ename_cell 0 0 "DONNEES DE PROFIL") (vla-SetCellTextStyle ename_cell 0 0 "Tab-Profil") (vla-SetCellTextHeight ename_cell 0 0 h_t) (vla-SetCellAlignment ename_cell 0 0 5) (setq lst_data (list (cons "Hauteur" "31.50 mm") (cons "Largeur" "40.00 mm") (cons "Ex.Périmètre" (strcat (rtos ex_p 2 2) " mm")) (cons "In.Périmètre" (strcat (rtos in_p 2 2) " mm")) (cons "total.Périmètre" (strcat (rtos (+ ex_p in_p) 2 2) " mm")) (cons "lx" (strcat (rtos (/ (car (vlax-get ename1 'MomentOfInertia)) 10000) 2 2) " cm4")) (cons "ly" (strcat (rtos (/ (cadr (vlax-get ename1 'MomentOfInertia)) 10000) 2 2) " cm4")) (cons "Wx" (strcat (rtos (/ (/ (car (vlax-get ename1 'MomentOfInertia)) 10000) (* (max (abs (cadr (safearray-value ul))) (abs (cadr (safearray-value ur)))) 0.1)) 2 2) " cm3")) (cons "Wy" (strcat (rtos (/ (/ (cadr (vlax-get ename1 'MomentOfInertia)) 10000) (* (max (abs (car (safearray-value ul))) (abs (car (safearray-value ur)))) 0.1)) 2 2) " cm3")) (cons "Rayon de giration (x)" (strcat (rtos (car (vlax-get ename1 'RadiiOfGyration)) 2 2) " mm")) (cons "Rayon de giration (y)" (strcat (rtos (cadr (vlax-get ename1 'RadiiOfGyration)) 2 2) " mm")) (cons "Aire" (strcat (rtos (vlax-get ename1 'Area) 2 2) " mm2")) (cons "Poids" (strcat (rtos (/ (* (vlax-get ename1 'Area) 2.7) 1000) 2 3) " kg/m")) (cons "Cercle circoncrit" (strcat (rtos (* 2 (cdr (assoc 40 (entget (car (entsel "\nChoix dur cercle circoncrit: ")))))) 2 2) " mm")) (cons "Epaisseur moyenne" (strcat (rtos (/ (* (vlax-get ename1 'Area) 2.0) (+ ex_p in_p)) 2 2) " mm")) (cons "ex1" (strcat (rtos (abs (car (safearray-value ul))) 2 2) " mm")) (cons "ex2" (strcat (rtos (abs (car (safearray-value ur))) 2 2) " mm")) (cons "ey1" (strcat (rtos (abs (cadr (safearray-value ul))) 2 2) " mm")) (cons "ey2" (strcat (rtos (abs (cadr (safearray-value ur))) 2 2) " mm")) ) ) (foreach el lst_data (vla-SetRowHeight ename_cell (setq n_row (1+ n_row)) (* h_t 1.6667)) (vla-SetText ename_cell n_row 0 (car el)) (vla-SetCellTextStyle ename_cell n_row 0 "Tab-Profil") (vla-SetCellTextHeight ename_cell n_row 0 h_t) (vla-SetCellAlignment ename_cell n_row 0 2) (vla-SetText ename_cell n_row 1 (cdr el)) (vla-SetCellTextStyle ename_cell n_row 1 "Tab-Profil") (vla-SetCellTextHeight ename_cell n_row 1 h_t) (vla-SetCellAlignment ename_cell n_row 1 2) ) (vlax-release-object ename_cell) (vlax-release-object Space) (setvar "clayer" oldlay) (prin1) )
-
??? Sous quelle version ? Jusqu`à maintenant, je n'ai aucune connaissance de ce fait! Le DXF (Data eXchange File) n'est qu'un format d'échange basique de données graphiques entre logiciels de graphisme, pas de données. Si tu as un DXF d'exemple, je suis preneur!
-
Ceci aurait l'air de le faire pour l'exemple donné; à adapter selon l'usage voulu: la chaine "_CM_" et "_M_" pour d'autres remplacements. ((lambda ( / flag tbl_lay dxf_lay nw_str) (vl-load-com) (setq flag T) (while (setq tbl_lay (tblnext "LAYER" flag)) (setq dxf_lay (entget (tblobjname "LAYER" (cdr (assoc 2 tbl_lay))))) (setq nw_str (vl-string-subst "_CM_" "_M_" (cdr (assoc 2 dxf_lay)))) (entmod (subst (cons 2 nw_str) (assoc 2 dxf_lay) dxf_lay)) (setq flag nil) ) (prin1) ))
-
Je me demande si une confusion ne s'est pas inséré... MAXACTVP n'a aucune incidence sur le nombre de fenêtres que l'on peut créer. Elle représente le nombre de fenêtres qu'elle va gérer simultanément à l'affichage. Si tu as 127 fenêtres (seules les 64 premières seront affichées; suivant MAXACTVP) Si tu veux pouvoir afficher les suivantes, il faut inactiver les 64 premières pour que les suivante soient repris en charge par l'affichage. Travailler à l'aveugle pour des fenêtres répétitive [Entendre plutôt fenêtres par présentation dans ce cas]n'est pas forcément gênant, pour peu qu'il y ait un script ou un lisp qui fasse cela. D'ailleurs MAXACTVP peut être baissé dans ce cas... En tout cas c'est ce que j'ai compris.
-
Bonjour, Pour compléter la réponse #9 de lecrabe, je rajouterais que l'import en EDIGeo du cadastre peut se faire sans Covadis. Comment procéder? 1 Télecharger les fichier en JSON 2 Comme dit ICI le format Json n'est pas supporté par Autodesk. Alors suivant la recommandation, utiliser MAPSHAPER pour faire la conversion de Json en Shp (le soft en ligne est vraiment très bien, convertion rapide et simple) 3 Définir le système de projection à l'import des shapes sur le code EPSG 4326 (LL84) 4 Si besoin re-projeter dans le système voulu. Je l'ai fait avec le Lambert93 code EPSG 2154 et c'est très bien calé avec les images ECW de la BD-Ortho en L93. Les données d'objet sont peut être différentes qu'avec le format edigeo, mais il y a l'essentiel comme le code INSEE de la commune, donc requête possible... Voilà pour la procédure possible sans Covadis, si ça peut faire avancer les choses ou décoincer pour certain. NB: Comme avec ce format vous traiter le département en entier, il faut avoir une bonne bécane. Les traitements peuvent être long (TRES long... 4h pour ma part avec une machine moyenne)
-
Problème de chargement AutoCAD.lin
bonuscad a répondu à un(e) sujet de fiesta13310 dans AutoCAD 2017
Juste un conseil. Eviter de modifier le fichier A C A D.LIN ou ACADISO.LIN pour y rajouter vos type de ligne. En cas de réinitialisation d'installation ou simplement d'installation d'une nouvelle version, vous risquez de perdre vos définitions si vous ne pensez pas à sauvegarder ces fichiers. Pour ma part je crée un fichier "XXX.LIN" par type de ligne que je place dans un dossier de personnalisation. D'autre part j'utilise un éditeur (pas le bloc-note!)où je peux voir les symbole de fin de ligne/retour de ligne; car l’absence d'un retour charriot en fin de ligne provoque souvent: Pour des type de ligne utilisant des STYLE de texte, il faut que le style soit défini au préalable. Je parle bien du "STYLE" ET PAS DE LA "POLICE" de caractère. (le style a le nom qu'on lui donne, souvent celui de la police pour faire simple) Si ont respecte cela c'est plus facile à gérer, mais ce n'est que mon avis... -
Bonjour Didier, Pour le test rapide que j'avais fais, je me souviens d'avoir eu ce retour. En fait cela vient que le dossier où est installé l'application doit être déclaré dans les "emplacements approuvés" dans les options pour que ça fonctionne correctement. Est ce le cas pour toi?
-
Bonjour, Je viens de remarquer que sous Windows 10, avec le navigateur Edge, on pouvait avoir accès à un DWG Viewer avec une extension à installer à travers Microsoft Store: AutoCAD mobile - DWG viewer, Editor & CAD Drawing Tools disponible sous: PC, Mobile, HoloLens, Hub Je ne sais pas ce que ça vaut, je n'ai pas l'intention d'installer cette extension. Je pense que cela doit être un peu gadget; vue la taille d'un écran de mobile. Enfin cela peut cependant rendre service sur un chantier. Quelqu'un a testé ce genre d'appli?
-
[Résolu] Coordonnées de l'écran "Objet"
bonuscad a répondu à un(e) sujet de DenisHen dans Débuter en LISP
Bonjour, Si j'ai bien compris ton besoin, tourne toi vers les variables VSMIN et VSMAX (ViewScreen Min et Max; pour la mémo technique) Attention valeur dans le SCU courant... -
Vérifier si un certain type d'objet est présent dans un jeu de sélection
bonuscad a répondu à un(e) sujet de Aleck_Ultimate dans Débuter en LISP
Bonjour, Alors je vais me contenter d'énumérer les fonction qui te seraient utiles: (ssget) pour un jeu de selection (sslength) pour le nombre d'entités contenues (ssname) pour obtenir le nom d'entité (entget) : tu connais déjà A mettre dans une boucle avec une condition de comparaison.... (là ça se corse pour monter ça correctement) Aide toi du site de Didier pour avoir plus d'info sur les fonctions énumérées. Y a plus qu'à!... -
Sur l'extrait fourni, ça à l'air de fonctionner. Vérifier les résultats, je ne suis pas à l'abri de faire une boulette. A copier-coller directement en ligne de commande. ((lambda ( / js tbl n target_obj elist xd_list e_data data_lst tbldef tblstr fldnamelist fldtypelist fldnme fldtyp fld) (setq js (ssget "_X" '((0 . "LWPOLYLINE") (-3 ("Txt2Lin"))))) (cond (js (ade_oddefinetab (list (cons "Tablename" "ETIQ-STR") (cons "TableDesc" "") (cons "Columns" (mapcar '(lambda (x) (list (cons "ColName" (strcat "STRUCTURE" x)) (cons "ColDesc" "") (cons "ColType" "Character") (cons "DefaultVal" "") ) ) '("1" "2" "3" "4" "5" "6" "7" "8" "9" "10") ) ) ) ) (setq tbl "ETIQ-STR" n -1 tbldef (ade_odtabledefn tbl)) (repeat (sslength js) (setq target_obj (ssname js (setq n (1+ n))) elist (entget target_obj (list "Txt2Lin")) xd_list (cdr (assoc -3 elist)) e_data (mapcar 'cdr (cdr (car xd_list))) data_lst (mapcar '(lambda (x) (nth x e_data)) '(1 3 5 7 9 11 13 15 17 19)) tblstr (cdr (nth 2 tbldef)) fldnamelist () fldtypelist () ) (foreach fld tblstr (setq fldnme (cdr (nth 0 fld)) fldtyp (cdr (nth 2 fld)) fldnamelist (append fldnamelist (list fldnme)) fldtypelist (append fldtypelist (list fldtyp)) ) ) (ade_odaddrecord target_obj tbl) (mapcar '(lambda (x y) (ade_odsetfield target_obj tbl x 0 y)) fldnamelist data_lst ) ) ) ) ))
-
Je l'ai déjà fais mais d'une manière très personnalisé, ce n'est pas une routine générique applicable sur n'importe quel dessin. Je pourrais peut être l'adapté à ton cas, mais il me faudrait un dessin (un extrait) comportant quelque entités à traiter de façon à la personnaliser à ton cas.
-
Une idée en passant. Appliquer la commande FILTRER avec comme définition: Objet = Bloc Nom du bloc = A19-BLK* Une fois cette sélection faite, utiliser la commande BURST (des ExpressTools), comme cela tu sera débarrassé de tes blocs (que tu pourra purger car inutiles) et tu récupérera ainsi que des MTEXT que tu pourra traité avec SMT. Bon ça peu chambouler pas mal de paramètres des textes qui seront peut être pénible à remettre en place.
-
Bon c'est pas très orthodoxe, mais on peut... exemple: ((lambda ( / ray pt) (initget 7) (setq ray (getdist "\nRayon du poteau?: ")) (command "_pline") (while (setq pt (getpoint "\nPoint suivant: ")) (command "_non" pt) (entmake (list '(0 . "CIRCLE") (cons 10 pt) (cons 40 ray))) ) ))
-
Bonjour, Je donne en exemple les sources contenant tout ce qui est nécessaire pour dessiner un type de ligne complexe qui utilise un fichier forme. Le contenu du fichier "chaine.shp" à compiler pour obtenir le shx. *256,96,CHAINE 2,0FC,8,(-125,0),1,8,(125,0),10,(15,064),8,(-125,0),10,(15,024),2,3,2,8,(100,0),8, (65,0),1,3,2,4,4,12,(48,-35,42),8,(55,0),12,(48,35,41),2,8,(0,30),1,12,(-48,35,41), 8,(-55,0),12,(-48,-35,42),2,8,(34,0),1,12,(14,5,-23),8,(55,0),12,(13,-5,-24),2,8, (0,-30),1,12,(-13,-5,-24),8,(-55,0),12,(-14,5,-23),2,8,(69,15),0 Le contenu du fichier "chaine.lin" *chaine, maillon-chaine ==O==O==O==O=O== A,0,[CHAINE,chaine.shx,x=0,s=1],-185.5,0 Si tout à été fait correctement et les fichiers sont accessibles à AutoCAD (placés au bon endroit), alors vous pourrez charger la définition du fichier chaine.lin et dessiner ou transformer des segments droits ou courbes (avec des rayons importants) en forme de maillon de chaine. Je rappelle qu'un type de ligne doit être voué a représenter une symbolique et non définir une représentation précise d'une répétition de motif; préférer alors mesurer avec bloc. Avec les polylignes pensez aussi à activer la génération du type de ligne pour avoir un meilleur rendu.
-
Fonctions utilisables dans les formules de champ
bonuscad a répondu à un(e) sujet de (gile) dans Personnalisation, macros, DIESEL
Salut, Il serait intéressant de rajouter la fonction: w2u qui permet la transformation de coordonnées du système général vers utilisateur -
Attention: Tu as besoin "d'armer" (initget) avant chaque fonction (get"xxx") Dans ton code (initget (+ 1 2 4) ne sert qu'à (setq b (getdist a "\nDimension du rayon : ")), tu doit le réarmer avant (setq c (getdist a "\nLongueur du tube : ")) Autre chose, tu fais des appel à (command) et quand tu utilise des fonction de dessin, il faut penser à la valeur de (getvar/setvar "OSMODE") car les accroches objets peuvent te donner des résultats imprévus.
-
En un mot: génial! J'ai testé depuis AutoCAD Map 2014 avec un fichier conséquent (à la hauteur d'un département). La génération a été un peu longue: AutoCAD donnait l'impression d'être planté (pas de réponse), mais il m' a rendu la main et le fichier était généré. Je l'ai importé avec google earth lancé depuis chrome avec l'import KML en version beta. Aucun souci, bien calé, je retrouve les données d'objets de Map. Un grand merci pour ton partage.
-
Portable figé alimentation
bonuscad a répondu à un(e) sujet de Olivier Eckmann dans Windows trucs et astuces
Bonjour, J'en parle, car mes symptômes concerne aussi un portable DELL. Jusqu'à début Janvier tout allait bien (dual-boot Windows 10 / Linux Ubuntu LTS). Sous Linux il y a eu une mise à jour des noyaux concernant Spectre et Meltdown. Depuis je n'arrive plus à démarrer sous linux avec le dernier noyau, il reboot sans cesse. (avec le noyau précédent pas de souci) en restant connecté au secteur. Le seul moment ou j'arrive à accrocher le dernier noyau et quand je démarre sur batterie. J'en ai discuté dans le monde Linux, qui est assez remonté contre intel qui a distribuer des mise à jour de microcode qui sont problématiques (Il parait que intel a retiré promptement leur mise à jour après de nombreux problèmes relevés autant sous Windows que Linux) Alors on peut être tenté par ces mise à jour de sécurité, mais flasher son BIOS ou appliquer des mise à jour matériel par logiciel et plutôt risqué en ce moment. As tu été tenté de faire des mise à jour importantes depuis le début de l'année? -
additionner la longueur de plusieurs lignes ou polylignes
bonuscad a répondu à un(e) sujet de laura dans Routines LISP
Au plus réduit..., tu pourrais faire ceci: changer (setq t_perim (strcat (rtos (apply '+ l_perim) 2 vprec) " Ml")) par (setq factor (getreal "\nFacteur multiplicatif? <1>: ")) (if (not factor) (setq factor 1.0)) (setq t_perim (strcat (rtos (* factor (apply '+ l_perim)) 2 vprec) " Ml"))
