• Ce forum est la traduction générée par la machine de www.cad3d.it/forum1 - la communauté italienne du design. Plusieurs termes ne sont pas traduits correctement.

Bloc coordonné

  • Auteur du sujet Auteur du sujet OneWay
  • Date de début Date de début

OneWay

Guest
bonjour tout le monde, je suis nouveau dans le forum et j'ai un problème:

je crée un programme d'autoit simple qui s'interface avec autocad, le problème est que si j'interromps autocad sur les coordonnées d'un bloc, 'insertionpoint' me renvoie une variable vide, je sais que c'est une double variable qui contient x y z mais en autoit les matrices sont gérées avec [] et non () je ne sais pas si c'est le problème, la getentity me répond de la même manière, vide.

existe la façon d'extrapoler x y z dans une variable non double.

je remercie et je m'excuse pour le formulaire peut-être un peu précipité, mais le temps et tard et de moins en moins de connexion, toute suggestion et bien accepté.

salutations:
 
bonjour tout le monde, je suis nouveau dans le forum et j'ai un problème:

je crée un programme d'autoit simple qui s'interface avec autocad, le problème est que si j'interromps autocad sur les coordonnées d'un bloc, 'insertionpoint' me renvoie une variable vide, je sais que c'est une double variable qui contient x y z mais en autoit les matrices sont gérées avec [] et non () je ne sais pas si c'est le problème, la getentity me répond de la même manière, vide.

existe la façon d'extrapoler x y z dans une variable non double.

je remercie et je m'excuse pour le formulaire peut-être un peu précipité, mais le temps et tard et de moins en moins de connexion, toute suggestion et bien accepté.

salutations:
point d'insertion

variante (trois éléments de double); lire
une coordination 3d wcs représentant le point d'insertion.

dans vba la variable qui retourne n'est pas un double mais un tableau de variantes 3 tailles, insertionpoint(0)=x insertionpoint(1)=y insertionpoint(2)=z

le double ne l'utilise que si vous devez composer la matrice

bon travail
 
Dernière édition:
merci, en fait en vba je n'ai aucun problème à gérer mais en autoit n'est pas la même chose.

cependant, il n'y a aucun moyen de gérer le tableau 1-2-3 comme une chaîne unique, peut-être avec une commande autocad interne qui concaténera le tableau, ou même une façon d'extraire la variable unique x, y, z comme pour xscalefactor, yscalefactor etc.

si vous savez et utilisez autoit je peux entrer le code pour mieux comprendre.

j'ai aussi essayé d'utiliser getentity mais aussi dans ce cas il retourne la variable insertpoint qui 'looks vide', semble-t-il, parce qu'en réalité je ne peux pas la gérer comme un tableau dans autiit.

vous me dites, puisque dans trois forums où j'ai posé cette question, vous êtes le seul à vouloir me répondre.
 
comment traitez-vous avec autocad ?

écrivez-moi deux lignes pour comprendre comment ça marche et voir si nous partons
 
je passe un script dans autoit la langue que je voudrais utiliser.

code:
$acadapp = objget("","autocad.application")
dim $set, $ent
$acaddoc = $acadapp.activedocument
winactivate ($acadapp.caption,$acaddoc.name)
$set = $acaddoc.activeselectionset
$sset.selectonscreen
pour $ent dans $set
si $ent.entityname = "acdbblockreference" alors
msgbox(0,"bloc spécifique","scalex: " & $ent.xscalefactor & @cr & _
"scaley" & $ent.yscalefactor & @cr & _
"scalez" & $ent.zscalefactor & @cr & _
"unita mis:" & $ent.insunits & @cr & _
"nom: " & $ent.name & @cr & _
"idobj:" & $ent.objectid & @cr & _
"nomeeff: " & $ent. nom effectif & @cr & _
"insérer:" & $ent.insertionpoint & @cr & _
"couche" & $ent.couche & @cr & _
"matériel: " & $ent.matériel & @cr & _
"insérer:" & $ent.objectname)

msgbox (0,"," vous avez manqué le bloc!" & @cr & "essayez encore vous serez plus chanceux. "
endif
suivant

tout d'abord, vous devez ouvrir un autocad et entrer un bloc, après quoi le script est exécuté, vous sélectionnez le bloc et vous allez apparaître une boîte avec les spécifications.

$ent.insertionpoint comme vous le verrez sera vide, dans autoit les matrices gèrent avec [] et non avec (), mais en regardant $ent.insertionpoint[0], 1, 2 fera une erreur.

je commence à penser que vous ne trouvez probablement pas cette information, même si toutes les autres sont affichées correctement.

merci d'avance :)
 
puis j'appuie que je ne sais pas autoit mais j'ai téléchargé le prog et ne semble pas très différent de la vb...

essayer de voir avec ceci


dim $myarray[10][20] ;élément 0,0 à 9,19
$rows = ubound($myarray)
$cols = ubound($myarray, 2)
$dims = ubound($myarray, 0)

msgbox(0, "le " & $dims & "-dimensional array has", _
$rows & " lignes, " & $cols & " colonnes)

; afficher le contenu de $myarray
$output = ""
pour $r = 0 à ubound($myarray,1) - 1
$output = $output & @lf
pour $c = 0 à ubound($myarray,2) - 1
$output = $output & $myarray[$r][$c] "
suivant
suivant
msgbox(4096, "contenu d'array", $output)


si vous gérez l'insertion comme un tableau et essayez de le répéter peut-être cela fonctionne
 
Dernière édition:
dunca, j'ai essayé de mélanger les cartes avec le codi que tu m'as envoyé mais je n'ai pas généré de données nossun, aimè.

code:
dim $myarray[10][20] ;élément 0,0 à 9,19
$rows = ubound($myarray)
$cols = ubound($myarray, 2)
$dims = ubound($myarray, 0)

msgbox(0, "le " & $dims & "-dimensional array has", $rows & " lignes, " & $cols & " colonnes")

; afficher le contenu de $myarray
$output = ""
pour $r = 0 à ubound($myarray,1) - 1
$output = $output & @lf
pour $c = 0 à ubound($myarray,2) - 1
$output = $output & $myarray[$r][$c] & ""
suivant
suivant
msgbox(4096, "contenu d'array", $output)



$acadapp = objget("","autocad.application")
dim $set, $ent, $ena

$acaddoc = $acadapp.activedocument
winactivate ($acadapp.caption,$acaddoc.name)
$set = $acaddoc.activeselectionset
$sset.selectonscreen

pour $ent dans $set
si $ent.entityname = "acdbblockreference" alors
msgbox(0,"specifiche blocco","scalex: " & $ent.xscalefactor & @cr & _
"scaley" & $ent.yscalefactor & @cr & _
"scalez" & $ent.zscalefactor & @cr & _
"unita mis:" & $ent.insunits & @cr & _
"nom: " & $ent.name & @cr & _
"idobj:" & $ent.objectid & @cr & _
"nomeeff:" & $ent.effectivename & @cr & _
"insérer:" & $ent.insertionpoint & @cr & _
"couche" & $ent.couche & @cr & _
"matériel: " & $ent.matériel & @cr & _
"insérer:" & $ent.objectname)
autre
msgbox (0,"", "hai mancato il blocco!" & @cr & "riprova sarai più fortunato.")
endif
suivant



$myarray = $set
$output = ""
pour $r = 0 à ubound($myarray,1) - 1
$output &= @lf
pour $c = 0 à ubound($myarray,2) - 1
$output &= $myarray[$r][$c] "
suivant
suivant
msgbox(4096, "contenu d'array", $output)

j'ai aussi essayé $myarray = $ent.insertionpoint au lieu de $myarray = $sset mais le résultat ne change pas, le tableau s'avère vide.

autre chose, vous pouvez lister les noms de la propriété de l'objet, en les prenant de l'objet lui-même, par exemple.

xfacteur d'échelle
unités
couche

donc vous savez d'abord le nom de la propriété ce que vous pouvez questionner.

merci quand même, même si j'ai l'impression qu'on ne sortira pas une araignée du trou.
 
je vais partir parce que je deviens nerveux. . . .

dites-moi si vous résolvez...

bonne chance. .

une question stupide... pourquoi autoit et pas vb ? ou encore mieux vba que vous pouvez l'entrelacer même avec un bureau possible ?
 
désolé si je vous ai rendu nerveux, ce n'était pas mon intention.

j'utilise vba depuis quelques années et je voulais quelque chose de plus délicieux, j'ai commencé à mâcher vbscript, très intéressant, mais j'ai manqué les interfaces, gui se non erro, et je suis approché pour autoit qui entre autres me permet de générer des exécutables qui n'ont pas besoin d'ocx et de mendier divers.

dernière chose, pour le discours d'extraire des noms de propriété d'un objet vous pouvez me donner un pourboire ?

bonjour.
 
sans ce fai...

comando: [encart(car(entsel)))

sélezionare oggetto: ((-1 . <nome 7eda9a80="" entità:="">) (0 . "insérer") (330 .
<nome 7efe3cf8="" entità:="">) (5 . "26480") (100 . "acdbentity") (67 . 0) (410 .
"modèle") (8 . "0") (100 . "accdblockreference") (66 . 1) (2 . "mar_pez") (10
55048,5 1758,52 0,0) (41 15,0) (42 15,0) (43 15,0) (50 0,0) (70 0)
(71 0) (44 0.0) (45 0.0) (210 0.0 0.0 1.0))

questi sono i codici dxf degli oggetti. vedi al codice 10 corrisponde il punto di inserimento del blocco...

code du groupe d'entité par numéro
description du code de groupe

-5


app: chaîne de réacteurs persistante

-4


app: opérateur conditionnel (utilisé uniquement avec ssget)

-3


app: données étendues (xdata) sentinelle (fixée)

-2


app: référence du nom de l'entité (fixée)

-1


app : nom de l'entité. cela change chaque fois qu'un dessin est ouvert. il n'est jamais sauvé. (fixé)

0


chaîne de texte indiquant le type d'entité (fixé)

1


valeur de texte primaire pour une entité

2


nom (étiquette de l'attribut, nom du bloc, etc.)

3-4


autres valeurs textuelles ou de nom

5


poignée d'entité. chaîne de texte allant jusqu'à 16 chiffres hexadécimaux (fixés)

6


nom du type de ligne (fixé)

7


nom du style de texte (fixé)

8


nom du calque (fixé)

9


dxf: identifiant de nom de variable (utilisé uniquement dans la section d'en-tête du fichier dxf).

10


le premier point. c'est le point de départ d'une ligne ou entité textuelle, le centre d'un cercle, et ainsi de suite.
dxf: x valeur du point primaire (suivi des codes de valeur y et z 20 et 30)
app: 3d point (liste de trois résultats)

11-18


autres points.
dxf: x valeur des autres points (suivi par les codes de valeur y 21-28 et z codes de valeur 31-38)
app: 3d point (liste de trois résultats)

20, 30


dxf: valeurs y et z du point primaire

21-28, 31-37


dxf: valeurs y et z des autres points

38


dxf: élévation de l'entité si non nulle.

39


épaisseur de l'entité si non nulle (fixée)

40-48


valeurs flottantes (hauteur du texte, facteurs d'échelle, etc.)

annexe


échelle de type ligne. valeur scalaire en point flottant. la valeur par défaut est définie pour tous les types d'entités.

autres


valeur flottante répétée. plusieurs 49 groupes peuvent apparaître dans une même entité pour les tables de longueur variable (comme les longueurs de tirets dans le tableau ltype). un groupe 7x apparaît toujours avant le premier groupe 49 pour spécifier la longueur du tableau.

50-58


angles (sortie en degrés vers les fichiers dxf et les radians grâce aux applications autolisp et arx).

60


visibilité de l'entité. valeur entière. absence ou 0 indique la visibilité; 1 indique l'invisibilité.

62


numéro de couleur (fixé)

66


flag "les entités suivent" (fixé)

67


espace -- c'est-à-dire espace de modèle ou de papier (fixé)

68


app: identifie si viewport est sur mais complètement hors écran; n'est pas actif ou est désactivé.

69


app: numéro d'identification de viewport.

70-78


valeurs entières, comme les nombres répétés, les bits de drapeau ou les modes

90-99


valeurs entières 32 bits

100


marqueur de données de la sous-classe (avec nom de classe dérivé comme chaîne). requis pour tous les objets et classes d'entités qui sont dérivés d'une autre classe de béton pour séparer les données définies par différentes classes dans la chaîne de succession pour le même objet.
ceci s'ajoute à l'exigence relative aux noms de dxf pour chaque classe de béton distincte dérivée de l'arx (voir « marqueurs de sous-classe »).

102


chaîne de commande, suivie de "{<arbitrary name="">"ou "}". similaire au code de groupe xdata 1002, sauf que lorsque la chaîne commence par "{", elle peut être suivie d'une chaîne arbitraire dont l'interprétation dépend de l'application. la seule autre chaîne de contrôle autorisée est "}" comme terminateur de groupe. comme nous l'avons déjà mentionné, l'autocad n'interprète pas ces chaînes sauf lors des opérations de vérification de dessin; elles sont destinées à une application.

105


dimvar symbole table entrée poignée d'objet

210


direction d'extrusion (fixée).
dxf: x valeur de la direction d'extrusion
app: vecteur de direction d'extrusion 3d

220, 230


dxf: valeurs y et z de la direction d'extrusion

280-289


valeurs entières 8 bits

300-309


chaînes de texte arbitraires

310-319


des morceaux binaires arbitraires avec la même représentation et les mêmes limites que les codes de groupe 1004 : les chaînes hexadécimales jusqu'à 254 caractères représentent des morceaux de données jusqu'à 127 octets.

320-329


poignées d'objets arbitraires. gérer les valeurs qui sont prises "tel quel." ils ne sont pas traduits pendant les opérations d'insertion et xref.

330-339


poignée de pointeur souple. pointeurs souples arbitraires vers d'autres objets dans le même fichier ou dessin dxf. traduit pendant les opérations d'insertion et xref.

340-349


poignée de pointeur dur. pointeurs durs arbitraires vers d'autres objets dans le même fichier ou dessin dxf. traduit pendant les opérations d'insertion et xref.

350-359


poignée de propriétaire souple. lien de propriété souple arbitraire vers d'autres objets dans le même fichier ou dessin dxf. traduit pendant les opérations d'insertion et xref.

360-369


une poignée de propriétaire. des liens de propriété rigide arbitraire vers d'autres objets dans le même fichier ou dessin dxf. traduit pendant les opérations d'insertion et xref.

999


dxf : le code de groupe 999 indique que la ligne suivante est une chaîne de commentaires. dxfout n'inclut pas ces groupes dans un fichier de sortie dxf, mais dxfin les honore et ignore les commentaires. vous pouvez utiliser le groupe 999 pour inclure des commentaires dans un fichier dxf que vous avez édité.

1 000


chaîne ascii (jusqu'à 255 octets de long) dans les données étendues.

1001


nom d'application enregistré (chaîne ascii jusqu'à 31 octets de long) pour les données étendues.

1002


chaîne de contrôle de données étendue ("{" ou "}").

1003


nom de la couche de données étendue.

1004


une partie des octets (jusqu'à 127 octets de long) dans les données étendues.

1005


gestion de l'entité dans les données étendues. chaîne de texte allant jusqu'à 16 chiffres hexadécimaux

1040


un point dans les données étendues
dxf: x valeur (suivie par 1020 et 1030 groupes)
application: 3e point

1020, 1030


dxf: valeurs y et z d'un point

1011


une position spatiale mondiale 3d dans les données étendues
dxf: x valeur (suivie par 1021 et 1031 groupes)
application: 3e point

1021, 1031


dxf: valeurs y et z d'une position spatiale mondiale

1012


a déplacement mondial de l ' espace 3d dans des données étendues
dxf: x valeur (suivie par 1022 et 1032 groupes)
app: vecteur 3d

1022, 1032


dxf: valeurs y et z d'un déplacement spatial mondial

1013


une direction spatiale mondiale 3d dans des données étendues.
dxf: x valeur (suivie par 1022 et 1032 groupes)
app: vecteur 3d

1023, 1033


dxf: valeurs y et z d'une direction spatiale mondiale

1040


valeurs flottantes de données étendues.

1041


valeur de distance de données étendue.

1042


facteur d'échelle de données élargie.

1070


données étendues en entier signé 16 bits.

1071


données étendues de 32 bits signées longue.</arbitrary></nome></nome>
 
heureusement que tu étais nerveux.

je voudrais vous demander où vous avez trouvé ce commandement, mortel, vous avez rouvert le désir de reprendre un autre projet que j'avais en tête, cmq.

vous avez fait 30, s'il vous plaît.

(entget(car(entsel))) > d:\xxx.txt dxf ccp cococo.
dis-moi ce que tu peux faire et peut-être même comment, avec ça ne ferait pas de mal.

rediriger la sortie vers un fichier ou s'il existe de la cabillaud vba qui prend les données qui semblent à la vidéo

trop... peut-être un petit camomille d'abord pour vous détendre. ;)
 
je vais le jeter là-bas. mais pourquoi n'utilisez-vous pas autoit pour lancer une macro vba dans autocad qui crée le fichier et puis utilisez-le pour faire le reste ?
 
et oui, tu as raison, j'ai trop agi, mais si je pouvais te déchirer cette dernière info, j'étais "presque" bon.

franchement, je pensais aussi, plus que vba à vbs, bien que manque de style:

autoit qui génère un vbscript qui génère à son tour un txt qui est pris de autoit.

je vais essayer, j'espère.

pour le moment je vous salue et je vous remercie, j'espère que vous n'avez pas envie de vous donner la bonne nouvelle.

bonjour et merci.
 
(défun c:esportx ()
(nom de fichier setq "c:\creafile.txt")
(setq fr)
(liste setq (enterget (entsel))))
(ligne d'écriture (vl-princ-to-string list) fr)
(fermer fr)
)

grâce à rrpor66 j'ai trouvé le moyen d'enregistrer le résultat de la fonction (entget (car (entsel)))) dans le fichier comme vous le vouliez.
 
Dernière édition:
salut, j'étais occupé à comprendre comment fonctionne l'autolisp, et j'ai finalement fait comprendre ceci:

(encombrement)
(setq x (cdr (assoc 2 entlist)))
(si (= x "sk")
(
(setq f(ouvrir "d:\\\xgiga.txt" "w")
(ligne d'écriture (rtos(cadr(assoc 10 entlist)) 2) f)
(ligne d'écriture (rtos(caddr(assoc 10 entlist)) 2) f)
(fermer f)
)
"non."
)

semblait presque fonctionner, puis j'ai fermé et rouvert autocad et comme par magie je ne peux plus extraire la valeur de la liste 2 (assoc 2 entlist) qui est toujours (2. sk)
qui est alors le nom du bloc.
j'ai presque paniqué, un code si vous ne le changez pas devrait toujours réagir de la même façon ou pas ?

bon, une bonne tisana pour moi et essayez calmement votre code.

tu penses ce qui ne va pas avec mon code.
 
oh je ne sais pas quoi répondre charge lsp je suis la commande esportx sélectionnez l'objet et il me répond zéro! je pense que ça veut dire nul.

utiliser autocad 2008 au besoin.

je vais continuer à essayer.
 
autolisp n'est pas mon pain quotidien... je suis le meilleur câble avec vba...rrpor66 ne sa mollto... envoyez-lui un msg en pvt et quand il a le temps il vous répond

mais alors je m'excuse

si le code que je vous ai envoyé vous enregistre tous la liste

tu sais

(10 55048.5 1758.52 0.0) sont les coordonnées

utiliser autoit pour manipuler la chaîne et transformer les valeurs en x y z
 
Dernière édition:
excusez mon absence je ne vous ai pas oublié, (problèmes à la maison, fils avec otite, priorité absolue).

donc, j'ai étudié, mélange mixte, j'ai ajouté deux glaçons et ceci s'est avéré:

(liste setq (enterget (entsel))))
(setq xx (rtos(cadr(liste d'assoc 10)) 2))
(setq yy (rtos(caddr(assoc 10 list)) 2))
(setq sk (cdr(liste d'assoc 2)))
(nom de fichier setq "d:/xxxx.txt")
(setq fr)
(si (= sk "sk")
(ligne d'écriture yy fr)
(ligne écrite xx fr)
"non"
(fermer fr)

le résultat est un fichier avec deux lignes texte x et y, je manque juste une chose, au cas où je ne peux rien sélectionner il génère une erreur:

select object: ; error: wrong subject type: lentityp zéro

je dois comprendre comment l'intercepter, le studio est encore long.

de toute façon, je dois vous remercier pour l'aide et le temps que vous m'avez donné.

si et quand je réussirai je l'ajouterai à ce poste, il pourrait servir quelqu'un d'autre.

je vous présenterai le numéro 66, merci.
au revoir.
 

Statistiques du forum

Sujets
58 521
Messages
499 056
Membres
104 110
Dernier membre
ChristianR

Membres en ligne

Aucun membre en ligne actuellement.
Retour
Haut