Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de
  AutoCAD VBA
  Bogen versetzen mit Offset

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
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

Sehen Sie sich das Profil von fox-033 an!   Senden Sie eine Private Message an fox-033  Schreiben Sie einen Gästebucheintrag für fox-033

Beiträge: 4
Registriert: 11.06.2008

erstellt am: 11. Jun. 2008 20:50    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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.


Sehen Sie sich das Profil von Stelli1 an!   Senden Sie eine Private Message an Stelli1  Schreiben Sie einen Gästebucheintrag für Stelli1

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für fox-033 10 Unities + Antwort hilfreich

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

Sehen Sie sich das Profil von fox-033 an!   Senden Sie eine Private Message an fox-033  Schreiben Sie einen Gästebucheintrag für fox-033

Beiträge: 4
Registriert: 11.06.2008

erstellt am: 12. Jun. 2008 21:11    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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.


Sehen Sie sich das Profil von Stelli1 an!   Senden Sie eine Private Message an Stelli1  Schreiben Sie einen Gästebucheintrag für Stelli1

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für fox-033 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von KlaK an!   Senden Sie eine Private Message an KlaK  Schreiben Sie einen Gästebucheintrag für KlaK

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für fox-033 10 Unities + Antwort hilfreich

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

Sehen Sie sich das Profil von fox-033 an!   Senden Sie eine Private Message an fox-033  Schreiben Sie einen Gästebucheintrag für fox-033

Beiträge: 4
Registriert: 11.06.2008

erstellt am: 12. Jun. 2008 23:36    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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 Variant

ThisDrawing.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

Sehen Sie sich das Profil von fox-033 an!   Senden Sie eine Private Message an fox-033  Schreiben Sie einen Gästebucheintrag für fox-033

Beiträge: 4
Registriert: 11.06.2008

erstellt am: 12. Jun. 2008 23:43    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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 >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2025 CAD.de | Impressum | Datenschutz