Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de
  AutoCAD VBA
  mein erstes Makro! bitte um verbesserungsvorschläge!!

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
  
NVIDIA GTC Paris und ISC High Performance-Konferenz 2025, eine Pressemitteilung
Autor Thema:  mein erstes Makro! bitte um verbesserungsvorschläge!! (1547 mal gelesen)
MA28
Mitglied
Bautechnischer Zeichner


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

Beiträge: 53
Registriert: 17.03.2003

W2k pro 5.0.2195 SP3;
AutoCAD 2002;
HP DesignJet 750c & 800

erstellt am: 06. Feb. 2007 14:28    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 ich war schon lange nicht mehr aktiv (noch mit VBA noch hier im Forum). stelle aber nun aber mal mein erstes Makro hier rein!!

wäre fein, wenn jemand mal ein auge darauf wirft und mir vielleicht tipps gibt, wie ich das ganze verbessern könnte (Code)

schon mal thx


Sub Vorziehung_einfach()
 
  Dim StrRadius As String
  Dim StrAbstand_1 As String
  Dim StrAbstand_2 As String
  Dim cstrBlockDWG As String
 
  Dim aceBlock As AcadBlockReference
  Dim ObjNewLayer As AcadLayer
  Dim VarPt As Variant
  Dim StarPt(0 To 2) As Double
  Dim EndPt(0 To 2) As Double
  Dim CenterPt(0 To 2) As Double
  Dim IntPt(0 To 2) As Double
 
  Dim ObjHelpLine(5)  As AcadLine
  Dim ObjLine(3) As AcadLine
  Dim ObjOffsetLine As Variant
  Dim ObjCircle(3) As AcadCircle
  Dim ObjArc(2) As AcadArc
 
  StrRadius = InputBox("geben sie bitte den Radius ein:", "Vorziehung")
  StrAbstand_1 = InputBox("geben sie bitte den 1. Vorziehungsabstand ein:", "Vorziehung")
  StrAbstand_2 = InputBox("geben sie bitte den 2. Vorziehungsabstand ein:", "Vorziehung")
 
 
  '1. Schritt:
  Set ObjNewLayer = ThisDrawing.Layers.Add("Hilf") 'Hilfslayer wird erstellt
      ObjNewLayer.Color = acYellow 'Farbe zuweisen
      ObjNewLayer.Plottable = False 'kann nicht geplotte werden
 
  'Punkte für Hilfslinien werden vom User angegeben
  VarPt = ThisDrawing.Utility.GetPoint(, "Bitte 1. Punkt wählen: ") '1. Punkt für 1. Hilfslinie
    StarPt(0) = VarPt(0)
    StarPt(1) = VarPt(1)
  VarPt = ThisDrawing.Utility.GetPoint(, "Bitte 2. Punkt wählen: ") '2. Punkt für 1. Hilfslinie
    EndPt(0) = VarPt(0)
    EndPt(1) = VarPt(1)
  Set ObjHelpLine(0) = ThisDrawing.ModelSpace.AddLine(StarPt, EndPt) '1. Hilfsline wird gezeichnet
      ObjHelpLine(0).Layer = ("hilf")
  VarPt = ThisDrawing.Utility.GetPoint(, "Bitte 3. Punkt wählen: ") '1. Punkt für 2. Hilfslinie
    StarPt(0) = VarPt(0)
    StarPt(1) = VarPt(1)
  VarPt = ThisDrawing.Utility.GetPoint(, "Bitte 4. Punkt wählen: ") '2. Punkt für 2. Hilfslinie
    EndPt(0) = VarPt(0)
    EndPt(1) = VarPt(1)
  Set ObjHelpLine(1) = ThisDrawing.ModelSpace.AddLine(StarPt, EndPt) '2. Hilfsline wird gezeichnet
      ObjHelpLine(1).Layer = ("hilf")
     
     
     
  '2. Schritt:
  Set ObjNewLayer = ThisDrawing.Layers.Add("3s_arsl") 'Randsteinglayer wird erstellt
      ObjNewLayer.Color = acRed 'Farbe zuweisen

  ObjOffsetLine = ObjHelpLine(0).Offset(StrAbstand_1)  'gelbe Hilfslinie wird versetzt ...
    Set ObjLine(0) = ObjOffsetLine(0)
        ObjLine(0).Layer = ("3s_arsl") '... und versetzter Linie wird Layer zugewiesen
  ObjOffsetLine = ObjHelpLine(1).Offset(-StrAbstand_2) 'gelbe Hilfslinie wird versetzt ...
    Set ObjLine(1) = ObjOffsetLine(0)
        ObjLine(1).Layer = ("3s_arsl") '... und versetzter Linie wird Layer zugewiesen
 
 
  '3. Schritt (Hilfslinien für Hilfskreis und Hilfskreis werden gezeichnet):
  ObjOffsetLine = ObjLine(0).Offset(-StrRadius)
    Set ObjHelpLine(2) = ObjOffsetLine(0)
        ObjHelpLine(2).Color = acYellow
  ObjOffsetLine = ObjLine(1).Offset(StrRadius)
    Set ObjHelpLine(3) = ObjOffsetLine(0)
        ObjHelpLine(3).Color = acYellow
   
  VarPt = ObjHelpLine(2).IntersectWith(ObjHelpLine(3), acExtendBoth)
    CenterPt(0) = VarPt(0)
    CenterPt(1) = VarPt(1)
  Set ObjCircle(0) = ThisDrawing.ModelSpace.AddCircle(CenterPt, StrRadius)
      ObjCircle(0).Layer = ("3s_arsl")
 
  ObjHelpLine(2).Delete
  ObjHelpLine(3).Delete
   
  VarPt = ObjLine(0).IntersectWith(ObjCircle(0), acExtendBoth)
    IntPt(0) = VarPt(0)
    IntPt(1) = VarPt(1)
  Set ObjHelpLine(2) = ThisDrawing.ModelSpace.AddLine(CenterPt, IntPt)
      ObjHelpLine(2).Layer = ("hilf")
   
  VarPt = ObjLine(1).IntersectWith(ObjCircle(0), acExtendBoth)
    IntPt(0) = VarPt(0)
    IntPt(1) = VarPt(1)
  Set ObjHelpLine(3) = ThisDrawing.ModelSpace.AddLine(CenterPt, IntPt)
      ObjHelpLine(3).Layer = ("hilf")
     
  Set ObjArc(0) = ThisDrawing.ModelSpace.AddArc(CenterPt, StrRadius, ObjHelpLine(2).Angle, ObjHelpLine(3).Angle)
      ObjArc(0).Layer = ("3s_arsl")
 
  ObjCircle(0).Delete
 
  Set ObjCircle(0) = ThisDrawing.ModelSpace.AddCircle(ObjArc(0).StartPoint, 1)
      ObjCircle(0).Layer = ("hilf")
  Set ObjCircle(1) = ThisDrawing.ModelSpace.AddCircle(ObjArc(0).EndPoint, 1)
      ObjCircle(1).Layer = ("hilf")
 
  VarPt = ObjHelpLine(2).IntersectWith(ObjCircle(0), acExtendNone)
    IntPt(0) = VarPt(0)
    IntPt(1) = VarPt(1)
  ObjCircle(0).Delete
  Set ObjCircle(0) = ThisDrawing.ModelSpace.AddCircle(IntPt, 1)
      ObjCircle(0).Layer = ("hilf")
     
  VarPt = ObjHelpLine(3).IntersectWith(ObjCircle(1), acExtendNone)
    IntPt(0) = VarPt(0)
    IntPt(1) = VarPt(1)
  ObjCircle(1).Delete
  Set ObjCircle(1) = ThisDrawing.ModelSpace.AddCircle(IntPt, 1)
      ObjCircle(1).Layer = ("hilf")
     
  VarPt = ObjHelpLine(0).IntersectWith(ObjHelpLine(2), acExtendBoth)
    IntPt(0) = VarPt(0)
    IntPt(1) = VarPt(1)
    ObjHelpLine(2).Delete
  Set ObjHelpLine(2) = ThisDrawing.ModelSpace.AddLine(ObjCircle(0).Center, IntPt)
      ObjHelpLine(2).Layer = ("hilf")
  ObjOffsetLine = ObjHelpLine(2).Offset(1)
    Set ObjLine(2) = ObjOffsetLine(0)
        ObjLine(2).Layer = ("3s_arsl")
  ObjHelpLine(2).Delete
 
  VarPt = ObjHelpLine(1).IntersectWith(ObjHelpLine(3), acExtendBoth)
    IntPt(0) = VarPt(0)
    IntPt(1) = VarPt(1)
    ObjHelpLine(3).Delete
  Set ObjHelpLine(2) = ThisDrawing.ModelSpace.AddLine(ObjCircle(1).Center, IntPt)
      ObjHelpLine(2).Layer = ("hilf")
  ObjOffsetLine = ObjHelpLine(2).Offset(-1)
    Set ObjLine(3) = ObjOffsetLine(0)
        ObjLine(3).Layer = ("3s_arsl")
  ObjHelpLine(2).Delete
 
  Set ObjHelpLine(2) = ThisDrawing.ModelSpace.AddLine(ObjCircle(0).Center, ObjLine(2).StartPoint)
      ObjHelpLine(2).Layer = ("hilf")
  Set ObjHelpLine(3) = ThisDrawing.ModelSpace.AddLine(ObjCircle(0).Center, ObjArc(0).StartPoint)
      ObjHelpLine(3).Layer = ("hilf")
  Set ObjArc(1) = ThisDrawing.ModelSpace.AddArc(ObjCircle(0).Center, 1, ObjHelpLine(2).Angle, ObjHelpLine(3).Angle)
      ObjArc(1).Layer = ("3s_arsl")
     
  ObjHelpLine(2).Delete
  ObjHelpLine(3).Delete
  ObjCircle(0).Delete
 
  Set ObjHelpLine(2) = ThisDrawing.ModelSpace.AddLine(ObjCircle(1).Center, ObjLine(3).StartPoint)
      ObjHelpLine(2).Layer = ("hilf")
  Set ObjHelpLine(3) = ThisDrawing.ModelSpace.AddLine(ObjCircle(1).Center, ObjArc(0).EndPoint)
      ObjHelpLine(3).Layer = ("hilf")
  Set ObjArc(2) = ThisDrawing.ModelSpace.AddArc(ObjCircle(1).Center, 1, ObjHelpLine(3).Angle, ObjHelpLine(2).Angle)
      ObjArc(2).Layer = ("3s_arsl")
 
  ObjHelpLine(0).Delete
  ObjHelpLine(1).Delete
  ObjHelpLine(2).Delete
  ObjHelpLine(3).Delete
  ObjCircle(1).Delete
  ObjLine(0).Delete
  ObjLine(1).Delete
 
  Set ObjNewLayer = ThisDrawing.Layers.Add("3___pkp")
      ObjNewLayer.Color = acWhite
 
  cstrBlockDWG = "punkt-voll.dwg"
 
  Set aceBlock = ThisDrawing.ModelSpace.InsertBlock(ObjArc(1).StartPoint, cstrBlockDWG, 1, 1, 1, 0)
  Set aceBlock = ThisDrawing.ModelSpace.InsertBlock(ObjArc(1).EndPoint, cstrBlockDWG, 1, 1, 1, 0)
  Set aceBlock = ThisDrawing.ModelSpace.InsertBlock(ObjArc(2).StartPoint, cstrBlockDWG, 1, 1, 1, 0)
  Set aceBlock = ThisDrawing.ModelSpace.InsertBlock(ObjArc(2).EndPoint, cstrBlockDWG, 1, 1, 1, 0)
 
End Sub

------------------
mfG
Gambrinus

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Carsten1210
Mitglied
staatl. geprüfter Holztechniker


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

Beiträge: 1360
Registriert: 24.07.2002

erstellt am: 06. Feb. 2007 19:05    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 MA28 10 Unities + Antwort hilfreich

Hi Gambrinus,

Warum nimmst du immer VarPt und übergibst diese dann an StrtPt oder EndPt?! Da kannst du ja auch direkt StartPt = This Drawing... nehmen.

Code:

  VarPt = ThisDrawing.Utility.GetPoint(, "Bitte 2. Punkt wählen: ") '2. Punkt für 1. Hilfslinie
    EndPt(0) = VarPt(0)
    EndPt(1) = VarPt(1)

Du kannst den Layer auch vo der Erstellung der Linien, Kreise usw. aktiv stellen, dann brauchst du den einzelnen Objekten nicht nachträglich den Layer zuweisen:

    Dim ActLayer As AcadLayer
    Set ActLayer = ThisDrawing.Layers("Hilfsl")

Aber das ist Geschmackssache.

Ich schaue mir das vielleicht Morgen noch mal an.

Gruß, Carsten

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CAD-Huebner
Ehrenmitglied V.I.P. h.c.
Verm.- Ing., ATC-Trainer



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

