-
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
-
Il faudra que je refasse un test sous une 2008, car j'avais pas compris pourquoi la 1ere syntaxe ne fonctionne pas alors que la 2eme oui. (peut être que ma fenêtre a été généré entre les 2 manips!)
-
Quand je t'ai fais la proposition, j'étais sous une 2008 et il n'acceptait pas :vlax-False ou :vlax-True (même erreur : erreur: Erreur Automation Non valable) mais 0 et -1 sans problème. En ce moment sous Autocad Map 2011, il accepte les 2 syntaxes ?!?! As tu essayé avec 0 ou -1 comme arguments?
-
Si tu utilise OSMODE à 0 alors APERTURE ne sera d'aucun utilité: c'est la taille de la cible d'accrochage. PICKBOX est la taille de la cible de sélection, si tu la mets à 1 et que tu prends par exemple la commande "effacer", tu verra que ta cible est minuscule (la sélection devient plus difficile à la souris) mais à travers le lisp, cela peut éviter une sélection malencontreuse d'autres objets. D'après ce que j'ai compris tu récupère un point_insertion, donc il provient bien d'un objet, c'est sur celui-ci qui faudrait zoomer pas sur celui que tu cherche à sélectionner (qui à l'air à proximité).
-
Difficile de dire si tu as raison sans voir le fichier. Pour ma part de manière générale je scinde facilement en Xref, une partie qui contient l'habillage du plan (hachures principalement (avec leur contours))qui n'est pas forcément nécessaire à la compréhension du plan. Et en alternative aux annotations que je trouve gourmande et lourde à mettre en place, je mets souvent les textes en xref (que je gère en échelle par fichiers indépendants). Cette application que je fais n'est pas une règle, mais pour moi elle me permet de garder des tailles de fichier plus facilement gérable. Après le métier peut avoir d'autres exigences.
-
Bonjour, Toute les formes de (ssget) qui requiert des points de sélections peuvent avoir des retours de sélections aléatoires. Comme c'est une forme graphique de sélection celle-ci est dépendante de l'affichage du mode d'accrochage, des paramètres de sélections. Si cela est possible il vaut mieux accentuer son filtre de sélection général que de faire des sélections graphiques individuelles. Si ce n'est pas possible (cela peut l'être), il te faut penser (si ce n'est déjà fait) à régler OSMODE APERTURE PICKBOX. Isoler le calque à traiter peu aider aussi a un meilleur comportement. Si le résultat n'est pas convainquant il faudra par exemple par une boucle avec un zoom objet (ceci pour faire la sélection a peu prés avec les mêmes conditions graphiques) avant de lancer ta ligne de sélection. Les système de coordonnés (par exemple les Lambert topographique) peuvent être aussi un handicap pour les sélections par points. En général, les sélections par points se révèlent souvent problématiques...
-
Bonjour (vla-put-ViewportOn ent 0) 0 ou -1
-
Oups, J'ai voulu gérer les SCU mais je n'ai pas fait assez de tests... Si tu travaille qu'en 2D, tu peux simplement remplacer: p_cen (trans (cdr (assoc 10 dxf_ent)) (car ent) 0) par p_cen (cdr (assoc 10 dxf_ent)) dans le code proposé. Cependant la commande COTCEN (_DIMCENTER) suggérer par VDH-Bruno semble elle très bien gérer le SCU des entités. Régler cependant correctement la variable DIMCEN. A toi de choisir! NB: Après quelque tests avec des SCU en 3D (Xref ou dessin courant) la syntaxe: p_cen (trans (cdr (assoc 10 dxf_ent)) (cdr (assoc 210 dxf_ent)) 0 T) à l'air correct. J'ai modifié le code précédent (rajouter, tant qu'à faire, les arcs)
-
MAP : Supprimer un système de coordonnées
bonuscad a répondu à un(e) sujet de Zugzwang83 dans AutoCAD 2012
Bonjour, Effectivement par la boite de dialogue, il semble impossible de rendre vierge le système employé. Par contre en ligne de commande en employant cette syntaxe, ça à l'air de fonctionner. (ade_projsetwscode "") -
Pas vraiment, plus simple d'en faire un nouveau. Alors rapidement; ceci? (defun c:circle_leader ( / ent dxf_ent p_cen rad p10 p11 dxf_obj) (while (not ent) (setq ent (nentsel "\nSelectionner un cercle ou un arc: ")) (cond (ent (setq dxf_ent (entget (car ent))) (cond ((member (cdr (assoc 0 dxf_ent)) '("CIRCLE" "ARC")) (setq p_cen (trans (cdr (assoc 10 dxf_ent)) (cdr (assoc 210 dxf_ent)) 0 T) rad (cdr (assoc 40 dxf_ent)) p10 (polar p_cen 0.0 (* rad 1.25)) p11 (polar p_cen pi (* rad 1.25)) ) (repeat 2 (setq dxf_obj (list '(0 . "LINE") '(100 . "AcDbEntity") (assoc 67 dxf_ent) (assoc 410 dxf_ent) (cons 8 (getvar "CLAYER")) '(100 . "AcDbLine") (cons 10 p10) (cons 11 p11) (cons 210 '(0 0 1)) ) ) (entmake dxf_obj) (setq p10 (polar p_cen (* pi 0.5) (* rad 1.25)) p11 (polar p_cen (* pi 1.5) (* rad 1.25)) ) ) ) (T (setq ent nil) (princ "\nL'objet ne convient pas! Attend un CERCLE ou un ARC.") ) ) ) (T (princ "\nAucun objet sélectionné!") ) ) ) (prin1) )
-
La version proposée traitant les arcs, il ne m'est pas compliqué de rajouter les cercles. Alors voilà! (defun sel_obj_median (msg / ent dxf_ent) (while (not ent) (setq ent (nentsel msg)) (cond (ent (setq dxf_ent (entget (car ent))) (if (member (cdr (assoc 0 dxf_ent)) '("LINE" "ARC" "CIRCLE" "LWPOLYLINE")) dxf_ent (progn (setq ent nil) (princ "\nL'objet ne convient pas! Attend une LIGNE, ARC,CERCLE ou POLYLIGNE.") ) ) ) (T (princ "\nAucun objet sélectionné!") ) ) ) ) (defun c:vertex_median ( / fst_ob snd_obj dxf_obj n e_valid tmp_obj lst1 lst2 nw_lst l_vtx l_blg lremov) (setq fst_obj (sel_obj_median "\nSélectionner le 1er objet: ") snd_obj (sel_obj_median "\nSélectionner le 2ème objet: ") ) (cond ((eq (cdr (assoc 0 fst_obj)) (cdr (assoc 0 snd_obj))) (setq dxf_obj fst_obj n 1 e_valid T tmp_obj snd_obj) (repeat 2 (set (read (strcat "lst" (itoa n))) (cond ((eq (cdr (assoc 0 dxf_obj)) "LINE") (list (cons (cdr (assoc 10 dxf_obj)) 0.0) (cons (cdr (assoc 11 dxf_obj)) 0.0)) ) ((eq (cdr (assoc 0 dxf_obj)) "ARC") (list (cons (cdr (assoc 10 dxf_obj)) (cdr (assoc 40 dxf_obj))) (cons (list (cdr (assoc 50 dxf_obj)) (cdr (assoc 51 dxf_obj))) 0.0)) ) ((eq (cdr (assoc 0 dxf_obj)) "CIRCLE") (list (cons (cdr (assoc 10 dxf_obj)) (cdr (assoc 40 dxf_obj)))) ) ((eq (cdr (assoc 0 dxf_obj)) "LWPOLYLINE") (mapcar 'cons (mapcar 'cdr (vl-remove-if '(lambda (x) (/= (car x) 10)) dxf_obj)) (mapcar 'cdr (vl-remove-if '(lambda (x) (/= (car x) 42)) dxf_obj)) ) ) ) ) (setq dxf_obj snd_obj n (1+ n)) ) (if (not (eq (length lst1) (length lst2))) (progn (setq e_valid nil) (princ "\nPas de cohérence dans le nombre de sommets."))) (While e_valid (setq nw_lst (mapcar 'cons (mapcar '(lambda (x y) (list (* (+ (caar x) (caar y)) 0.5) (* (+ (cadar x) (cadar y)) 0.5) ) ) lst1 lst2 ) (mapcar '(lambda (x y) (* (+ (cdr x) (cdr y)) 0.5) ) lst1 lst2 ) ) ) (cond ((eq (cdr (assoc 0 dxf_obj)) "LINE") (setq dxf_obj (subst (cons 10 (caar nw_lst)) (assoc 10 dxf_obj) dxf_obj) dxf_obj (subst (cons 11 (caadr nw_lst)) (assoc 11 dxf_obj) dxf_obj) ) ) ((eq (cdr (assoc 0 dxf_obj)) "ARC") (setq dxf_obj (subst (cons 10 (caar nw_lst)) (assoc 10 dxf_obj) dxf_obj) dxf_obj (subst (cons 40 (cdar nw_lst)) (assoc 40 dxf_obj) dxf_obj) dxf_obj (subst (cons 50 (caaadr nw_lst)) (assoc 50 dxf_obj) dxf_obj) dxf_obj (subst (cons 51 (car (cdaadr nw_lst))) (assoc 51 dxf_obj) dxf_obj) ) ) ((eq (cdr (assoc 0 dxf_obj)) "CIRCLE") (setq dxf_obj (subst (cons 10 (caar nw_lst)) (assoc 10 dxf_obj) dxf_obj) dxf_obj (subst (cons 40 (cdar nw_lst)) (assoc 40 dxf_obj) dxf_obj) ) ) ((eq (cdr (assoc 0 dxf_obj)) "LWPOLYLINE") (setq l_vtx (mapcar 'car nw_lst) l_blg (mapcar 'cdr nw_lst) dxf_obj nil) (while tmp_obj (cond ((eq (caar tmp_obj) 10) (setq dxf_obj (cons (cons 10 (car l_vtx)) dxf_obj) l_vtx (cdr l_vtx)) ) ((eq (caar tmp_obj) 42) (setq dxf_obj (cons (cons 42 (car l_blg)) dxf_obj) l_blg (cdr l_blg)) ) (T (setq dxf_obj (cons (car tmp_obj) dxf_obj)) ) ) (setq tmp_obj (cdr tmp_obj)) ) (setq dxf_obj (reverse dxf_obj)) ) ) (setq lremov nil) (foreach n dxf_obj (if (member (car n) '(5 330 -1)) (setq lremov (cons (car n) lremov)))) (foreach m lremov (setq dxf_obj (vl-remove (assoc m dxf_obj) dxf_obj)) ) (entmake (subst (cons 8 (getvar "CLAYER")) (assoc 8 dxf_obj) dxf_obj)) (cond ((not (member (cdr (assoc 0 dxf_obj)) '("ARC" "CIRCLE"))) (initget "Accepter Voir _Accept See") (if (eq (getkword "\nChoisir la solution affichée, [Accepter/Voir] la suivante? <Accepter>: ") "See") (progn (setq lst2 (reverse lst2) e_valid T) (if (eq (cdr (assoc 0 dxf_obj)) "LWPOLYLINE") (setq lst2 (mapcar 'cons (mapcar 'car lst2) (mapcar '- (mapcar 'cdr (append (cdr lst2) (list (car lst2)))))) tmp_obj snd_obj ) ) (entdel (entlast)) ) (setq e_valid nil) ) ) (T (setq e_valid nil)) ) ) ) (T (princ "\nLes objet sont de nature différente") ) ) (prin1) )
-
J'ai regardé vite fait ton fichier. Déjà un contrôle du fichier est nécessaire... Puis effectivement il y a de nombreux blocs, mais aussi pas mal d'entrées de dictionnaire. Ceux qui m'ont interpellés: "AcDsSchemas" dans "AcDsDecomposeData" et "ASEBlockHierachyIndexRecord" dans "ASE_INDEX_DICTIONARY" Les supprimer pourrait peut-être réduire le fichier. (à toi de choisir !) Je n'ai pas vérifié si des entités pouvaient avoir des données étendues. -purger en ligne de commande (pour accéder à l'option "appsenReg") pour purger les applications. Mais il est quand même normal que ce fichier garde une certaine taille (il est assez fourni!)
-
On a l'impression qu'un générateur de XLINE est passé par là! :(rires forts):
-
Ça te donne zéro car tes lignes sont horizontale ou verticale et de même longueur, mais si tu sort de ce cas précis, ce n'est plus le cas! En plus je te rappelle qu'il peut traiter les polylignes (avec arc) et avoir une longueur de 0.0 est peu probable. Pour rappel, le code peut traiter des arêtes non parallèles et de longueur différente (réduction de diamètre, même dissymétrique), mais il est mieux d'avoir une cohérence entre celles-ci pour que le résultat soit valable car le code ne vérifie pas cette cohérence. (Ça compliquerai beaucoup le code pour faire cela) Pour résumer: c'est un traceur de médiane de segments.
-
Ce qu'il peut se passer, c'est que les lignes (ou polylignes) n'aient pas le même sens de parcours (Cela ne s'applique pas aux Arcs, qui eux sont toujours dans le sens trigo); cela crée donc un effet papillon pour le résultat qui est faux. Pour palier à ce problème, j'ai modifié le code précédent pour pouvoir dessiner l'autre solution si la première ne convient pas.
-
Je peut te proposer ceci, à condition que l'xref soit attaché au point 0,0,0 sans facteur d'échelle et l'angle d'insertion à zéro (autrement il faudrait approfondir le code) Cela devrait fonctionner avec des LIGNE,ARC et POLYLIGNE allégées (pour peu qu'elles aient le même nombres de sommets) (defun sel_obj (msg / ent dxf_ent) (while (not ent) (setq ent (nentsel msg)) (cond (ent (setq dxf_ent (entget (car ent))) (if (member (cdr (assoc 0 dxf_ent)) '("LINE" "ARC" "LWPOLYLINE")) dxf_ent (progn (setq ent nil) (princ "\nL'objet ne convient pas! Attend une LIGNE, ARC ou POLYLIGNE.") ) ) ) (T (princ "\nAucun objet sélectionné!") ) ) ) ) (defun c:axe_tuy ( / fst_ob snd_obj dxf_obj n e_valid tmp_obj lst1 lst2 nw_lst l_vtx l_blg lremov) (setq fst_obj (sel_obj "\nSélectionner le 1er objet: ") snd_obj (sel_obj "\nSélectionner le 2ème objet: ") ) (cond ((eq (cdr (assoc 0 fst_obj)) (cdr (assoc 0 snd_obj))) (setq dxf_obj fst_obj n 1 e_valid T tmp_obj snd_obj) (repeat 2 (set (read (strcat "lst" (itoa n))) (cond ((eq (cdr (assoc 0 dxf_obj)) "LINE") (list (cons (cdr (assoc 10 dxf_obj)) 0.0) (cons (cdr (assoc 11 dxf_obj)) 0.0)) ) ((eq (cdr (assoc 0 dxf_obj)) "ARC") (list (cons (cdr (assoc 10 dxf_obj)) (cdr (assoc 40 dxf_obj))) (cons (list (cdr (assoc 50 dxf_obj)) (cdr (assoc 51 dxf_obj))) 0.0)) ) ((eq (cdr (assoc 0 dxf_obj)) "LWPOLYLINE") (mapcar 'cons (mapcar 'cdr (vl-remove-if '(lambda (x) (/= (car x) 10)) dxf_obj)) (mapcar 'cdr (vl-remove-if '(lambda (x) (/= (car x) 42)) dxf_obj)) ) ) ) ) (setq dxf_obj snd_obj n (1+ n)) ) (While e_valid (setq nw_lst (mapcar 'cons (mapcar '(lambda (x y) (list (* (+ (caar x) (caar y)) 0.5) (* (+ (cadar x) (cadar y)) 0.5) ) ) lst1 lst2 ) (mapcar '(lambda (x y) (* (+ (cdr x) (cdr y)) 0.5) ) lst1 lst2 ) ) ) (cond ((eq (cdr (assoc 0 dxf_obj)) "LINE") (setq dxf_obj (subst (cons 10 (caar nw_lst)) (assoc 10 dxf_obj) dxf_obj) dxf_obj (subst (cons 11 (caadr nw_lst)) (assoc 11 dxf_obj) dxf_obj) ) ) ((eq (cdr (assoc 0 dxf_obj)) "ARC") (setq dxf_obj (subst (cons 10 (caar nw_lst)) (assoc 10 dxf_obj) dxf_obj) dxf_obj (subst (cons 40 (cdar nw_lst)) (assoc 40 dxf_obj) dxf_obj) dxf_obj (subst (cons 50 (caaadr nw_lst)) (assoc 50 dxf_obj) dxf_obj) dxf_obj (subst (cons 51 (car (cdaadr nw_lst))) (assoc 51 dxf_obj) dxf_obj) ) ) ((eq (cdr (assoc 0 dxf_obj)) "LWPOLYLINE") (setq l_vtx (mapcar 'car nw_lst) l_blg (mapcar 'cdr nw_lst) dxf_obj nil) (while tmp_obj (cond ((eq (caar tmp_obj) 10) (setq dxf_obj (cons (cons 10 (car l_vtx)) dxf_obj) l_vtx (cdr l_vtx)) ) ((eq (caar tmp_obj) 42) (setq dxf_obj (cons (cons 42 (car l_blg)) dxf_obj) l_blg (cdr l_blg)) ) (T (setq dxf_obj (cons (car tmp_obj) dxf_obj)) ) ) (setq tmp_obj (cdr tmp_obj)) ) (setq dxf_obj (reverse dxf_obj)) ) ) (setq lremov nil) (foreach n dxf_obj (if (member (car n) '(5 330 -1)) (setq lremov (cons (car n) lremov)))) (foreach m lremov (setq dxf_obj (vl-remove (assoc m dxf_obj) dxf_obj)) ) (entmake (subst (cons 8 (getvar "CLAYER")) (assoc 8 dxf_obj) dxf_obj)) (cond ((not (eq (cdr (assoc 0 dxf_obj)) "ARC")) (initget "Dessine Autre _Draw Other") (if (eq (getkword "\nChoisir la solution [Dessine/Autre]? <Dessine>: ") "Other") (progn (setq lst2 (reverse lst2) e_valid T) (if (eq (cdr (assoc 0 dxf_obj)) "LWPOLYLINE") (setq lst2 (mapcar 'cons (mapcar 'car lst2) (mapcar '- (mapcar 'cdr (append (cdr lst2) (list (car lst2)))))) tmp_obj snd_obj ) ) (entdel (entlast)) ) (setq e_valid nil) ) ) (T (setq e_valid nil)) ) ) ) (T (princ "\nLes objet sont de nature différente") ) ) (prin1) )
-
Pourquoi ne pas le faire directement? commande _MESH avec l'option _Cylinder. Si besoin entrer dans l'établissement des paramètres _SETTING puis dans [maillage par approximation] M (boite de dialogue) et régler pour obtenir un nombre de faces suffisants Après tu le décompose pour obtenir des 3DFACE.
-
Bonjour VDH-Bruno Pas sur que cela vienne de là car en mode sélection/verbe, il n'y a pas de problème! En tout cas ta formulation à l'avantage de supprimer les appels par (command), donc...: un plus indéniable. Par curiosité j'ai essayé mon code sous une version 2008, mais la transparence de VUE est très mal supportée à contrario de la version 2011 où je l'ai conçue. Alors que ta version ne pose aucun problème suivant la version d'Autocad. Adoptée! et je conseille à Olivier de faire de même... :P
-
modification du Z de point topo autocad map
bonuscad a répondu à un(e) sujet de sepacap dans Autodesk Map
Ton plan DWG ne serait pas attaché en Xref ou en bloc des fois? Si c'est le cas, il te faut éditer celui-ci, ou modifier le point d'insertion en Z de celui-ci. Fais la commande LISTE et sélectionne un de tes points et donne le retour ici. Attention aux accroches objets lors des manip (le mieux et de désactiver ceux-ci) -
Selectionner des objets dans differentes presentations
bonuscad a répondu à un(e) sujet de salvanorigatore dans AutoCAD 2013
Bonjour, A ma connaissance seule la fonction lisp (ssget) avec l'option "X" permet une sélection dans Tout le dessin (y compris les présentations et les objets de l'espace papier) par exemple pour passer tout les cercles sur le "calque1" quelque soit leur espace. Je te laisse adapter à ton besoin ((lambda ( / js n dxf_ent) (setq js (ssget "_X" '((0 . "CIRCLE")))) (cond (js (repeat (setq n (sslength js)) (setq dxf_ent (entget (ssname js (setq n (1- n))))) (entmod (subst '(8 . "Calque1") (assoc 8 dxf_ent) dxf_ent)) ) ) ) )) -
La commande REGEN recalcule pour l'affichage tout les entités qui sont à l'écran et n'appartenant pas à des calques gelés et qui sont compris dans les limites des variables VSMIN et VSMAX (et en redéfinissant celles-ci, rejoint la réponse de x_all). Les calques inactifs sont quant à eux recalculer aussi. Depuis les champs dynamiques, la commande met aussi à jour ceux-ci, suivant la valeur de FIELDEVAL. Lors de modification d'entités complexes: blocs, cotations, polylignes (anciennes),... un Regen peut être nécessaire pour voir effectivement la mise à jour de celles-ci. Pour la réponse de Fundream, effectivement ça recalcule les arrondis (à moins d'utiliser la variable WHIPARC, mais celle ci est aussi gourmande en ressource)
-
C'est vrai que c'est agaçant! On peut remarquer que dans cette situation si on appui sur la molette pour faire un pan (avec le symbole main) et qu'on se déplace, que le cadre de sélection est réduit. J'ai essayer ceci, (on pourrait le mettre dans un bouton) ((lambda ( / p1 p2) (setvar "cmdecho" 0) (command "'_.-view" "_save" "$TMP$") (initget 9) (setq p1 (getpoint "\n1er point?: ")) (initget 41) (setq p2 (getcorner p1 "\n2ème point?: ")) (command "'_.-view" "_restore" "$TMP$") (command "'_.-view" "_delete" "$TMP$") (setvar "cmdecho" 1) (if (zerop (getvar "cmdactive")) (sssetfirst nil (ssget (if (> (car p1) (car p2)) "_C" "_W") p1 p2)) (command (if (> (car p1) (car p2)) "_Crossing" "_Window") p1 p2) ) (prin1) )) Chose bizarre cela fonctionne bien en mode sélection/action (c'est à dire avec les grips), par contre en action/sélection (c'est à dire en transparence dans une commande standard), cela fonctionne bien la 1ere fois, mais par la suite le point p1 est systématiquement substitué par le point p2 de la précédente action .!?!? Je ne comprends pas pourquoi!
-
Bonjour, En ligne de commande! ANNULER Controle aSsocier Oui Cela devrait le faire suivant l'aide
-
Bonjour, Aussi bizarre que cela puisse paraître, la variable de cotation DIMZIN influe sur l'affichage du retour de la fonction lisp (rtos) Si (rtos 1.1 2 2) te renvoie "1.1", c'est que DIMZIN est à 8 ou plus, mets une autre valeur inférieure et le retour sera différent! NB: Cela est évoqué dans l'aide sur DIMZIN
-
Ouais, mais il reste une chose bizarre, Dans l'exemple ci-dessus avec une simple ligne, que je modifie la longueur de ma ligne et que je fais METTREAJOURCHAMP, ça ne fonctionne pas. Par contre si je rentre dans l'éditeur de texte EDITEXTMULT, et que je fais un click-droit en étant sur la valeur du champ et que prends "Mettre à jour le champs" dans le menu contextuel, là ça fonctionne !?!? :blink:
-
Bon par curiosité, j'ai refais l'exemple de Julian-Nihon (en diesel) et effectivement cela fonctionne. Mais le gros problème, comme le diesel a évalué le contenu, si on change la longueur de la ligne et bien le champ ne suis plus (il n'est plus dynamique, puisque que l'expression a été évaluée), donc à mon avis impasse si on compte modifier le paramètre dynamique du bloc par la suite!
