| |
| 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: Spline teilen, Punktekoordinaten auslesen (2838 mal gelesen)
|
insidERR Mitglied 2/3D Konstruktion, VBA/.net/Android/Arduino Programmierung, EDV
Beiträge: 138 Registriert: 27.08.2007
|
erstellt am: 11. Mrz. 2009 14:08 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich suche eine Möglichkeit in der aktuellen Zeichnung auf ein Spline ne bestimmte Anzahl von Punkten zu setzen("Entwurf->Punkt->Teilen") und dann die Koordinate(X,Y) auslesen. Hat jemand ne Idee? Danke Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 11. Mrz. 2009 14:14 <-- editieren / zitieren -->
Hi, 'Entwurf' kommt vielleicht aus Mech, ich kenne das halt als Befehl 'teilen'/'_divide' ==> und da erzeugt Dir ja schon AutoCAD die Punkte (oder optional Blöcke). Und als nächstes 'dataextraction' und Du bekommst Die Punkte/Blöcke als File exportiert (samt den Eigenschaften, die Du beim Extract angibst. Jetzt die Rückfrage: ist das schon die Lösung? Eben nur mit AutoCAD-Befehlen oder wie sollte der weitere Weg aussehen? - alfred - ------------------ www.hollaus.at |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 ACAD 2008 Mechanical
|
erstellt am: 11. Mrz. 2009 14:20 <-- editieren / zitieren --> Unities abgeben: Nur für insidERR
in Lisp gibt es für so was die vlax-curve Funktionen ... nur mal als Randbemerkung ------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
insidERR Mitglied 2/3D Konstruktion, VBA/.net/Android/Arduino Programmierung, EDV
Beiträge: 138 Registriert: 27.08.2007
|
erstellt am: 11. Mrz. 2009 15:06 <-- editieren / zitieren --> Unities abgeben:
Von LISP hab ich keine Ahnung und auch nicht die Zeit mich damit zu beschäftigen. Die Linie teilen kann man manuel auslösen, aber ich will es automatisieren. Hintergrund der ganzen Sache: wir haben einige Laufradmeridiankonturen, welche mit Splines gezeichnet sind. Die wollen wir in ein anderes Programm exportieren. Dazu muss man auf die Splines "Punkte" legen und von den die Koordinaten(X,Y) in eine Textdatei exportieren. Diese wird dann von dem anderen Programm eingelesen und weiter verarbeitet. Von Hand dauert es lange und ist umständlich(nach dem Export muss man die Datei noch weiter bearbeiten), deswegen will ich es über ein Makro lösen. Das Makro soll so aufgebaut sein: Auf Zwei preparierte Splines in der aktuellen Zeichnung je 50 Punkte legen. Die beiden Splines löschen. Dann die Koordinaten(X,Y) von allen Punkten Zeile für Zeile in eine bestimmte Textdatei speichern. Bräuchte schon etwas mehr als "_divide" und "dataextratcion". Im Forum finde ich keine passenden Beispiele. [Diese Nachricht wurde von insidERR am 11. Mrz. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 ACAD 2008 Mechanical
|
erstellt am: 11. Mrz. 2009 15:17 <-- editieren / zitieren --> Unities abgeben: Nur für insidERR
Zitat: Original erstellt von insidERR: Von LISP hab ich keine Ahnung und auch nicht die Zeit mich damit zu beschäftigen.
Schade, damit könnte man die Sache relativ schnell machen (lassen) , also die Koordinaten an den 50 Stellen rausschreiben ohne irgendwelche Punkte anzulegen ect. ------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 11. Mrz. 2009 15:19 <-- editieren / zitieren -->
Hi, dann hätte ich (um es mal einfach zu halten), folgende Vorgehensweise gewählt: a) ModelSpace.Count zwischenspeichern (vorausgesetzt alles spielt sich im Modellbereich ab), damit wissen wir, wieviele Elemente derzeit vorhanden sind b) mit SendCommand den Befehl '_divide' starten und Optionen wie Abstand, Blockname (wenn nötig) mitgeben c) dann für jedes Element im Modellbereich, dessen Index (aus der Sicht einer Collection) >= dem zuvor gespeicherten ModelSpace.Count ist, ist ein Punkt bzw. ein Block, dessen Koordinaten Du auslesen kannst und mittels eigenem Export in eine Datei mit Deinem Syntax schreibt. War das verständlich? - alfred - ------------------ www.hollaus.at |
insidERR Mitglied 2/3D Konstruktion, VBA/.net/Android/Arduino Programmierung, EDV
Beiträge: 138 Registriert: 27.08.2007
|
erstellt am: 11. Mrz. 2009 15:59 <-- editieren / zitieren --> Unities abgeben:
Das Ziel ist mir klar, nur wie ich dahin komme nicht. Mir fehlt der genaue Code, wie ich die einzelnen Punkte finde und deren Koordinaten auslesen kann. Ich habe mir für eine andere Geschichte aus verschiedenen Beispielen hier aus dem Forum was gebastelt und bräuchte sowas für den aktuellen Fall. Code: '------------------------------ Public Sub Freigabe() 'Zeichnung freigeben Befehlscode für Button "^c^c^p-vbarun BlockAttribute.Freigabe" Dim BlockCol As Collection, Stelle As Integer, setFree As Boolean, tmpUser As String: Dim Objekt As Object Set BlockCol = New Collection For Each Objekt In ThisDrawing.ModelSpace If Objekt.ObjectName = "AcDbBlockReference" Then If Objekt.Name = "Company" Or Objekt.Name = "MASSBLATT-SCHRIFTFELD" Then BlockCol.Add Objekt GoTo N End If End If Next ThisDrawing.Utility.Prompt vbNewLine & "Schriftfeld wurde nicht gefunden" Exit Sub N: Dim AktBlock As AcadBlockReference Set AktBlock = BlockCol(1) AktAtt = AktBlock.GetAttributes For j = 0 To UBound(AktAtt) DoEvents If (AktAtt(j).TagString = "GEN-TITLE-CHKM{5}" Or AktAtt(j).TagString = "GEN-TITLE-PRÜFER{6}") And AktAtt(j).TextString = "" Then setFree = True Next If setFree = False Then Exit Sub If MsgBox("Soll die Zeichnung freigegeben werden?", vbYesNo, "Zeichnung ist nicht freigegeben") = vbYes Then tmpUser = InputBox("Bitte Prüfer eingeben", "Zeichnung freigeben", cadBenutzer): If tmpUser = "" Then Exit Sub 'Name For j = 0 To UBound(AktAtt) DoEvents If AktAtt(j).TagString = "GEN-TITLE-CHKD{5.41}" Then AktAtt(j).TextString = Date 'Datum If AktAtt(j).TagString = "GEN-TITLE-PDAT{5.44}" Then AktAtt(j).TextString = Date 'Datum If AktAtt(j).TagString = "GEN-TITLE-CHKM{5}" Then AktAtt(j).TextString = tmpUser If AktAtt(j).TagString = "GEN-TITLE-PRÜFER{6}" Then AktAtt(j).TextString = tmpUser Next ThisDrawing.Regen acActiveViewport 'aktualisiert die Zeichnung End If End Sub '----------------------
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 11. Mrz. 2009 16:11 <-- editieren / zitieren -->
Hi, was Dein Code mit der Aufgabenstellung zu tun hat, entzieht sich mir leider. geschrieben, nicht getestet, keine Fehlerprüfungen, Tippfehler möglich: Code: 'zuerst holen wir uns das Element dim tEnt as AcadEntity dim tPnt as Variant call ThisDrawing.Utiltiy.GetEntity(tent,tpnt,"Spline zeigen: ")'jetzt holen wir uns aus dem Modellbereich die Anzahl der vorhandenen Elemente dim tModSpCount as Long tModSpCount = ThisDrawing.ModelSpace.Count 'jetzt erzeugen wir Punkte durch Teilung call ThisDrawing.SendCommand("_divide" & vbcr & 50 & vbcr) dim i as Long for i = tModSpCount to ThisDrawing.ModelSpace.Count -1 dim tAcadPnt as AcadPoint set tAcadPnt = ThisDrawing.Modelspace(i) 'tAcadPnt.Coordinates ==> hier die geomtrische Position next
- alfred - ------------------ www.hollaus.at |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 ACAD 2008 Mechanical
|
erstellt am: 11. Mrz. 2009 16:25 <-- editieren / zitieren --> Unities abgeben: Nur für insidERR
Anbei mal ein BSP in Lisp zur Machbarkeit, als vlx abspeichern und dann per Drag&Drop in die Zeichnung ziehen und mit SPLINEKOORDS starten ... ------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
insidERR Mitglied 2/3D Konstruktion, VBA/.net/Android/Arduino Programmierung, EDV
Beiträge: 138 Registriert: 27.08.2007
|
erstellt am: 11. Mrz. 2009 16:40 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von a.n.: Hi,was Dein Code mit der Aufgabenstellung zu tun hat, entzieht sich mir leider. geschrieben, nicht getestet, keine Fehlerprüfungen, Tippfehler möglich: ....... - alfred -
Ja woll !!! Wir kommen der Sache schon sehr nah. Genau sowas hab ich gesucht. Das mit der Splineteilung geht noch nicht, aber ich komme an die Koordinaten der Punkte dran. Das ist sehr gut. Vielen Dank (den Code von vorhin hab ich nur zur Veranschaulichung gepostet um zu zeigen was ich brauche, hat mit der aktuellen Sache nicht viel zu tun) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 11. Mrz. 2009 16:44 <-- editieren / zitieren -->
Sorry, Objekt vergessen: call ThisDrawing.SendCommand("_divide" & vbcr & "(handent """ & tEnt.Handle & """)" & vbcr & 50 & vbcr) so sollte es jetzt funktionieren, viel Erfolg, - alfred - ------------------ www.hollaus.at |