| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY WIRD VON NVIDIA ZUM HÄNDLER DES JAHRES GEWÄHLT, eine Pressemitteilung
|
Autor
|
Thema: Bemaßungswerte in Excel einfügen (1191 mal gelesen)
|
Moony Mitglied Werkzeugmacher
Beiträge: 49 Registriert: 29.02.2004
|
erstellt am: 29. Feb. 2004 17:45 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich möchte unter ACAD 2004 den Wert der Bemaßung in eine Exceltabelle schreiben. Im Inventor erhält jede Bemaßung automatisch einen Parameternamen den ich als Variable weiter verwenden kann. Wie geht das in ACAD 2004 ? Oder gibt es über den VB-Editor einen Weg den Wert in die Exceltabelle einzufügen ohne eine *.Lisp Datei zuschreiben. Danke im vorraus Moony
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nahe Ehrenmitglied
Beiträge: 1764 Registriert: 18.01.2001 arbeite mit: Dell Precision 7750 i7 2,6 GHz 6 Kerne 32GB RAM 512GB SSD NVIDIA Quadro RTX 4000 ------------------------ SWX-2020 SP5.0 EPDM ---------------- Windows 10 ---------------- VB.net VB VBA ein wenig Swift am Mac
|
erstellt am: 01. Mrz. 2004 09:52 <-- editieren / zitieren --> Unities abgeben: Nur für Moony
Hallo Moony ich denk mal, dass das mit LISP nicht wirklich einfach ist. Anbei ein kleines Makro für Excel, vielleicht hilft Dir ja das weiter. Grüße Heinz Sub test() Dim doc As AcadDocument Dim sel As AcadSelectionSet Dim mode As Integer Dim groupCode As Variant, dataCode As Variant Dim gpCode(0) As Integer Dim dataValue(0) As Variant Dim i As Long Dim cad As Object Dim acad As AcadApplication Dim autocad_gestartet As Boolean autocad_gestartet = True On Error Resume Next Set cad = GetObject(, "AutoCAD.Application") If Err.Number <> 0 Then Err.Clear MsgBox "AutoCAD ist nicht gestartet", vbOKOnly, "Fehler" Exit Sub End If Set acad = cad If IsNull(acad.ActiveDocument) Then MsgBox "Keine Zeichnung geöffnet", vbOKOnly, "Fehler" Exit Sub End If gpCode(0) = 0 dataValue(0) = "DIMENSION" groupCode = gpCode dataCode = dataValue mode = acSelectionSetAll Set sel = acad.ActiveDocument.SelectionSets.Add("SSET2") sel.Select mode, , , groupCode, dataCode Range("A1").Select ActiveCell.FormulaR1C1 = "Wert" Range("B1").Select ActiveCell.FormulaR1C1 = "Handle" Range("C1").Select ActiveCell.FormulaR1C1 = "Typ" If sel.Count > 0 Then For i = 0 To sel.Count - 1 Range("A" + Trim(Str(i + 2))).Select ActiveCell.FormulaR1C1 = sel.Item(i).Measurement Range("B" + Trim(Str(i + 2))).Select ActiveCell.FormulaR1C1 = sel.Item(i).Handle Range("C" + Trim(Str(i + 2))).Select ActiveCell.FormulaR1C1 = sel.Item(i).ObjectName Next i End If sel.Clear sel.Delete End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Moony Mitglied Werkzeugmacher
Beiträge: 49 Registriert: 29.02.2004
|
erstellt am: 01. Mrz. 2004 19:01 <-- editieren / zitieren --> Unities abgeben:
Hallo Heinz, danke für Deine Mühe, werde es morgen testen. Verstehe zwar noch nicht alles, aber was nicht ist kann ja noch werden. Gruß Moony PS. Mir ist noch unklar in ACAD 2004 muss doch der Bemaßungstext irgendwo stehen. Das ich den nicht in Lisp einer Variable zuweisen kann.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Claudio Mitglied Architekt
Beiträge: 334 Registriert: 13.04.2002 ACA, Revit, MAX 2020
|
erstellt am: 02. Mrz. 2004 00:14 <-- editieren / zitieren --> Unities abgeben: Nur für Moony
|
Moony Mitglied Werkzeugmacher
Beiträge: 49 Registriert: 29.02.2004
|
erstellt am: 02. Mrz. 2004 07:04 <-- editieren / zitieren --> Unities abgeben:
|
nahe Ehrenmitglied
Beiträge: 1764 Registriert: 18.01.2001 arbeite mit: Dell Precision 7750 i7 2,6 GHz 6 Kerne 32GB RAM 512GB SSD NVIDIA Quadro RTX 4000 ------------------------ SWX-2020 SP5.0 EPDM ---------------- Windows 10 ---------------- VB.net VB VBA ein wenig Swift am Mac
|
erstellt am: 02. Mrz. 2004 07:47 <-- editieren / zitieren --> Unities abgeben: Nur für Moony
Hallo nochmals @Claudio, danke für die Units @Moony mit LISP ist das ermitteln des Bemaßungstextes kein Problem, mit VB/VBA ist es eben nur, meiner Meinung nach, einfacher eine "Verknüpfung" mit anderen Programmen zu realisieren. Es sollte kein Problem sein, das Makro umzuschreiben, dass es von AutoCAD aus funktioniert. Vielleicht ein paar Bemerkungen zum Makro 1.)der Wert einer Winkelbemaßung wird im Bogenmaß angezeigt! 2.)der "handle" kann nützlich sein, wenn man später ev. wieder auf die Bemaßung zugreifen will. 3.)der "objectname" enthält die Art der Bemaßung 4.)Du kannst auch die AutoCAD-VBA-Hilfe-Datei bemühen, die sollte sich im HELP-Verzeichnis von AutoCAD befinden und heißt unter 2002 "acadauto.chm" Grüße Heinz
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Moony Mitglied Werkzeugmacher
Beiträge: 49 Registriert: 29.02.2004
|
erstellt am: 02. Mrz. 2004 10:29 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, Heinz danke für Deine Tipps, aber es kann ja sein ich sehe das alles zu kompliziert. Der eigentliche Gedanke ist der, ich möchte ein paar Maße in ACAD auswählen und in ein anderes Programm einfügen. In diesem Programm stehen alle Variablen in einer Textdatei die zum Programmstart eingelesen werden. Z.B. Datei „Test.txt“ Var1=0.000 Var2=0.000 usw. Ich möchte jetzt die Werte 0.000 mit den Maßen aus Autocad ersetzen und die Datei speichern. Da war mein erster Gedanke Excel VBA in einer Textdatei String suchen mit „Mid o. Left“ zerlegen und neu zusammenfügen. Mehr zufällig bin ich dann auf Lisp gestoßen und werde mich jetzt auch mal damit näher befassen. Gruß Moony
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nahe Ehrenmitglied
Beiträge: 1764 Registriert: 18.01.2001 arbeite mit: Dell Precision 7750 i7 2,6 GHz 6 Kerne 32GB RAM 512GB SSD NVIDIA Quadro RTX 4000 ------------------------ SWX-2020 SP5.0 EPDM ---------------- Windows 10 ---------------- VB.net VB VBA ein wenig Swift am Mac
|
erstellt am: 02. Mrz. 2004 12:27 <-- editieren / zitieren --> Unities abgeben: Nur für Moony
Hallo Moony nur damit Du Dich nicht in was verrennst. Soweit ich weiß (bis AutoCAD 2002) haben Maße keine Parameternamen, so wie in Inventor od. Mechanical Desktop! Wenn Du die Maße nur als Text-Datei brauchst, warum der Umweg über Excel? Dann schreib die Maße gleich in eine Text-Datei, dann geht das problemlos mit LISP. Die Frage ist nur, wie weißt Du welchem "Parameter" welcher Wert zugewiesen werden soll? Grüße Heinz
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Moony Mitglied Werkzeugmacher
Beiträge: 49 Registriert: 29.02.2004
|
erstellt am: 02. Mrz. 2004 13:12 <-- editieren / zitieren --> Unities abgeben:
Hallo Heinz! Ja, da bin ich gerade am üben, ich brauche in Lisp eine Abrage, die die Maße gleich mit dem Variablennamen in einer Textdatei abspeichert, das beim Start von Programm_2 gelesen werden kann. Gruß Moony Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nahe Ehrenmitglied
Beiträge: 1764 Registriert: 18.01.2001 arbeite mit: Dell Precision 7750 i7 2,6 GHz 6 Kerne 32GB RAM 512GB SSD NVIDIA Quadro RTX 4000 ------------------------ SWX-2020 SP5.0 EPDM ---------------- Windows 10 ---------------- VB.net VB VBA ein wenig Swift am Mac
|
erstellt am: 03. Mrz. 2004 07:28 <-- editieren / zitieren --> Unities abgeben: Nur für Moony
Guten Morgen das ist ja das Problem. Weißt Du welche Variable welchen Wert erhalten soll? Oder können die Variablen einfach durchnummerriert werden, in der Reihenfolge in der sie gewählt werden? Grüße Heinz
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Moony Mitglied Werkzeugmacher
Beiträge: 49 Registriert: 29.02.2004
|
erstellt am: 03. Mrz. 2004 11:23 <-- editieren / zitieren --> Unities abgeben:
Hallo Heinz, ich würde von Claudio die Abfrage so ändern: ... \nAbstand X wählen und das dem masstext1 zuweisen ... \nAbstand Y wählen und das dem masstext2 zuweisen usw. masstext1 die Zahl als Laufvariable in einer Schleife zuweisen. Dann String zusammenfügen, angenommen masstext1 hat den Wert 7.98 masstext2 hat den Wert 10.42 VarNeu1 hat den Wert R1=7.98 VarNeu2 hat den Wert R2=10.42 das muß dan in einer Textdatei so stehen: R1=7.98 R2=10.42 R3=usw auf jeden Fall in dieser Textform. Das abspeichern als Test.var Gruß Moony Ps. Danke für Deine Nachfrage. ich steh noch ganz schön im Wald. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nahe Ehrenmitglied
Beiträge: 1764 Registriert: 18.01.2001 arbeite mit: Dell Precision 7750 i7 2,6 GHz 6 Kerne 32GB RAM 512GB SSD NVIDIA Quadro RTX 4000 ------------------------ SWX-2020 SP5.0 EPDM ---------------- Windows 10 ---------------- VB.net VB VBA ein wenig Swift am Mac
|
erstellt am: 03. Mrz. 2004 16:10 <-- editieren / zitieren --> Unities abgeben: Nur für Moony
|
Moony Mitglied Werkzeugmacher
Beiträge: 49 Registriert: 29.02.2004
|
erstellt am: 04. Mrz. 2004 08:21 <-- editieren / zitieren --> Unities abgeben:
Guten Morgen Heinz, paßt der Kopf noch oder schon durch die Tür? Danke für die Unterstützung. Habe gestern Zuhause noch bis 23.00 Uhr geübt, mit keinen Fortschritten. Warum habe ich nur das Gefühl, dass Lisp mit den ganzen Klammern so unübersichtlich erscheint! Bin, wenn es die Zeit erlaubt auf mapcar.net und übe, ist sehrgut erklärt. Danke im vorraus. Gruß Moony Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nahe Ehrenmitglied
Beiträge: 1764 Registriert: 18.01.2001 arbeite mit: Dell Precision 7750 i7 2,6 GHz 6 Kerne 32GB RAM 512GB SSD NVIDIA Quadro RTX 4000 ------------------------ SWX-2020 SP5.0 EPDM ---------------- Windows 10 ---------------- VB.net VB VBA ein wenig Swift am Mac
|
erstellt am: 04. Mrz. 2004 08:23 <-- editieren / zitieren --> Unities abgeben: Nur für Moony
Hallo Moony anbei nun ein kleines LISP-Programm. Bemerkung Es wird dabei auf das Abfangen von Fehleingaben verzichtet. Das Programm fragt so lange nach Bemaßungswerten bis <ENTER> gedrückt wird. Grüße Heinz (defun c:dim2file( / i e el m wl n) (setq i 1 wl nil) (while (setq e (entsel (strcat "\nBitte Abstand " (itoa i) " wählen: "))) (setq el (entget (car e))) (if (/= (cdr (assoc 0 el)) "DIMENSION") (progn (princ "\nGewähltes Element ist keine Bemaßung!\n") (setq i (1- i)) ) (progn (setq m (cdr (assoc 42 el))) (setq wl (cons m wl)) ) ) (setq i (1+ i)) ) (setq wl (reverse wl)) (if (setq fn (getfiled "Textdatei erstellen" "Test.VAR" "VAR" 1)) (progn (setq m (open fn "w")) (setq i 1) (foreach n wl (princ (strcat "R" (itoa i) "=") m) (princ n m) (princ "\n" m) ) (close m) ) ) 'Danke )
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Moony Mitglied Werkzeugmacher
Beiträge: 49 Registriert: 29.02.2004
|
erstellt am: 04. Mrz. 2004 08:59 <-- editieren / zitieren --> Unities abgeben:
Hallo Heinz, ein ganz großes Dankeschön. Das sieht schon super aus, er schreibt zwar in die Textdatei immer nur R1= und den aktuellen Wert aber nun kann ich üben. Da werden bestimmt noch ein paar Fragen kommen, ich hoffe das stört Dich nicht zusehr. Gruß Moony Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nahe Ehrenmitglied
Beiträge: 1764 Registriert: 18.01.2001 arbeite mit: Dell Precision 7750 i7 2,6 GHz 6 Kerne 32GB RAM 512GB SSD NVIDIA Quadro RTX 4000 ------------------------ SWX-2020 SP5.0 EPDM ---------------- Windows 10 ---------------- VB.net VB VBA ein wenig Swift am Mac
|
erstellt am: 04. Mrz. 2004 12:47 <-- editieren / zitieren --> Unities abgeben: Nur für Moony
|
Moony Mitglied Werkzeugmacher
Beiträge: 49 Registriert: 29.02.2004
|
erstellt am: 04. Mrz. 2004 13:13 <-- editieren / zitieren --> Unities abgeben:
Ja, das war kein Problem habe ich dann auch schnell gefunden. Aber was bedeutet diese Zeile (setq m (cdr (assoc 42 el))) spezell "assoc 42" und kann ich in ACAD 2004 Menüs selber definieren (Extras / Anpassen) und dann das dem Befehl dim2file zuweisen ohne es jedesmal in die Befehlszeile einzutippen? Gruß Moony Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Claudio Mitglied Architekt
Beiträge: 334 Registriert: 13.04.2002 ACA, Revit, MAX 2020
|
erstellt am: 04. Mrz. 2004 14:44 <-- editieren / zitieren --> Unities abgeben: Nur für Moony
Hallo Moony! Assoc 42 liest den DXFcode 42 des gewählten Elements (Hier Masstext). Gib mal (entget (car (entsel "\n Element wählen"))) in die Befehlszeile ein, dann siehst Du im Textfenster den ganzen DXF-Stamm. Wenn du dich mit Menüs noch nicht so gut auskennst, solltest Du mal ein bissl die Autocad-Hilfe befragen. Nur so viel - die Basisdatei ist immer eine .mnu Datei die man im Texteditor bearbeiten kann und dann neu laden muß. (Immer Kopie anfertigen vorm bearbeiten!) Gruß Claudio Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Moony Mitglied Werkzeugmacher
Beiträge: 49 Registriert: 29.02.2004
|
erstellt am: 04. Mrz. 2004 15:01 <-- editieren / zitieren --> Unities abgeben:
Danke Claudio, Den DXF Code schaue ich mir heute Abend mal an. Mit dem Menü dachte ich es gebe eine Möglichkeit wie in Excel, Menü erstellen und dann das Makro zuweisen (hier dann die Lisp Datei). Das andere hatte ich auch gefunden, werde die Hilfe quälen. Gruß Moony Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 04. Mrz. 2004 15:14 <-- editieren / zitieren --> Unities abgeben: Nur für Moony
Zitat:
...Menü erstellen und dann das Makro zuweisen (hier dann die Lisp Datei)....
Hallo, das ist, wenn man mehrere Tools hat recht einfach. Du kannst dir selber eine MNU-Datei anlegen und dann auch laden. Am einfchsten ist es, wenn du mal die acad.mnu kopierst und darin ein wenig stöberst, dann wird dir das schon klar werden. In der Hilfe kannst du ja parallel nachlesen. In Verbindung mit Lisp-Dateien und Befehlen, solltest du auch einmal nach dem Stichwort MNL suchen. Bei Fragen ... Grüße Holger ------------------ Holger Brischke (defun - Lisp over night! AutoLISP-Programmierung für AutoCAD Da weiß man, wann man's hat! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |