| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
 | PNY: der unverzichtbare Partner für umfassende KI-Lösungen von Workstations bis zu Edge Computing und KI-Cluster-Bereitstellung, eine Pressemitteilung
|
Autor
|
Thema: Endpunkte in VBA ansteuern (1016 mal gelesen)
|
dan_rather Mitglied Techniker HLK

 Beiträge: 97 Registriert: 09.12.2003
|
erstellt am: 23. Aug. 2004 11:14 <-- editieren / zitieren --> Unities abgeben:         
|
mapcar Mitglied CADmin

 Beiträge: 1250 Registriert: 20.05.2002 Die Phönizier haben das Geld erfunden - aber warum so wenig? (Johann Nepomuk Nestroy)
|
erstellt am: 23. Aug. 2004 14:16 <-- editieren / zitieren --> Unities abgeben:          Nur für dan_rather
|
dan_rather Mitglied Techniker HLK

 Beiträge: 97 Registriert: 09.12.2003
|
erstellt am: 24. Aug. 2004 12:27 <-- editieren / zitieren --> Unities abgeben:         
Danke Axel, mit den Punkten war schon mal eine große Hilfe. Wie kann ich aber in einem Selectionset die Schnittpunkte auswählen die alle Linien haben wenn sie Senkrecht aufeinander stehen? -| Das heißt, ich möchte am endpunkt der Linie die auf die zeite Linie stößt einen Punkt setzen. Das ganze soll in einem Schema automatisch die Verbindungspunkte von Leitungen darstellen. Wäre für jeden weiteren Tipp Dankbar. Habe es schon mit "IntersectWith" versucht. Aber leider ohne Erfolg. Danke schon mal Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mapcar Mitglied CADmin

 Beiträge: 1250 Registriert: 20.05.2002 Die Phönizier haben das Geld erfunden - aber warum so wenig? (Johann Nepomuk Nestroy)
|
erstellt am: 24. Aug. 2004 13:18 <-- editieren / zitieren --> Unities abgeben:          Nur für dan_rather
|
dan_rather Mitglied Techniker HLK

 Beiträge: 97 Registriert: 09.12.2003
|
erstellt am: 24. Aug. 2004 13:35 <-- editieren / zitieren --> Unities abgeben:         
Hallo Axel, leider sind meine Kenntnisse in Lisp noch viel besch...eidener als in VBA. Die Frage ist wie sag ich in VBA "suche alle Linnien in meiner Auswahl die mit ihrem Endpunkt auf einer Linie des gleichen Layer liegen und setze mir dort einen Punkt(besser noch einen Ring, aber den scheint VBA nicht zu kennen?). hier erstmal der bisherige code: Sub Massenermittlung() Dim startPoint As Variant Dim endPoint As Variant Dim Vpunkt As AcadCircle Dim LayerAkt As AcadLayer Dim intPoints As Variant Dim lineobj As AcadLine Dim gew As AcadObject Dim ausw As AcadObject Dim acss As AcadSelectionSet Set acss = ThisDrawing.SelectionSets.Add("Line") Dim Mldg, Stil, Titel, Antwort, Text1 Stil = vbOKCancel Titel = "Auswertung" frei = " " Dim I As Double On Error GoTo ENDE MsgBox "Bitte den Layer durch anklicken wählen" ThisDrawing.Utility.GetEntity gew, "Objekt wählen" MsgBox "Bitte Objekte Auswählen" acss.SelectOnScreen For Each ausw In acss If ausw.Layer = gew.Layer Then If TypeOf ausw Is AcadLine Then ' If ausw Is ausw.IntersectWith(ausw, acExtendNone) Then startPoint = ausw.startPoint endPoint = ausw.endPoint Set Vpunkt = ThisDrawing.ModelSpace.AddCircle(endPoint, 15) Vpunkt.Layer = ausw.Layer Vpunkt.Lineweight = acLnWt500 'End If End If End If Next ausw Antwort = MsgBox("Punkte gesetzt", Stil, Titel) If Antwort = vbCancel Then GoTo ENDE ENDE: acss.Delete End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mapcar Mitglied CADmin

 Beiträge: 1250 Registriert: 20.05.2002 Die Phönizier haben das Geld erfunden - aber warum so wenig? (Johann Nepomuk Nestroy)
|
erstellt am: 24. Aug. 2004 17:28 <-- editieren / zitieren --> Unities abgeben:          Nur für dan_rather
> ' If ausw Is ausw.IntersectWith(ausw, acExtendNone) Then... Diese Zeile hast du natürlich mit gutem Grund auskommentiert;-) Da berechnechst du den Schnittpunkt einer Linie mit sich selber. Du musst aber wie gesagt jede Linie gegen jede andere testen. Es ist aber auch nicht so ganz einfach, dass man da zwei foreachs ineinander verschachteln könnte. Da kommt das ins Spiel, was ich oben unter dem Stichwort Entfernungstabellen angesprochen habe. Wenn du den Schnittpunkt der Linien Nr. 163 mit Nr. 241 berechnet hast, macht es keinen Sinn, auch noch den Schnittpunkt von Linie 241 mit Linie 163 zu berechnen, den hast du ja dann schon. Die Lösung ist nicht so einfach, dass man sie hier mit ein paar Zeilen darstellen könnte. Ich würde die Linien zunächst aus dem Auswahlsatz in ein lineares Array umkopieren. Mit einem Array lässt sich über die Indizes sehrschön auf die Linien zugreifen. Wenn du 1000 Linien hast, testest du Nr.1 gegen alle anderen 999. Nummer 2 musst du dann nur noch gegen 3 bis 999 testen usw. Ich lege es dir ans Herz: Entfernungstabelle. Dieses Prinzip musst du verstanden haben. Foreach mit Auswahlsatz ist das ungeeignete Werkzeug, da du immer alle Elemente bearbeitest. Da ist ein ForNext angesagt, weil du Anfang und Ende der Iteration selbst bestimmen kannst. Natürlich kennt VBA keinen RING, weil es den nicht gibt, ebensowenig wie ein POLYGON oder ein RECHTECK. Diese Befehle erzeugen POLYLINIEN, und eine ringförmige Polylinie ist auch mit VBA recht einfach zu erzeugen. Gruß, Axel Strube-Zettler
------------------ Meine AutoLisp-Seiten Meine private Homepage Mein Angriff auf dein Zwerchfell Mein Lexikon der Fotografie Mein gereimtes Gesülze Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |

| |
dan_rather Mitglied Techniker HLK

 Beiträge: 97 Registriert: 09.12.2003
|
erstellt am: 25. Aug. 2004 09:16 <-- editieren / zitieren --> Unities abgeben:         
|