Beiträge: 9807
Registriert: 01.12.2003

AutoCAD 2.5 - 2022, LDD, MDT, RD, ADT, Civil
Inventor AIP 4-11, 2008 -2022
Win 10

erstellt am: 06. Feb. 2007 20:41    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 MA28 10 Unities + Antwort hilfreich

Gut fände ich noch einen Kommentar im Programm, was das Programm überhaupt bewirkt und welche Voraussetungen gegeben sein müssen.

Was z.B. ist "Vorziehung"?

------------------
Mit freundlichem Gruß

Udo Hübner

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

MA28
Mitglied
Bautechnischer Zeichner


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

Beiträge: 53
Registriert: 17.03.2003

W2k pro 5.0.2195 SP3;
AutoCAD 2002;
HP DesignJet 750c & 800

erstellt am: 07. Feb. 2007 08:19    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

Zitat:
Original erstellt von Carsten1210:
HWarum nimmst du immer VarPt und übergibst diese dann an StrtPt oder EndPt?! Da kannst du ja auch direkt StartPt = This Drawing... nehmen.

das ist eine gute Frage!! 
habe es mir auch angesehen und es ergibt keinen Sinn, werde es auch gleich umarbeiten!!

THX

------------------
mfG
Gambrinus

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

marc.scherer
Ehrenmitglied V.I.P. h.c.
CAD-Administrator



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

Beiträge: 2494
Registriert: 02.11.2001

erstellt am: 07. Feb. 2007 09:20    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 MA28 10 Unities + Antwort hilfreich

Hi,
ich würde ein wenig modularisieren.
z.B. wirst Du immer wieder die Anforderung haben einen Layer mit bestimmten Parametern zu erzeugen. Warum baust Du dafür keine Function?
z.B. in der Art:
Public Function CreateLayer(NAME, DESCRIPTION, COLOR, LINETYPE, LINEWEIGHT, PLOTTABLE, SetCurrentFlag)

Die Funktion packst Du in ein immer zu ladendes Projekt und kannst fortan nur noch die Sub aufrufen.

------------------
Ciao,
Marc
Mein AG sucht u.a. Architekten und Bauzeichner!
Mein alter AG sucht 'nen CADMIN

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

MA28
Mitglied
Bautechnischer Zeichner


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

Beiträge: 53
Registriert: 17.03.2003

W2k pro 5.0.2195 SP3;
AutoCAD 2002;
HP DesignJet 750c & 800

erstellt am: 07. Feb. 2007 09:34    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


mein-Makro_Vorziehung.pdf

 
Zitat:
Original erstellt von CAD-Huebner:
Gut fände ich noch einen Kommentar im Programm, was das Programm überhaupt bewirkt und welche Voraussetungen gegeben sein müssen.

Was z.B. ist "Vorziehung"?


das ist ein vorziehung!!
wird in einem Kreuzungsbereich an den gehsteig angebaut um die sicht zu verbessern!!

------------------
mfG
Gambrinus

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

MA28
Mitglied
Bautechnischer Zeichner


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

Beiträge: 53
Registriert: 17.03.2003

W2k pro 5.0.2195 SP3;
AutoCAD 2002;
HP DesignJet 750c & 800

erstellt am: 07. Feb. 2007 09:44    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

Zitat:
Original erstellt von marc.scherer:
Hi,
ich würde ein wenig modularisieren.
z.B. wirst Du immer wieder die Anforderung haben einen Layer mit bestimmten Parametern zu erzeugen. Warum baust Du dafür keine Function?
z.B. in der Art:
Public Function CreateLayer(NAME, DESCRIPTION, COLOR, LINETYPE, LINEWEIGHT, PLOTTABLE, SetCurrentFlag)

Die Funktion packst Du in ein immer zu ladendes Projekt und kannst fortan nur noch die Sub aufrufen.



das mit den Layern ist so eine Sache, über die ich auch schon nachgedacht habe!! den "hilf" layer brauche ich nicht(!!), da die objekte die auf diesem layer erstellt werden, wieder gelöscht werden.

die anderen zwei Layer die noch in diesem Makro vorkommen sind sowieso in der Vorlagendatei vorhanden!!

------------------
mfG
Gambrinus

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

marc.scherer
Ehrenmitglied V.I.P. h.c.
CAD-Administrator



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

Beiträge: 2494
Registriert: 02.11.2001

erstellt am: 07. Feb. 2007 10:06    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 MA28 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von MA28:
die anderen zwei Layer die noch in diesem Makro vorkommen sind sowieso in der Vorlagendatei vorhanden!!


Das ist kein Argument. Was, wenn der User 'ne andere Vorlage gewählt hat oder den Layer bereinigt hat? Du kannst keine Programme schreiben, bei denen Du einfach davon ausgehst das schon was vorhanden ist. Was Du brauchst mußt Du abprüfen und bei Bedarf erzeugen können.

------------------
Ciao,
Marc
Mein AG sucht u.a. Architekten und Bauzeichner!
Mein alter AG sucht 'nen CADMIN

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

MA28
Mitglied
Bautechnischer Zeichner


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

Beiträge: 53
Registriert: 17.03.2003

W2k pro 5.0.2195 SP3;
AutoCAD 2002;
HP DesignJet 750c & 800

erstellt am: 07. Feb. 2007 12: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

Zitat:
Das ist kein Argument. Was, wenn der User 'ne andere Vorlage gewählt hat oder den Layer bereinigt hat? Du kannst keine Programme schreiben, bei denen Du einfach davon ausgehst das schon was vorhanden ist. Was Du brauchst mußt Du abprüfen und bei Bedarf erzeugen können.

das ist natürlich richtig und ich muss dir bedingungslos recht geben!
Nur die große Frage für mich ist, wie ich überprüfe ich das?

1. Ich müsste überprüfen, ob die zwei Layer vorhanden sind, oder? (weiß ich aber nicht, iwe das geht:confused
2. wenn nicht dann müsste ich ich sie erstellen (das sollte ich hinbekommen)
2. sind sie vorhanden, müsste ich sie wiederrum aktivieren (sollte ich schaffen - habe aber gerade ein brett vor dem kopf)

------------------
mfG
Gambrinus

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Carsten1210
Mitglied
staatl. geprüfter Holztechniker


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

Beiträge: 1360
Registriert: 24.07.2002

erstellt am: 07. Feb. 2007 13:06    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 MA28 10 Unities + Antwort hilfreich

Hi,

Zu 1: Durchlauf doch einfach die Layer-Collection und vergleiche die Namen, ob deiner schon vorkommt.
Edit: Hier noch ein einfacher Code dazu:
Public Sub abc()
Dim lay As AcadLayer
For Each lay In ThisDrawing.Layers 'Durchlaufe jeden Layer in der Zeichnung
If lay.Name = "0" Then
'wenn Layer = Layer 0 dann mach folgendes...
MsgBox lay.Name
End If
Next
End Sub

Zu 2: Hier ein Codeschnipsel aus der Hilfe:
Dim newlayer As AcadLayer
Set newlayer = ThisDrawing.Layers.Add("LAYER1")

Zu 3: ThisDrawing.ActiveLayer = newlayer

Gruß, Carsten

[Diese Nachricht wurde von Carsten1210 am 07. Feb. 2007 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

MA28
Mitglied
Bautechnischer Zeichner


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

Beiträge: 53
Registriert: 17.03.2003

W2k pro 5.0.2195 SP3;
AutoCAD 2002;
HP DesignJet 750c & 800

erstellt am: 07. Feb. 2007 14:21    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

Zitat:
Original erstellt von Carsten1210:
[B]Zu 1: Durchlauf doch einfach die Layer-Collection und vergleiche die Namen, ob deiner schon vorkommt.

muss ich aber schon vorher:

Dim objLayers As AcadLayers
Set objLayers = ThisDrawing.Layers

und dann eben in einer Schleife abfragen, ob der Layer vorhanden ist und wenn nicht, dann eben erstellen!?!

------------------
mfG
Gambrinus

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Carsten1210
Mitglied
staatl. geprüfter Holztechniker


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

Beiträge: 1360
Registriert: 24.07.2002

erstellt am: 07. Feb. 2007 14:47    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 MA28 10 Unities + Antwort hilfreich

Hi,

Hab hier mal schnell was zusammen gebastelt:

Public Sub abc()
Dim lay As AcadLayer
Dim i As Long
i = 0
For Each lay In ThisDrawing.Layers 'Durchlaufe jeden Layer in der Zeichnung
If lay.Name = "test" Then
'wenn Layer = Layer 0 dann mach folgendes...
i = 1 'Setze Variable i auf 1 wenn Layer vorhanden
End If
Next
If i = 0 Then 'Wenn I = 0 (Layer nicht vorhanden), dann Layer erstellen.
Set lay = ThisDrawing.Layers.Add("test")
lay.color = acRed
End If
'''Code...

'''Layer Aktiv setzen
ThisDrawing.ActiveLayer = ThisDrawing.Layers("test")
End Sub


Gruß, Carsten

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

marc.scherer
Ehrenmitglied V.I.P. h.c.
CAD-Administrator



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

Beiträge: 2494
Registriert: 02.11.2001

Windows 10 64bit
AutoCAD Architecture 2018/2019 (deu/eng)
AEC-Collection 2019 (Revit und Zeugs)
Wenn sich's nicht vermeiden läßt:
D-A-CH Erweiterung (mies implementierter Schrott)

erstellt am: 07. Feb. 2007 16:54    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 MA28 10 Unities + Antwort hilfreich

Ich zitiere mal die ActiveX Hilfe:

 

Zitat:

Item Method
Gets the member object at a given index in a collection, group, or selection set.

Signature

RetVal = object.Item(Index)

Object:
All Collections, Group, SelectionSet
The object or objects this method applies to.

Index:
Variant; input-only
The index location in the collection for the member item to query.
The index must be either an integer or a string. If an integer, the index must be between 0 and N-1, where N is the number of objects in the collection or selection set.

RetVal

Object
The object at the given index location in the collection or selection set.

Remarks

This method supports string-based iteration. For example, if a block named BLOCK1 was created with the following statement:

Set block1 = Blocks.Add("BLOCK1")

you could reference the object through the following statement:

Set whichblock = Blocks.Item("BLOCK1")

NOTE The Item method is case-sensitive when used with the SelectionSets collection; it is not case-sensitive for other collections.


Alles klar? Auch die Layercollection läßt sich so abfragen.

Code:
Set whichlayer = Layers.Item("MeinTollerLayer")
Kein Grund durch die ganze Chose durchzuhecheln.

------------------
Ciao,
Marc
Mein AG sucht u.a. Architekten und Bauzeichner!
Mein alter AG sucht 'nen CADMIN
   
   

[Diese Nachricht wurde von marc.scherer am 07. Feb. 2007 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

MA28
Mitglied
Bautechnischer Zeichner


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

Beiträge: 53
Registriert: 17.03.2003

W2k pro 5.0.2195 SP3;
AutoCAD 2002;
HP DesignJet 750c & 800

erstellt am: 07. Feb. 2007 17: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

Danke vorerst mal an euche beide Carsten1210 und marc.scherer für eure Hilfe, die mich echt weiter bringt beim Verstehen (meistens zu mindest) und auch beim Grübeln über meinen Code.

Code:
  For Each ObjLayer In ThisDrawing.Layers
    If ObjLayer.Name = "3s_arsl" Then
      i = True
    End If
    Next
    If i = False Then
      Set ObjLayer = ThisDrawing.Layers.Add("3s_arsl")
      ObjLayer.color = acRed
    End If
   
  ThisDrawing.ActiveLayer = ThisDrawing.Layers("3s_arsl")

"i" habe ich als boolean gesetzt
weil es, finde ich, eh nur ja oder nein gibt!!


die methode verstehe ich nich so wirklich, weil ich einfach nicht nachvollziehen kann was da genau passiert!! villeicht könntest du sie mir bitte auf deutsch mit deinen eigenen worten erklären?

------------------
mfG
Gambrinus

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

startrek
Moderator
Architekt


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

Beiträge: 1361
Registriert: 13.02.2003

.

erstellt am: 07. Feb. 2007 17:35    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 MA28 10 Unities + Antwort hilfreich

Hallo,

einen boolean ausgerechnet mit i zu deklarieren ist nicht so dolle,
aber ansonsten kann man es so machen. Ggf. noch bei 'gefunden' mit Exit For aussteigen.

Theoretisch kannste dir aber das Schleifchen schenken und es sozusagen einfach mal 'draufankommen' lassen;-) ich denke so in der Richtung meinte auch Marc.

Code:

Sub asdf()
    On Error Resume Next
    ThisDrawing.Layers.Add "3s_arsl"
    On Error GoTo 0
    ThisDrawing.ActiveLayer = ThisDrawing.Layers("3s_arsl")
End Sub

Gruss Nancy

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Carsten1210
Mitglied
staatl. geprüfter Holztechniker


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

Beiträge: 1360
Registriert: 24.07.2002

erstellt am: 07. Feb. 2007 17:44    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 MA28 10 Unities + Antwort hilfreich

Hi,

Wie gesagt, das war eben schnell zusammengebastelt. Normal nutze ich auch kein i für boolean.
Bei der Methode von Marc kannst du direkt auf den Layer zugreifen, wenn er denn vorhanden ist, sonst musst du den Fehler abfangen.
Aber das ist dann Geschmackssache, wie man es löst.

Gruß, Carsten

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

MA28
Mitglied
Bautechnischer Zeichner


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

Beiträge: 53
Registriert: 17.03.2003

W2k pro 5.0.2195 SP3;
AutoCAD 2002;
HP DesignJet 750c & 800

erstellt am: 07. Feb. 2007 17:55    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

Zitat:
Original erstellt von startrek:
einen boolean ausgerechnet mit i zu deklarieren ist nicht so dolle,
aber ansonsten kann man es so machen.

warum nicht mit i und wie sonst?

------------------
mfG
Gambrinus

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Carsten1210
Mitglied
staatl. geprüfter Holztechniker


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

Beiträge: 1360
Registriert: 24.07.2002

erstellt am: 07. Feb. 2007 18:05    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 MA28 10 Unities + Antwort hilfreich

Hi,

Die Variable i wird normalerweise für Aufzählungen bzw. fürs durchlaufen von Collections genutzt. So wie hier:

Sub Ch2_IterateLayer()
    ' Iterate through the collection
    On Error Resume Next

    Dim I As Integer
    Dim msg As String
    msg = ""
    For I = 0 To ThisDrawing.Layers.count - 1
        msg = msg + ThisDrawing.Layers.Item(I).Name + vbCrLf
    Next
    MsgBox msg
End Sub


Gruß, Carsten

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

startrek
Moderator
Architekt


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

Beiträge: 1361
Registriert: 13.02.2003

.

erstellt am: 07. Feb. 2007 18:16    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 MA28 10 Unities + Antwort hilfreich

Weil i sich eher als eine Art Usus für einen Zähler eingebürgert hat,
aber das auch nur für kleine 'aufdieSchnelleProgs'.
Booleans heissen bei mir 'flag', 'found' oder irgendsowas sinniges;-)

Generell lässt sich aber aus der Variablenbenennung eine Wissenschaft
für sich machen, also durchkonzipiert von Anfang bis Ende (bolVar, intVar, dblVar u.ä.),
Herkunft (Prozedur, Klasse, Eigenschaft etcpp), was bei richtig umfangreichen
Programmen auch Sinn macht.

Aber ich wollt Dich nicht versunsichern wegen des i, des passt/funktioniert schon so;-)

Gruss Nancy

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

marc.scherer
Ehrenmitglied V.I.P. h.c.
CAD-Administrator



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

Beiträge: 2494
Registriert: 02.11.2001

erstellt am: 07. Feb. 2007 18:33    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 MA28 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von startrek:
Theoretisch kannste dir aber das Schleifchen schenken und es sozusagen einfach mal 'draufankommen' lassen;-) ich denke so in der Richtung meinte auch Marc.

Na ja, ich meinte es schon ein wenig strukturierter ;-)
In etwa so was (auch gleich eine Demo Sub Function):
Code:

'Option Explicit
Sub testLayer()
    Dim Back As Boolean
    Back = GetLayer("Layer1")
End Sub

Public Function GetLayer(strLayer As String)
    Dim Layers As AcadLayers
    Dim Layer As AcadLayer
    Dim retval As Boolean
    'Dim strLayer As String
    Set Layers = ThisDrawing.Layers
    'strLayer = "Layer1"
   
    On Local Error Resume Next
   
    Set Layer = Layers.Item(strLayer)
    If TypeName(Layer) = "Nothing" Then
        MsgBox "Layer >" & strLayer & "< NICHT vorhanden"
        retval = False
    Else
        MsgBox "Layer >" & strLayer & "< ist VORHANDEN"
        retval = True
    End If
    GetLayer = retval
End Function



...

------------------
Ciao,
Marc
Mein AG sucht u.a. Architekten und Bauzeichner!
Mein alter AG sucht 'nen CADMIN

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

MA28
Mitglied
Bautechnischer Zeichner


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

Beiträge: 53
Registriert: 17.03.2003

W2k pro 5.0.2195 SP3;
AutoCAD 2002;
HP DesignJet 750c & 800

erstellt am: 07. Feb. 2007 18:39    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

werde auch diese Anmerkung über das "i" in mich aufnehmen!
auch werde ich es in meinem code berücksichtigen!

ich glaube ich werde es einfach coin nennen!!
warum? eine Münze hat auch nur zwei Seiten genau so wie boolean!! 

------------------
mfG
Gambrinus

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: 07. Feb. 2007 18:52    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 MA28 10 Unities + Antwort hilfreich

Hallo Gambrinus,

da will ich auch noch meinen Senf zum i abgeben 

Wenn du nur eine Funktion und ein Modul hast ist es vielleicht egal wo die Variable (oder wahr es doch eine Konstante) gilt. SInd es mal mehr ist auch noch interessant wo dir Variable gilt. Einen Typumwandlungsfehler gibt der Compiler ja aus und man kann den Fehler schnell beseitigen. Wenn du aber Variablen an der falschen STelle unbeabsichtigt veränderst kann das schlimmstenfalls nie auffallen bis jemand kommt und fragt warum dein Proggi immer wieder mal falsche Werte liefert.

Bei mir würde die Variable vlbo_Egalwie heissen.
VariableLokalBoolean
oder halt
VariableGobalBoolean wenn sie im ganzen Modul gilt.

Stelli

------------------
Warum lisp'eln wenn's auch anders geht.
www.ib-stelberg.de

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

startrek
Moderator
Architekt


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

Beiträge: 1361
Registriert: 13.02.2003

.

erstellt am: 10. Feb. 2007 00:21    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 MA28 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von marc.scherer:

Na ja, ich meinte es schon ein wenig strukturierter ;-)

*feix* .. ich denke Männer denken viel sensibler in Code's als Frauen.
[Glaube zumindest]
Für meinen Teil bin ich da ziemlich brutal rangegangen, oder halt minimalistischst,
aber du hast recht - dein Code ist ein gutes Beispiel für eine Standardfunction.

OT: Hatte mal die Frage mit Axel:
- Kann man rein am Code erkennen, ob er von einer Frau oder einem Mann stammt?
eine richtige Antwort drauf haben wir beide keine eine gefunden ...

lg Nancy

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Nepumuk
Mitglied
Entwicklungsleiter


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

Beiträge: 351
Registriert: 16.10.2004

erstellt am: 10. Feb. 2007 14:01    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 MA28 10 Unities + Antwort hilfreich

Hallo Nancy,

Code:
Kann man rein am Code erkennen, ob er von einer Frau oder einem Mann stammt?

Du erwartest jetzt hoffentlich keine "ehrliche" Antwort auf diese Frage. Wir Männer sind doch nicht lebensmüde.  

Frage an Boris Becker: Was ist der Unterschied zwischen ihnen und Steffi Graf?
Antwort von Boris: Ich spiele Tennis, Steffi spielt Damentennis.
------------------
Gruß
Nepumuk  

[Diese Nachricht wurde von Nepumuk am 10. Feb. 2007 editiert.]

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