Ahimsa
Membres-
Compteur de contenus
19 -
Inscription
-
Dernière visite
Ahimsa's Achievements
Newbie (1/14)
0
Réputation sur la communauté
-
[RESOLU] EntMake Cote Alignée (AcDbAlignedDimension)
Ahimsa a répondu à un(e) sujet de Ahimsa dans Pour aller plus loin en LISP
Et pour le probleme de point en 0 0 0, c'est le dxf 11 qui faut utiliser en plus. ca m'écrit bien le texte en haut. maintenant je cherche à modifier les type de côte (trait à la place de flèche) et l'écriture (horizontale au lieu de verticale)... ca avance ;) Je viendrais mettre mon résultat ici quand j'aurai terminé. [EDIT: Yes ! Ca y est j'ai trouvé le responsable du style différent, c'est bien sur le dxf 3 --> Dimension style name dans mon cas : (cons 3 "RTE") donc je n'ai pas à modifier tous les petits éléments, c'est un style transporté depuis chez le client, avec la cote exemple. (tout cela se trouve dans le fichier exemple que j'ai fourni plus haut si vous voulez voir.) fiuuu, c'était fastidieux ^_^ Au final il fallait bien le 10 ET le 11 pour le point d'écriture de la cote, avec la même donnée. S'il en manque un, le résultat est radicalement différent. Merci à tous pour votre aide ! Si ça peut servir à d'autres, voila la version finale : [/size][/font] [font="verdana, arial"][size="2"] (setq h0 (entget (car (entsel "\nSélectionnez l'horizontale où écrire les côtes ")))) (setq c1 (entget (car (entsel "\nSélectionnez le premier cercle ")))) (setq c2 (entget (car (entsel "\nSélectionnez le deuxieme cercle ")))) (setq cote (entget (car (entsel "\nSélectionnez la valeur de la côte ")))) (setq h0X (cadr (assoc 10 h0)) h0Y (caddr (assoc 10 h0)) c1X (cadr (assoc 10 c1)) c1Y (caddr (assoc 10 c1)) c2X (cadr (assoc 10 c2)) c2Y (caddr (assoc 10 c2)) valCote (rtos (* 2 (atof (cdr (assoc 1 cote)))) 2 1) ) (entmakex (list (cons 0 "DIMENSION") (cons 100 "AcDbEntity") (cons 8 "01-EMPRISE-SECURITE") (cons 2 "*D6") (cons 100 "AcDbDimension") (cons 1 valCote) (cons 3 "RTE") (cons 10 (list c1X h0Y 0.0)) ; position de la ligne de cote (cons 11 (list c1X h0Y 0.0)) (cons 70 161) ; 1 = cote alignée + 128 + 32 (user define) (cons 100 "AcDbAlignedDimension") (cons 13 (list c1X c1Y 0.0)) ; point d'origine de la première ligne d'attache (cons 14 (list c2X c2Y 0.0)) ; point d'origine de la seconde ligne d'attache )) [/EDIT] -
[RESOLU] EntMake Cote Alignée (AcDbAlignedDimension)
Ahimsa a répondu à un(e) sujet de Ahimsa dans Pour aller plus loin en LISP
Bonjour Vincent, Merci d'avoir regardé. la commande (Assoc 10) me retourne (10 X Y), donc j'ai décalé pour prendre en compte le 10 devant. Je récupère bien les coordonnées X et Y des points. Dans ce cas là : car me renvoi 10 cadr => X caddr => Y -
[RESOLU] EntMake Cote Alignée (AcDbAlignedDimension)
Ahimsa a répondu à un(e) sujet de Ahimsa dans Pour aller plus loin en LISP
Bonjour Patrick, et merci pour les précisions. J'avais déjà vu cette page pour le code 70, c'est pourquoi j'avais identifié le 1 + 32 + 128. 1 c'est cote aligné, 128, c'est pour une position définie par l'utilisateur le code 32 je ne comprends pas vraiment. Il fait référence au groupe code 2, alors j'ai essayé avec ou sans le dxf 2 (si c'est bien lui), mais le résultat est le même. j'avais aussi ajouté le calque, la couleur est gérée par le calque. Ceci dit, j'ai bien avancé, mais il y a toujours un truc qui cloche, puisque ma cote (correcte) va s'écrire en 0,0,0 au lieu du point situé en (X du cercle, Y du trait de construction horizontal, 0.0). Le calcul des points semble correct, si je regarde le résultat de construction du point... donc je me dit qu'il me manque des informations à transmettre. C'est là où j'ai besoin d'aide, vu le nombre de points dans la description, je ne m'en sors pas toute seule. pour l'instant j'en suis là : (setq h0 (entget (car (entsel "\nSélectionnez l'horizontale où écrire les côtes ")))) ;;;Je sais que stocker tout le entget à la place du seul id n'est pas le plus optimisé en place mémoire.. c'est fait pour le debug et pouvoir vérifier les valeurs de mes variables. (setq c1 (entget (car (entsel "\nSélectionnez le premier cercle ")))) (setq c2 (entget (car (entsel "\nSélectionnez le deuxieme cercle ")))) (setq cote (entget (car (entsel "\nSélectionnez la valeur de la côte ")))) (setq h0X (cadr (assoc 10 h0)) c1X (cadr (assoc 10 c1)) c1Y (caddr (assoc 10 c1)) c2X (cadr (assoc 10 c2)) c2Y (caddr (assoc 10 c2)) valCote (rtos (* 2 (atof (cdr (assoc 1 cote)))) 2 1) ; je prends la cote d'un des cercles, la multiplie par 2 et la reconvertie en texte avec 1 décimale ) (entmakex (list (cons 0 "DIMENSION") (cons 100 "AcDbEntity") (cons 8 "01-EMPRISE-SECURITE") (cons 2 "*D6") ; avec ou sans cette ligne le résultat semble identique (cons 100 "AcDbDimension") (cons 1 valCote) (cons 10 (list c1X h0Y 0.0)) ; position de la ligne de cote (cons 70 161) ; 1 = cote alignée + user define (cons 100 "AcDbAlignedDimension") (cons 13 (list c1X c1Y 0.0)) ; point d'origine de la première ligne d'attache (cons 14 (list c2X c2Y 0.0)) ; point d'origine de la seconde ligne d'attache )) Help, svp... O:) -
[RESOLU] EntMake Cote Alignée (AcDbAlignedDimension)
Ahimsa a répondu à un(e) sujet de Ahimsa dans Pour aller plus loin en LISP
Bonjour Gile, Merci pour ton retour ! Il me manquait déjà le code 14. Je pensais que c'était le 13 le plus important des 2, merci pour le minimum nécessaire. Cependant, je n'arrive pas à reproduire la forme de la cote alignée exemple. Je vois que le code 70 est différent (161 à la place de 1 ; comme du 128+32+1, pour un positionnement personnalisé), et que j'ai besoin de mettre le texte manuellement, car il doit être arrondi à 1 décimale (à moins de le modifier ensuite avec un entmod ou une autre solution). Pourtant, je ne trouve pas quelle est la combinaison de code à renseigner pour arriver à reproduire l'exemple. Quand je fais juste ces modifications là, plus d'autres pour essayer, je n'obtient pas de résultat. Est-ce que l'ordre des éléments a de l'importance ? Merci pour ton aide. J'essaie de mettre le fichier en PJ avec l'outil du site, mais j'ai une erreur quand je le fais :/ Erreur :Le serveur a retourné une erreur durant l'envoi. alors le voila sous WeTransfer : https://we.tl/VjsCtmpR8o et le DXF complet de la cote exemple si besoin : ( (-1 . <Nom d'entité: 7ffffb07450>) (0 . DIMENSION) (330 . <Nom d'entité: 7ffffb039f0>) (5 . 36D) (100 . AcDbEntity) (67 . 0) (410 . Model) (8 . 01-EMPRISE-SECURITE) (100 . AcDbDimension) (280 . 0) (2 . *D6) (10 1268.58 1899.69 0.0) (11 1269.95 1945.94 0.0) (12 0.0 0.0 0.0) (70 . 161) (1 . 25.5) (71 . 5) (72 . 1) (41 . 1.0) (42 . 25.48) (73 . 0) (74 . 0) (75 . 0) (52 . 0.0) (53 . 0.0) (54 . 0.0) (51 . 0.0) (210 0.0 0.0 1.0) (3 . RTE) (100 . AcDbAlignedDimension) (13 1268.57 1874.21 0.0) (14 1268.58 1899.69 0.0) (15 0.0 0.0 0.0) (16 0.0 0.0 0.0) (40 . 0.0) (50 . 0.0) ) -
[RESOLU] EntMake Cote Alignée (AcDbAlignedDimension)
Ahimsa a posté un sujet dans Pour aller plus loin en LISP
Bonjour à toutes et tous, Je cherche à faire un entmake d'une cote alignée. Je ne suis pas sure de la syntaxe exacte, en particulier la syntaxe minimum que je pourrais ensuite étoffer. J'essaie de comprendre comment ça fonctionne, mais ça fait plusieurs jours que je me casse la tete dessus... et là, ce n'est pas aussi simple que sur les formes de base. Est-ce que c'est un problème de syntaxe ? est-ce que je ne donne pas les bonnes informations ? Je suis perdue... Je veux bien un coup de main, et un éclairage nouveau :) pour l'instant j'ai ça : (entmakex (list (cons 0 "DIMENSION") (cons 100 "AcDbEntity") (cons 67 0) (cons 8 "01-EMPRISE-SECURITE") (cons 100 "AcDbDimension") ;(1 . 26.5) (cons 1 valCote) ;valeur de la cote (cons 100 "AcDbAlignedDimension") ;(10 453.241 276.946 0.0) (cons 10 (list c1X c1Y 0.0)) ; 1er point de cote ;(11 454.631 322.675 0.0) (cons 11 (list c1X h0Y 0.0)) ;position du texte X et Y (texte du haut) (cons 12 (list 0.0 0.0 0.0)) ;(13 453.246 250.446 0.0) (cons 13 (list c2X c2Y 0.0)) ; 2eme point de cote ;(cons 14 453.241 276.946 0.0) )) Je me suis basé sur : https://www.autodesk...odes_dxf_06.htm j'avoue que je ne comprends pas tout, en particulier la multitude des points : (13,23,33),(14,24,34),(10,20,30),(11,21,31)... J'ai repris le dxf de la cote exemple que j'essaie de reproduire, et j'ai essayé d'en sortir les infos de placement... : '(0 . DIMENSION) '(5 . 1145F9) '(100 . AcDbEntity) '(67 . 0) '(410 . Model) '(8 . 01-EMPRISE-SECURITE) '(100 . AcDbDimension) '(280 . 0) '(2 . *D313) ;(1 . 26.5) ;valeur du texte (list 1 valCote) ;(10 453.241 276.946 0.0) ;point centre 1 (list 10 c1X c1Y 0.0) ;(11 454.631 322.675 0.0) ;position du texte X et Y (texte du haut) (list 11 c1X h0Y 0.0) '(12 0.0 0.0 0.0) ;(13 453.246 250.446 0.0) ;point centre 2 (list 13 c2X c2Y 0.0) '(14 453.241 276.946 0.0) '(70 . 161) '(71 . 5) '(72 . 1) '(41 . 1.0) '(42 . 26.4997) '(73 . 0) '(74 . 0) '(75 . 0) '(52 . 0.0) '(53 . 0.0) '(54 . 0.0) '(51 . 0.0) '(210 0.0 0.0 1.0) '(3 . RTE) '(100 . AcDbAlignedDimension) '(15 0.0 0.0 0.0) '(16 0.0 0.0 0.0) '(40 . 0.0) '(50 . 0.0)) [EDIT: Description pour tenir à jour l'avancée] -
Merci vous deux pour vos précisions ! J'ai eu enfin un peu de temps pour retravailler ce projet. J'ai bien recréé la structure du point, et cela fonctionne. j'ai changé le nom du bloc point pour éviter d'éventuels soucis... ce n'est pas gênant pour les techniciens. Quelques questions en vrac, si vous avez une réponse : - je voudrais changer la couleur de chaque élément, pour faciliter la lecture (comme dans bloc COV). Quel éléments dois-je modifier ? (je pensais à l'élément 62, mais ça ne change rien en test. Faut-il que je rajoute ce code 62 dans chaque attribut, et plutôt dans la définition du bloc ? ou l'appel ?) - le programme doit fonctionner pour 2 types de fichiers, un en échelle verticale 1 , l'autre en échelle verticale 0.2. Vu que je me sers de la position en X et Y pour calculer mes longueurs, c'est sensible à l'échelle. Est-ce qu'il existe une variable autocad que je peux utiliser pour mon calcul (pour éviter de la demander à chaque fois) ? Voici le code que j'ai utilisé pour ça : (non optimisé pour calcul, et en cours de modif pour la gestion des calques en fonction axe ou profil) Merci pour votre aide ! (defun c:CreerPTPLS() (setq valeurPC nil) (setq plTN nil) ;polyligne Terrain Naturel (setq Axe nil) ;Ligne Axe (setq pt nil) ;point en cours, issue de la liste TN (setq numPt 1) ;numéro de point qui va être saisi dans l'attribut Matricule (setq distanceAxe 0) (setq calqAxe "0") ; perp verticales (setq calqCP "B_TOPOPT") ; Altitudes terrain ;saisie de la valeur du Point de Comparaison (print) (if(not(setq valeurPC (getreal "Entrez la valeur du PC : (0)" ))) (setq valeurPC 0) ) ; demande Distance (if(not(setq distanceAxe (getreal "Entrez la distance par rapport à l'axe (0 sur l'axe ; positif pour gauche ; négatif pour droite): (0)" ))) (setq distanceAxe 0) ) ; demande Distance (if(not(setq echelle (getreal "Entrez l'echelle verticale: (0.2)" ))) (setq echelle 0.2) ) ; demande N° de départ (if(not(setq numPt (getreal "Entrez le numéro de point initial : (1)" ))) (setq numPt 1) ) ; selection PL ;selection PolyligneTN (setq plTN (entsel "\nSelectionnez la polyligne: ")) (setq somPlTN (listeSommet plTN)) ;selection point 0 (setq RefPC (entsel "\nSelectionnez la ligne de référence PC (Altitude = PC) : ")) ;récup abscisse et ordonnée (setq ptRefX (caar (massoc 10 (entget (car RefPC))))) (setq ptRefY (car (cdr (car (massoc 10 (entget (car RefPC))))))) ; selection Axe (setq axe (entsel "\nSelectionnez l'axe ")) ; récup abscisse et ordonnée (setq ptXAxe (caar (massoc 10 (entget (car axe))))) (setq ptYAxe (car (cdr (car (massoc 10 (entget (car axe))))))) ; premier point (setq premierPt (car sompltn)) ; on prend le premier point du TN (setq ancienPt (car sompltn)) ; contiendra le point précédent du TN ; définition du bloc ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ; (if (not (tblsearch "BLOCK" "TCPOINT")) ;en phase de test, donc re-définition à chaque fois ; (progn (entmake '( (0 . "BLOCK") (100 . "AcDbEntity") (100 . "AcDbBlockBegin") (2 . "TCPOINTTECH") (70 . 2) (8 . "0") (62 . 1);256) (6 . "ByLayer") (370 . -2) (10 0.0 0.0 0.0) ) ) (entmake '( (0 . "POINT") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 0) (100 . "AcDbPoint") (10 0.0 0.0 0.0) (210 0.0 0.0 1.0) (50 . 0.0) )) (entmake '( (0 . "ATTDEF") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbText") (10 0.0 0.0 0.0); ptX (+ ptYAxe (/ distanceAxe 0.2 )) Altitude) (11 0.00 0.00 0.0) (40 . 0.1) (1 . "") (50 . 0.0) (41 . 0.7) (51 . 0.0) (7 . "STANDARD") (71 . 0) (72 . 1) (210 0.0 0.0 1.0) (100 . "AcDbAttributeDefinition") (280 . 0) (3 . "MAT") (2 . "MAT") (70 . 0) (73 . 0) (74 . 2) (280 . 0) )) (entmake '( (0 . "ATTDEF") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbText") (10 0.0 0.0 0.0); ptX (+ ptYAxe (/ distanceAxe 0.2 )) Altitude) (11 0.00 0.00 0.0) (40 . 0.1) (1 . "") (50 . 0.0) (41 . 0.7) (51 . 0.0) (7 . "STANDARD") (71 . 0) (72 . 1) (210 0.0 0.0 1.0) (100 . "AcDbAttributeDefinition") (280 . 0) (3 . "COD") (2 . "COD") (70 . 0) (73 . 0) (74 . 2) (280 . 0) )) (entmake '( (0 . "ATTDEF") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbText") (10 0.0 0.0 0.0); ptX (+ ptYAxe (/ distanceAxe 0.2 )) Altitude) (11 0.00 0.00 0.0) (40 . 0.1) (1 . "") (50 . 0.0) (41 . 0.7) (51 . 0.0) (7 . "STANDARD") (71 . 0) (72 . 1) (210 0.0 0.0 1.0) (100 . "AcDbAttributeDefinition") (280 . 0) (3 . "ALT") (2 . "ALT") (70 . 0) (73 . 0) (74 . 2) (280 . 0) ) ) (entmake '((0 . "ENDBLK") (100 . "AcDbBlockEnd") (8 . "0") (62 . 256) (6 . "ByLayer") (370 . -2))) ; ) ; ) ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ;tant que on a des points dans le TN (while (setq pt (car sompltn)) ;on prend le point du TN ;récup abscisse et ordonnée et calcul Altitude (setq ptX (car pt)) ;1er ele (setq ptY (car(cdr pt))) ; 2me ele (setq altitude (+ (* 0.2 (- ptY ptRefY)) valeurPC)) ; création point sur Axe pour chaque sommet de PL supérieure ;(point (list ptX (+ ptYAxe (/ 0.2 distanceAxe)) Altitude)) ;en fait, copie d'un point (bloc) existant initial afin de retrouver un bloc déjà existant, et déplacement au point voulu, ;(TCPoint2 (list ptX (+ ptYAxe (/ distanceAxe 0.2 )) Altitude)) ;(nbl(list ptX (+ ptYAxe (/ distanceAxe 0.2 )) Altitude)) (setq ptB (list ptX (+ ptYAxe (/ distanceAxe echelle )) Altitude)) ;point insertion Block (setq ptBM (list (- ptX 0.5) (- (+ ptYAxe (/ distanceAxe echelle )) 0.0) Altitude)) ;point insertion Matricule (setq ptBC (list (+ ptX 1.0) (+ (+ ptYAxe (/ distanceAxe echelle )) 0.5) Altitude)) ;point insertion Code (setq ptBA (list (+ ptX 1.0) (- (+ ptYAxe (/ distanceAxe echelle )) 0.5) Altitude)) ;point insertion Altitude ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! (entmake (append '( (0 . "INSERT") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "#8.Contre-profils") (100 . "AcDbBlockReference") (66 . 1) (2 . "TCPOINTTECH") (41 . 1.0) (42 . 1.0) (43 . 1.0) (50 . 0.0) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0) (210 0.0 0.0 1.0) ) (list (cons 10 ptB)) ) ) (entmake (append '( (0 . "ATTRIB") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "#8.Contre-profils") (100 . "AcDbText") ) (list (cons 10 ptBM)) '( (40 . 0.7) ) (list (cons 1 (rtos numPt))) '( (50 . 0.0) (41 . 0.7) (51 . 0.0) (7 . "STANDARD") (71 . 0) (72 . 1) ) (list (cons 11 ptBM)) '( (210 0.0 0.0 1.0) (100 . "AcDbAttribute") (280 . 0) (2 . "MAT") (70 . 0) (73 . 0) (74 . 2) (280 . 0) ) ) ) (entmake (append '( (0 . "ATTRIB") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "#8.Contre-profils") (100 . "AcDbText") ) (list (cons 10 ptBC)) '( (40 . 0.7) ) (list (cons 1 "11")) '( (50 . 0.0) (41 . 0.7) (51 . 0.0) (7 . "STANDARD") (71 . 0) (72 . 1) ) (list (cons 11 ptBC)) '( (210 0.0 0.0 1.0) (100 . "AcDbAttribute") (280 . 0) (2 . "COD") (70 . 0) (73 . 0) (74 . 2) (280 . 0) ) ) ) (entmake (append '( (0 . "ATTRIB") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "#8.Contre-profils") (100 . "AcDbText") ) (list (cons 10 ptBA)) '( (40 . 0.7) ) (list (cons 1 (rtos (caddr ptB) 2 2))) '( (50 . 0.0) (41 . 0.7) (51 . 0.0) (7 . "STANDARD") (71 . 0) (72 . 1) ) (list (cons 11 ptBA)) '( (210 0.0 0.0 1.0) (100 . "AcDbAttribute") (280 . 0) (2 . "ALT") (70 . 0) (73 . 0) (74 . 2) (280 . 0) ) ) ) (entmake '((0 . "SEQEND") (62 . 256) (6 . "ByLayer") (370 . -2))) ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ;mémoriser ancien point (setq ancienPt pt) ;incrémenter n°point (setq numPt (+ 1 numPt)) ;enlever 1er élément à listepoint (setq somPlTN (cdr somPlTN)) ; on exclue le premier point de la liste des sommets TN, et on recommence );fin while ; (command "_REGEN") (princ) ); Fin créationPointTerrainPLS
-
Bonjour à tous ! Et Merci Bonuscad ! désolé pour la réponse tardive... j'avais une erreur SQL quand je venais sur cadxp.com (An error occured with the SQL server: mySQL query error: DELETE FROM ipb_sessions WHERE member_id=[caché] OR running_time < 1441871826 This is not a problem with IP.Board but rather with your SQL server. Please contact your host and copy the message shown above. J'ai mis quelques jour à comprendre que le problème ne venait pas du site, mais de mon poste. (validé en essayant sur un autre ordi). Pour ta remarque du nom TCPOINT, effectivement, ce sont bien des points Covadis que je dois manipuler, mais à partir de postes qui ne l'ont pas (les dessinateurs ont Cov, mais pas les techniciens). Actuellement ils font les manipulations à la main (dessin d'une droite pour identifier l'endroit de l'axe où mettre le point, copie d'un point Cov existant et placement aux endroits voulus sur l'axe et le contre profil si existant, et modifications des attributs à la main, ... puis on recommence pour les autres sommet d'une polyligne terrain naturel... donc beaucoup de points...) Ce sont donc bien des copies de points covadis... cela pose problème avec entmake ? Covadis ne les reconnaîtraient pas si le fichier retourne aux dessinateurs ? Pour tes autres remarques, effectivement, je ne maîtrise pas entmake, je découvre au fur et à mesure ;o) le ATTRIB autant de fois que d’attribut, je l'avais compris, mais je n'arrivais même pas avec un seul exemplaire, donc je souhaitais valider avec un attribut avant de dupliquer et modifier. J'essaie tout cela de suite.. Merci encore pour ton aide... Ju.
-
Bonjour à tous ! Je suis actuellement sur un lisp qui, pour chaque sommet d'une polyligne, crée un point topo sur un axe. j'arrive sans soucis à sectionner la PL, récupérer les sommets, et créer les points sur l'axe. Problème, je crée des points simples, et je voudrais insérer des blocs topo, avec 3 attributs, dont voici des dxf type (blocs déjà existants) : ((-1 . <Nom d'entité: 7ff761bfc430>) (0 . INSERT) (330 . <Nom d'entité: 7ff7621069f0>) (5 . 3F84B) (100 . AcDbEntity) (67 . 0) (410 . Model) (8 . #8.Contre-profils) (100 . AcDbBlockReference) (66 . 1) (2 . TCPOINT) (10 13279.8 4556.91 -259.772) (41 . 1.0) (42 . 1.0) (43 . 1.0) (50 . 0.0) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0) (210 0.0 0.0 1.0)) ((-1 . <Nom d'entité: 7ff761bfc3e0>) (0 . INSERT) (330 . <Nom d'entité: 7ff7621069f0>) (5 . 3F846) (100 . AcDbEntity) (67 . 0) (410 . Model) (8 . #8.Contre-profils) (100 . AcDbBlockReference) (66 . 1) (2 . TCPOINT) (10 13279.8 4557.91 -259.772) (41 . 1.0) (42 . 1.0) (43 . 1.0) (50 . 0.0) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0) (210 0.0 0.0 1.0)) Je n'arrive pas à générer mon entmake pour ça. Soit cela ne fait rien, soit cela me fait des erreurs (trop d'argument ou code incorrect, etc...). En fouillant, j'ai trouvé des infos dans des vieux sujets, mais cela ne m'a pas aidé (hors sujet, ou liens cassés, etc...) un coup de main ne serait pas de refus ;o) s'il vous plait ... Voici ce que j'ai essayé : version avec attributs (defun TCPoint (pt) (entmake (list '(0 . "BLOCK") ; required '(100 . "AcDbEntity") ; recommended '(100 . "AcDbBlockBegin") ; recommended (cons 2 TCPOINT) ; required '(8 . "0") ; recommended '(70 . 2) ; required [NOTE 0 if no attributes] '(10 pt) ; required )) (entmake '((0 . "ATTDEF") ;*** (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbText") (10 0 0 0) ;*** (40 . 0.1) ; Text height ;*** (1 . "") ; Default value (string) ;*** (3 . "ELEV...."); Prompt string ;*** (2 . "ELEV") ; Tag string ;*** (50 . 0.0) ; Text rotation (41 . 0.7) (51 . 0.0) (7 . "Standard") ; Text style ;*** (71 . 0) (72 . 1) ; Horizontal text justification (11 0 0 0) ;*** (100 . "AcDbAttributeDefinition") (70 . 0) ;Attribute flags: CAB -can cause problems with entmake INSERT if they are incorrect ;1 = Attribute is invisible (does not appear). ;2 = This is a constant attribute. ;4 = Verification is required on input of this attribute. ;8 = Attribute is preset (no prompt during insertion). (73 . 0) (cons 210 (list 0 0 1)) (74 . 2) (cons 6 "BYLAYER"))) (entmake (list '(0 . "ENDBLK") ; required '(100 . "AcDbBlockEnd") ; recommended '(8 . "0") ; recommended )) ) version sans attributs (defun TCPoint2 (pt) (entmakex (list (cons 0 "INSERT") (cons 2 "TCPOINT") (cons 330 "7ff7621069f0") (cons 100 AcDbEntity) (cons 67 0) (cons 410 Model) (cons 8 #8.Contre-profils) (cons 100 AcDbBlockReference) (cons 66 1) (cons 10 13279.8 4556.91 -259.772) (cons 10 pt) (cons 41 1.0) (cons 42 1.0) (cons 43 1.0) (cons 50 0.0) (cons 70 0) (cons 71 0) (cons 44 0.0) (cons 45 0.0) (cons 210 0.0 0.0 1.0) )) ) Sans succès dans les 2 cas... je ne vois pas ce qui me bloque... j'en appel aux experts du forum... surement que votre œil exercé percevra mon problème en quelques secondes... A votre dispo si besoin d'infos complémentaires... Je n'ai pas mis le code complet concernant les PL, l'axe, tout ça... pour ne pas alourdir la lecture. Demander si vous le voulez... Je le mettrais à la fin un fois le prob réglé si cela peut servir pour d'autres. Merci par avance, Ju.
-
récupérer la position de début d'une polyligne
Ahimsa a répondu à un(e) sujet de Ahimsa dans Débuter en LISP
Bonjour, et Merci vous deux ! après bidouillage et fouille dans l'aide, j'ai finalement intégré ces corrections à mon code existant... *le programmeur gagne un niveau !* Youpiii ;) Merci encore, avec ça, je comprend mieux ces trucs d'assocs, et je sais comment y accéder... de quoi approfondir le fonctionnement d'autocad et la structure de ses fichiers... c'est vrai qu'avec le script dxf, et le livre des ref, ... ça aide ;o) question : (assoc 10 ...) retourne le premier point... Dans le cas des pline, on peut avoir plusieurs 10... Comment accéder aux points suivants ? Cette fonction retourne toujours un élément, pas une liste... et si je le rappelle, il me retourne toujours le 1er.. Comment faites vous pour les afficher ? en créant une liste temporaire où l'on a recopié toute la liste sans les premiers points ? Merci d'avance pour votre retour... -
Bonjour, je cherche à récupérer la position du début d'une polyligne. j'ai une fonction qui fonctionne pour les lignes, mais qui me retourne une erreur pour les plines, le nom de la propriété recherché n'étant pas le même. (setq vdebaxe (vlax-get-property vlaobjaxe 'StartPoint ) 1ère question : Comment je retrouve les propriétés adéquat pour les plines ? pour les lignes, en français, j'ai les propriétés départ X et départ Y. la traduction en lisp est 'startpoint pour les polylignes, j'ai bien un sommet X et sommet Y.. mais comment je le traduis pour y accéder en lisp ? questions subsidiaires... : Comment je retrouve les propriétés de chaque objet commun (ligne, pligne, cercle, etc...) ? existe-t-il un récap quelque part, une aide, avec un listing des propriétés ? Je n'ai pas trouvé jusqu’à maintenant :( Puisque l'on peut accéder aux propriétés d'un objet par leur numéro dans la liste des propriétés, il doit bien exister une commande à lancer, à base d'assoc machin chose, qui boucle et m'affiche ses propriétés disponibles ? On peut afficher son nom avec ça ? S'affichent-ils toujours dans le même sens que les propriété autocad (exemple pour la pline: 1-Calque, 2-couleur, 3-échelle, ..., 14-SommetX, 15-SommetY, etc...) ? Cela me permettrai de tester rapidement en local, plutôt que de fouiller longuement, et en vain, sur le net pour trouver la bonne réponse et venir vous embêter ici trop souvent ;o) En vous remerciant par avance pour le poisson et pour m'apprendre à pécher* Ju. *Toute ressemblance avec une citation existante n'est aucunement fortuite ;o)
-
Merci bonuscad, avec getfiled, ça fonctionne impéc..., et ça a débloqué la situation... tout refonctionne maintenant, même mon ancien code. Je ne comprend pas ce qui a cloché avant... effectivement j'ai la même conclusion, le prob se situait au niveau du fichier, même si je n'ai pas compris la raison exacte (peut-etre un fichier verrouillé, ou un truc du genre). Pour info, voila donc mon programme test modifié (avec ou sans boucle, enlever les commentaires) : (defun c:lecturetexte() (setq fichier (open (getfiled "Selectionnez le fichier support" "c:/debois/" "txt" 8) "r")) ; (while (setq ligne (read-line fichier)) (print ligne) ; ) (close fichier) ) j'ai intégré ça dans mon programme principal (le nom "en dur" est saisi, ou généré en fonction de l'axe sur lequel on clique). Je reviendrai si j'ai d'autres blocages. Merci encore pour ta réponse !!! Ju.
-
Bonjour à tous, Je cherche à lire le contenu d'un fichier texte. J'utilise la fonction minimaliste ci-dessous pour tester, et j'ai en retour : type d'argument incorrect: FILE nil. (defun c:lecturetexte() (setq fichier (open "c:/debois/44.txt" "r")) ;j'ai testé aussi (setq fichier (open "c:\\debois\\44.txt" "r")) (setq ligne (read-line fichier)) (print ligne) (close fichier) ) Le fichier existe bien dans le dossier, et est non vide. Généré via excel, il contient ce type d'éléments : 44 0 14.0 44 27.935 15.2 44 55.87 15.9 44 111.74 16.2 Je ne trouve pas ce qui me bloque... Avez vous une idée ? Merci par avance ! Julien.
-
[Résolu] Justifier un texte par la droite
Ahimsa a répondu à un(e) sujet de Ahimsa dans LISP et Visual LISP
désolé pour le délai de réponse..., beaucoup de boulot, maintenant que j'étais débloqué, j'ai bien avancé. pour revenir sur ta réponse, tu as bien raison de te méfier des abus de langage, en programmation, cela peut apporter beaucoup de confusion... Merci pour le entmake, si j'ai bien compris, c'est une fonction qui va me créer l'objet et les paramètres associés, en une fois... et rien du tout s'il y a une erreur en route... Ca peut être très pratique ! Là, je dois faire évoluer un programme existant, donc je repars... de l'existant ;o) Mais dès qu'il y a de gros morceaux à modifier, je m'en servirai certainement ! A pluche ! Ahimsa -
[Résolu] Justifier un texte par la droite
Ahimsa a répondu à un(e) sujet de Ahimsa dans LISP et Visual LISP
@Patrick : Quand vous parlez d'attribut Lili et toi, ce sont les attributs d'un bloc ? ou ça peut être autre chose ? Vu que je fais un Addtext, je pensais peut-être bêtement que c’était un texte, non ? Je débute dans la manipulation des objets Autocad, je ne demande qu'à apprendre :ange: -
[Résolu] Justifier un texte par la droite
Ahimsa a répondu à un(e) sujet de Ahimsa dans LISP et Visual LISP
Merci Patrick ! je revenais pour donner la solution que j'avais trouvé... pas forcément la meilleure, mais ça fonctionne, et c'est le principal... ;o) effectivement, en épluchant le reste du code (c'est une mise à jour d'un gros projet existant) pour une autre modif, j'ai percuté sur un code de repositionnement : (vlax-put-property noutext 'TextAlignmentPoint thepoint ) Dans mon cas, c'est bien un texte seul (enfin je crois hihihi), L'alignement fonctionnait, mais la fonction d'alignement le positionnait en 0,0,0. Il me suffisait donc de repositionner dans ma position voulu APRES l'avoir aligné !!! CQFD Si je n'avais pas trouvé juste avant comment me sortir d’embarras, ta réponse m'aurais bien aidé !!! Merci beaucoup !!! Ca faisait 2 jours que je bloquais dessus, je comprenait pas pourquoi mon texte disparaissait. En fait il sortait bien loin de ma fenêtre visible... c'est un zoom étendu qui me l'a révélé. Je ne sais pas pourquoi cela arrive, mais je sais maintenant comment le remettre en ordre... Merci encore à tous ! Je passe en résolu. Si vous avez des précisions sur le pourquoi du déplacement, je veux bien comprendre... En attendant de comprendre le pourquoi, voila donc le code fonctionnel pour moi ;o) : (setq noutext (vla-addText *ModelSpace*; Global Definition for Model Space "test" vinstexta 'un point variant composé des coordonnées du texte 3.75 ) ;_ end of vla-addtedxt ) (vlax-put-property noutext 'Layer calqtexttet ) ;changement de calque (vlax-put-property noutext 'Alignment "2" ) ;changement d'alignement. Attention, seule, cette fonction déplace le texte en 0,0,0. (vlax-put-property noutext 'TextAlignmentPoint vinstexta ) ;Repositionnement suite alignement au même point que précédent.
