| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Beginn der Führungslinie ermitteln (1207 mal gelesen)
|
pistolpete1 Mitglied Student
Beiträge: 102 Registriert: 06.01.2007
|
erstellt am: 15. Nov. 2007 20:02 <-- editieren / zitieren --> Unities abgeben:
Hallo Forum! Ich habe eine Führungslinie und benötige den Endpunkt der Führunslinie der am Kanal liegt (rote Linie - siehe Grafik). Ich werde aus den zahlreichen Attributen des "AcadLeader"-Objekts nicht schlau, kann mir bitte jemand helfen? Lg Peter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Carsten1210 Mitglied staatl. geprüfter Holztechniker
Beiträge: 1357 Registriert: 24.07.2002 AutoCAD ACA 2018 Solidworks 2016 Sp5 Enterprise PDM 2016 Sp5 Pascam Woodworks Visual Studio 2017 Pro Windows 10 64Bit Dell T3620 Intel Core i7-7700K 16 GB Arbeitsspeicher 2x Samsung S24C650 Dell M4800
|
erstellt am: 15. Nov. 2007 20:14 <-- editieren / zitieren --> Unities abgeben: Nur für pistolpete1
|
pistolpete1 Mitglied Student
Beiträge: 102 Registriert: 06.01.2007
|
erstellt am: 15. Nov. 2007 20:34 <-- editieren / zitieren --> Unities abgeben:
Danke, hab ich fast befürchtet. Also einen eindeutigen Anfangspunkt gibt es nicht? Habe gehofft, dass es evtl. so wie bei einer AcadLine ist, die einen End- und einen Startpunkt hat, nur dass bei der Führungslinie vielleicht die Seite mit der Annotation das "Ende" ist. lg peter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Carsten1210 Mitglied staatl. geprüfter Holztechniker
Beiträge: 1357 Registriert: 24.07.2002 AutoCAD ACA 2018 Solidworks 2016 Sp5 Enterprise PDM 2016 Sp5 Pascam Woodworks Visual Studio 2017 Pro Windows 10 64Bit Dell T3620 Intel Core i7-7700K 16 GB Arbeitsspeicher 2x Samsung S24C650 Dell M4800
|
erstellt am: 16. Nov. 2007 07:03 <-- editieren / zitieren --> Unities abgeben: Nur für pistolpete1
Hi Peter, Die Coordinates geben dir die einzelnen Koordinaten vom Anfang (da wo der Pfeil sitzt) bis zum Ende der Führungslinie an. Im Prinzip ist das genau wie bei einer Polylinie, da du bei der Führungslinie ja auch mehrere Stützpunkte hast. Gruß, Carsten Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pistolpete1 Mitglied Student
Beiträge: 102 Registriert: 06.01.2007
|
erstellt am: 16. Nov. 2007 18:59 <-- editieren / zitieren --> Unities abgeben:
Hallo Carsten! Danke für deinen Tipp, jetzt funktioniert es. Allerdings taucht bereits das nächste Problem auf. Ich habe eine Führungslinie mit mehrere "Annotationen", einmal die Polykotierung ("0,8 m" - siehe Grafik) und noch zusätzlich "Stzg->Guss ohne Formstück". Mit dem folgenden Codestück bekomme ich die "0,8 m" aber müsste da nicht eine Collection von Annotationen sein, die ich auslesen kann? Code:
Set leader = entry sp = getLeaderStartPoint(leader.coordinates) Set annotationObject = leader.Annotation If annotationObject.ObjectName = "AcDbMText" Then retval = True Set mtext = annotationObject k.point(0) = sp(0) k.point(1) = sp(1) k.wert = mtext.TextString kotierungen(UBound(kotierungen)) = k ReDim Preserve kotierungen(0 To UBound(kotierungen) + 1) As KOTIERUNG End If
Lg Peter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pistolpete1 Mitglied Student
Beiträge: 102 Registriert: 06.01.2007
|
erstellt am: 17. Nov. 2007 19:19 <-- editieren / zitieren --> Unities abgeben:
Ich habe die Führungslinie in eine eigene Datei kopiert und sie angehängt. Mit meiner Prozedur bekomme ich nur "0,5 m" heraus. Bitte um Hilfe! Ich benötige jedoch die vollständige Information, die dem Leader angehängt ist. Code:
Sub TestLeader() Dim lineset As AcadSelectionSet Dim entry As AcadEntity Dim leader As AcadLeader Dim leaderCol As Collection Dim annotationObject As AcadObject Dim mtext As AcadMText Set lineset = CreateSelectionSet("LINESET") lineset.SelectOnScreen For Each entry In lineset If TypeOf entry Is AcadLeader Then Set leader = entry Set annotationObject = leader.Annotation If TypeOf annotationObject Is AcadMText Then Set mtext = annotationObject MsgBox mtext.TextString End If End If Next entry lineset.Clear End Sub Public Function CreateSelectionSet(Optional ssName As String = "SS") As AcadSelectionSet On Error GoTo ErrorHandler Dim objSelSet As AcadSelectionSet For Each objSelSet In ThisDrawing.SelectionSets If objSelSet.name = ssName Then ThisDrawing.SelectionSets.Item(ssName).Delete Exit For End If Next Set objSelSet = ThisDrawing.SelectionSets.Add(ssName) Set CreateSelectionSet = objSelSet Exit Function ErrorHandler: Debug.Print Error(Err) & " " & Err.Source & " function: CreateSelectionSet" Err.Clear On Error GoTo 0 End Function
Liebe Grüße, Peter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Carsten1210 Mitglied staatl. geprüfter Holztechniker
Beiträge: 1357 Registriert: 24.07.2002 AutoCAD ACA 2018 Solidworks 2016 Sp5 Enterprise PDM 2016 Sp5 Pascam Woodworks Visual Studio 2017 Pro Windows 10 64Bit Dell T3620 Intel Core i7-7700K 16 GB Arbeitsspeicher 2x Samsung S24C650 Dell M4800
|
erstellt am: 17. Nov. 2007 19:30 <-- editieren / zitieren --> Unities abgeben: Nur für pistolpete1
Hallo Peter, Das Problem ist, das der Text nicht wie zum Beispiel bei einem Block nicht wirklich zusammengehört. Kannst du da nicht über einen Selectionset mittels Koordinaten den dazugehörigen Mtext ermitteln (zb. den der am nächsten zum Führungstext sitzt) und dann zu dem Führunglinientext hinzufügen?! Gruß, Carsten Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pistolpete1 Mitglied Student
Beiträge: 102 Registriert: 06.01.2007
|
erstellt am: 17. Nov. 2007 19:37 <-- editieren / zitieren --> Unities abgeben:
Hallo Carsten. Ja wird nichts nützen, aber woher weiß ich, dass genau zu dieser Führungslinie noch ein zusätzlicher Text gehört? Es könnte ja auch sein, dass es nur eine Meterangabe ist, die keinen weiteren Eintrag besitzt. Lg Peter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Carsten1210 Mitglied staatl. geprüfter Holztechniker
Beiträge: 1357 Registriert: 24.07.2002 AutoCAD ACA 2018 Solidworks 2016 Sp5 Enterprise PDM 2016 Sp5 Pascam Woodworks Visual Studio 2017 Pro Windows 10 64Bit Dell T3620 Intel Core i7-7700K 16 GB Arbeitsspeicher 2x Samsung S24C650 Dell M4800
|
erstellt am: 18. Nov. 2007 13:36 <-- editieren / zitieren --> Unities abgeben: Nur für pistolpete1
Hi Peter, Eine Möglichkeit wäre, den zweiten Punkt der Führungslinie zu nehmen und zu schauen, ob eine Linie diesen als Startpunkt hat. Dann die darauffolgende Linie ermitteln und den Text zu nehmen, der dieser Linie am nächsten steht. Am besten wäre es natürlich wenn du deine Daten schon vorab in eine Block packen könntest, dann hättest du alles beisammen. Gruß, Carsten Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pistolpete1 Mitglied Student
Beiträge: 102 Registriert: 06.01.2007
|
erstellt am: 18. Nov. 2007 17:01 <-- editieren / zitieren --> Unities abgeben:
Hallo Carsten, danke für die Antwort. Ja das wäre optimal, aber leider zeichne ich die Pläne ja nicht. Ich werde einfach jedes Element der Linie durchlaufen und auf einen Kreuzungspunkt überprüfen. Wenn einer existiert, suche ich weiter und nehme den nächsten Text. Allerdings wird sich da ein Problem ergeben, wenn ich über Annotation das MText-Objekt hole und die Information über TextString auslese. Denn woher weiß ich, welche der Verzweigungen nicht bereits durch das Annotation-Objekt abgedeckt ist ? Ich könnte höchstens die Strings, die ich auf diesem Weg bekomme vergleichen und bei einer Übereinstimmung einen davon verwerfen. Was meinst du? Liebe Grüße Peter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Carsten1210 Mitglied staatl. geprüfter Holztechniker
Beiträge: 1357 Registriert: 24.07.2002 AutoCAD ACA 2018 Solidworks 2016 Sp5 Enterprise PDM 2016 Sp5 Pascam Woodworks Visual Studio 2017 Pro Windows 10 64Bit Dell T3620 Intel Core i7-7700K 16 GB Arbeitsspeicher 2x Samsung S24C650 Dell M4800
|
erstellt am: 18. Nov. 2007 17:17 <-- editieren / zitieren --> Unities abgeben: Nur für pistolpete1
Hi Peter, Du stellst Fragen. Ich denke, das wird die einzige Möglichkeit sein. Entscheiden musst du das aber selber, was du da wie machst, da nur du die verschiedene Möglichkeiten in deinen Zeichnungen kennst. Soll das eigentlich eine komplette Applikation werden, oder was hast du vor?! Gruß, Carsten
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pistolpete1 Mitglied Student
Beiträge: 102 Registriert: 06.01.2007
|
erstellt am: 18. Nov. 2007 17:41 <-- editieren / zitieren --> Unities abgeben:
Hallo Carsten! Ich schulde dir ohnehin schon was, denn das halbe Know-How stammt von dir und Wilfried , vielen Dank! Ja es wird eine gesamte Applikation. Ich analysiere mit meinem Makro den gesamten Plan und erstelle eine Dokumentationsdatei, welche die Dokumentation jedes Schachtes enthält zb: Analyse Kanal 1 in Fließrichtung 1.1 m Schotterstelle 1.2 m Reduzierung 200 auf 100 .... --------------------------------- Analyse Kanal 2.... Das exportiere ich in HTML genau an eine Wordseite angepasst. Somit kann man die ganze HTML-Seite ins Word kopieren und evtl noch weiter editieren. Ich komme auch nach anfänglichen Schwierigkeiten jetzt sehr gut voran. Allerdings bei jedem Schritt vorwärts ist wieder einer nach hinten. Jetzt habe die Koordinaten der Führungslinie ausgelesen und dachte dass es so wie bei einer Polylinie ist. ZB. 3 Punkte zu der Grafik (da ja die Linien zu "ohne Formstück" damit nicht zusammenhängen). Allerdings bekomme ich nur den Startpunkt und den Endpunkt, rechts neben "1,2 m" (der obere Knick fehlt mir). Somit wird der Plan auch nicht funktionieren. Das ganze mit SelectionSet zu lösen wird auch schwierig, da ich nicht jede Linie einzeln auf Verzweigungen überprüfen kann .
Hast du noch eine Idee? Liebe Grüße Peter Code:
Public Function getAdditionalPolyKotierung(leader As AcadLeader, ByRef addInfo As Variant) As Boolean On Error GoTo ErrorHandler Dim retval As Boolean Dim i As Integer Dim c As Variant Dim point1(0 To 2) As Variant retval = False c = leader.coordinates 'hole die Koordinaten Debug.Print " ------" For i = 0 To ((UBound(c) - LBound(c) + 1) / 3) - 1 point1(0) = c(i * 3) point1(1) = c(i * 3 + 1) point1(2) = c(i * 3 + 2) Debug.Print " # " & point1(0) & " " & point1(1) Next i getAdditionalPolyKotierung = retval Exit Function ErrorHandler: Err.Clear getAdditionalPolyKotierung = False On Error GoTo 0 End Function
Ausgabe: ------ # 573,113230593814 581,258765323402 # 570,159954423463 587,788775767831 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |