| |  | 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 - zum dritten Mal in Folge, eine Pressemitteilung
|
Autor
|
Thema: Bogen versetzen mit Offset (1888 mal gelesen)
|
fox-033 Mitglied Sachbearbeiter
 Beiträge: 4 Registriert: 11.06.2008
|
erstellt am: 11. Jun. 2008 20:50 <-- editieren / zitieren --> Unities abgeben:         
Hallo zusammen, ich bin ein Autodidakt in Sachen VBA, und komme bei folgendem Prob nicht weiter. Kurz die Aufgabenstellung: ein mit LISP gezeichnetes Dreieck, die Seiten sind keine Geraden sondern Bögen nach innen (Center ist außerhalb des Dreiecks). Nun will ich die Bögen mit 'Offset' nach außen versetzen. Funktioniert einwandfrei, aber wie kann ich die "neuen" Bögen ansprechen? Laut Literatur kann ich als Ergebniss der Offset-Anweisung einen Verweis an eine Objektvariable übergeben. Ich kriegs aber nicht hin. Etwas Code: Dim Bogen as Object Dim BogenNeu as Object Set BogenNeu = Bogen.Offset(-75) Ich hab schon alles mögliche mit .Handle versucht, aber funktioniert hat nichts. Hier im Forum habe ich gelesen, das die erzeugten Offset-Objekte in einem Array abgespeichert sind, aber die genaue Syntax, wie ich darauf zugreife steht leider nirgends. Vieleicht hat jemand Erfahrung und kann mir den Ablauf mailen, ich denke das es wahrscheinlich nur einige Zeilen Code sind. Vielen Dank im voraus Fred Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Moderator Verm.-Ing.
    
 Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 12. Jun. 2008 11:50 <-- editieren / zitieren --> Unities abgeben:          Nur für fox-033
Hallo Fred, herzlich willkommen auf CAD.DE Versuchs mal so:
Code: ' Offset the polyline Dim offsetObj As Variant offsetObj = plineObj.Offset(0.25) For i = LBound(offsetObj) To UBound(offsetObj) Set obj = offsetObj(i) obj.color = i obj.Update Next i
Die Rückgabe von Offset ist ein Variant-Array und kein Object.Wilfried Stelberg ------------------ Warum lisp'eln wenn's auch anders geht. www.ib-stelberg.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fox-033 Mitglied Sachbearbeiter
 Beiträge: 4 Registriert: 11.06.2008
|
erstellt am: 12. Jun. 2008 21:11 <-- editieren / zitieren --> Unities abgeben:         
Vielen Dank für die rasche Antwort. Es ist mir aber immer noch nicht ganz klar, wie ich die "neu erzeugten" Bögen genauso weiterverarbeiten kann wie das Ursprungsobjekt, z.B. das 'Handle' ermitteln und den mit Offset erzeugten Bogen verschieben kann, oder die Start- und Endpoint's in eine Variable speichern kann. In der Zeichnung existiert ja der neue Bogen und hat eine eigenständige Referenz. Muß ich wieder alle Objekte in ein SelectionSet einlesen und die Bögen herausfiltern? Mit Bogen(i).Offset (Versatz) BAWset.Select acSelectionSetLast habe ich in AutoCad_2005 Probleme, in der Version 2008 funktionierts. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Moderator Verm.-Ing.
    
 Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 12. Jun. 2008 23:18 <-- editieren / zitieren --> Unities abgeben:          Nur für fox-033
Hallo Fred, die Objekte (bzw. in der Regel nur ein Objekt) werden im Array gespeichert. Nach dem Beispiel wäre das erste (und einzige) Objekt so zu bearbeiten:
Code: Set obj = offsetObj(0) debug.print obj.handle
Wilfried Stelberg------------------ Warum lisp'eln wenn's auch anders geht. www.ib-stelberg.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin

 Beiträge: 2855 Registriert: 02.05.2006 AutoCAD LandDesktop R2 bis 2004 Civil 3D 2005 - 2025 Plateia, Canalis Visual Basic
|
erstellt am: 12. Jun. 2008 23:27 <-- editieren / zitieren --> Unities abgeben:          Nur für fox-033
Hallo Wilfried, Du hast die Antwort zwar schon gegeben, aber weil ich den Code schon in der Zwischenablage habe, kopier ich ihn doch noch rein. Hallo Fred, beiliegend das Bogenbeispiele mal um den Offset und die Veschiebung von Startpunkt zum Endpunkt erweitert. Vielleicht ist es Dir dann klarer. Code: Sub Example_AddArc() ' This example creates an arc in model space. Dim arcObj As AcadArc Dim centerPoint(0 To 2) As Double Dim radius As Double Dim startAngleInDegree As Double Dim endAngleInDegree As Double ' Define the circle centerPoint(0) = 0#: centerPoint(1) = 0#: centerPoint(2) = 0# radius = 5# startAngleInDegree = 10# endAngleInDegree = 230# ' Convert the angles in degrees to angles in radians Dim startAngleInRadian As Double Dim endAngleInRadian As Double startAngleInRadian = startAngleInDegree * 3.141592 / 180# endAngleInRadian = endAngleInDegree * 3.141592 / 180# ' Create the arc object in model space Set arcObj = ThisDrawing.ModelSpace.AddArc(centerPoint, radius, startAngleInRadian, endAngleInRadian) ZoomAll Dim offsetObj As Variant Dim entHandle As String offsetObj = arcObj.Offset(2) For i = LBound(offsetObj) To UBound(offsetObj) Set obj = offsetObj(i) If obj.ObjectName = "AcDbArc" Then obj.color = 1 SP = obj.StartPoint ep = obj.EndPoint obj.Move SP, ep obj.Update SP = obj.StartPoint ep = obj.EndPoint entHandle = obj.Handle MsgBox "Name des Objektes : " & obj.ObjectName & vbCrLf _ & "Startpunkt : " & Format(SP(0), "0.00") & "," & Format(SP(1), "0.00") & vbCrLf _ & "Handle :" & entHandle, , "Offset Example" End If Next i End Sub
Grüße, Klaus
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fox-033 Mitglied Sachbearbeiter
 Beiträge: 4 Registriert: 11.06.2008
|
erstellt am: 12. Jun. 2008 23:36 <-- editieren / zitieren --> Unities abgeben:         
Vieleicht nicht die eleganteste Lösung, aber es funktioniert: Code:
Dim BAWset As AcadSelectionSet Dim Bogen(2) As Object Dim BogenNeu(2) As Object Dim MP As Variant Dim Anzahl As Integer Dim i As Integer Dim y As Integer Dim handle1 As String Dim Radius As Double Dim StartWinkel As Double Dim EndWinkel As Double Dim OffsObj As VariantThisDrawing.SelectionSets.Add "Boegen" Set BAWset = ThisDrawing.SelectionSets("Boegen") 'Selectionset BAWset.Clear BAWset.Select acSelectionSetAll Anzahl = BAWset.Count 'Bögen erfassen For i = 0 To Anzahl - 1 If TypeName(BAWset(i)) = "nothing" Then ' ansonsten werden "leere Objekte" aufgenommen y = y Else If TypeName(BAWset(i)) = "IAcadArc" Then handle1 = BAWset(i).Handle Set Bogen(y) = ThisDrawing.HandleToObject(handle1) offsetObj = Bogen(y).Offset(-75) Set obj = offsetObj(0) StartWinkel = obj.StartAngle EndWinkel = obj.EndAngle Radius = obj.Radius MP = obj.Center Set hBogen = ThisDrawing.ModelSpace.AddArc(MP, Radius, StartWinkel, EndWinkel) handle2 = hBogen.Handle Set BogenNeu(y) = ThisDrawing.HandleToObject(handle2) obj.Delete y = y + 1 End If End If Next
Vielen herzlichen Dank für Diene Hilfe. Fred Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fox-033 Mitglied Sachbearbeiter
 Beiträge: 4 Registriert: 11.06.2008
|
erstellt am: 12. Jun. 2008 23:43 <-- editieren / zitieren --> Unities abgeben:         
Danke Klaus, die Beitrag kam, während ich meinen verfasst habe. Super, dass man hier so viel Unterstützung findet. Wahrscheinlich bin ich hier im falschen Forum, aber trotzdem die Frage: kann man eine vlx-Datei (ist wohl LISP?) noch umschreiben? Im Lisp-Editor von AutoCad siehts etwa so aus: --- VRTLIB-14/dØLOAD(( rotected . T) (:active-x . T) (:separate-namespace) (:load-file-list (:fas "segel")))Á.2SEGEL FAS4-FILE ; Do not change it! 7003 ---- der Rest ist unleserlich. LG fred Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |