| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| |
| Zerspanungstreff mit SolidCAM bei der Hoffmann GmbH in Achim/Bremen, eine Veranstaltung am 14.11.2024
|
Autor
|
Thema: API: Enthält die Zeichnung einen bestimmten Block? (1209 mal gelesen)
|
Piet Mitglied Konstruktionsleiter & Konstrukteur
Beiträge: 661 Registriert: 20.11.2001 SWx 2021
|
erstellt am: 18. Mrz. 2013 16:37 <-- editieren / zitieren --> Unities abgeben:
Ich möchte mit einem Makro ermitteln, ob eine Zeichnung einen bestimmten Block enthält, und ob er verwendet wird. Anstatt alle Ansichten zu durchlaufen, ist meine Idee, im Featuremanager zu gucken, ob der Block gelistet ist, und ob er als verwendet gelistet ist (ausgegraut). Hintergrund: Das Makro erstellt PDFs von der Zeichnung, wenn der Block "preliminary" verwendet wird, soll an den Dateinamen auch ein "_preliminary" gehängt werden. Ich habe noch gar keine Idee, wie ich im Featuremanager nach einem Block und dessen Eigenschaften suchen kann, kann mir jemand weiterhelfen? Gruß, Piet Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bk.sc Ehrenmitglied V.I.P. h.c. Konstrukteur Sondermaschinenbau
Beiträge: 2795 Registriert: 18.07.2012 -Solid Works 2019 SP5 -Pro Engineer WF 3
|
erstellt am: 19. Mrz. 2013 10:40 <-- editieren / zitieren --> Unities abgeben: Nur für Piet
|
Piet Mitglied Konstruktionsleiter & Konstrukteur
Beiträge: 661 Registriert: 20.11.2001 SWx 2021
|
erstellt am: 19. Mrz. 2013 10:55 <-- editieren / zitieren --> Unities abgeben:
|
Christian_W Ehrenmitglied V.I.P. h.c. Konstrukteur (Dipl-Ing)
Beiträge: 3256 Registriert: 04.04.2001 CSWP 12/2015<P>SWX2021sp5 Win10/11 (SWX2016, SWX2012) proAlpha6.2e00/calinkV9 (Tactonworks) (Medusa7, NesCAD2010, solidEdge19)
|
erstellt am: 19. Mrz. 2013 17:01 <-- editieren / zitieren --> Unities abgeben: Nur für Piet
Hallo, wir haben so einen Block grundsätzlich drauf, der soll auf einem bestimmten Layer sein. Zur Freigabe wird der Layer automatisiert ausgeblendet, für neuen Index wieder eingeblendet. Unsere Abfrage lautet dann: ist der Layer sichtbar oder unsichtbar. (was nicht 100% korrekt ist und auch wieder andere Verwirrungen stiften kann) Und du musst auch ggf. über alle Blätter der Zeichnung gehen. Gruß, Christian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Christian_W Ehrenmitglied V.I.P. h.c. Konstrukteur (Dipl-Ing)
Beiträge: 3256 Registriert: 04.04.2001 CSWP 12/2015<P>SWX2021sp5 Win10/11 (SWX2016, SWX2012) proAlpha6.2e00/calinkV9 (Tactonworks) (Medusa7, NesCAD2010, solidEdge19)
|
erstellt am: 21. Mrz. 2013 16:06 <-- editieren / zitieren --> Unities abgeben: Nur für Piet
Hallo, habe jetzt folgendes gebaut:
Code: Function GetBlockDef(MyBlockname As String) As Object Dim i Dim vblockdef As Variant vblockdef = MyDoc.SketchManager.GetSketchBlockDefinitions i = 0 While i < UBound(vblockdef) If vblockdef(i).GetFeature.Name = MyBlockname Then Set GetBlockDef = vblockdef(i) ' hab ihn! Exit Function End If i = i + 1 Wend ' wenn nicht bleibt es bei nothing End Function
Wenns die Blockdefinition nicht gibt, kommt nothing zurück, ansonsten ein Objekt von dem man die Instances zählen kann etc also z.b.
Code: GetBlockDef("Block_Dich_suche_ich").GetInstanceCount
Vielleicht etwas simpel, und berücksichtigt auch nicht, ob der Block unter einem anderen Namen eingefügt bzw. umbenannt wurde. aber vielleicht kann jemand etwas draus machen Gruß, Christian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Christian_W Ehrenmitglied V.I.P. h.c. Konstrukteur (Dipl-Ing)
Beiträge: 3256 Registriert: 04.04.2001 CSWP 12/2015<P>SWX2021sp5 Win10/11 (SWX2016, SWX2012) proAlpha6.2e00/calinkV9 (Tactonworks) (Medusa7, NesCAD2010, solidEdge19)
|
erstellt am: 22. Mrz. 2013 10:44 <-- editieren / zitieren --> Unities abgeben: Nur für Piet
Hallo, gerade probier ich mal wieder... und da fügt er den Block (makesketchblockfromfile) doch beim 2. mal mit anderem Namen "Block1" ein. weiß jemand, an welcher Option das liegt? Gruß, Christian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Piet Mitglied Konstruktionsleiter & Konstrukteur
Beiträge: 661 Registriert: 20.11.2001 SWx 2021
|
erstellt am: 26. Mrz. 2013 16:07 <-- editieren / zitieren --> Unities abgeben:
Dank eurer Hilfe krieg ich raus, ob der Block da ist und verwendet wird, vielen Dank! Piet Hier mein Code: Dim bPreliminary As Boolean ' Sub SuchBlockPreliminary() Dim sPreliminaryBlockName As String sPreliminaryBlockName = "P:\ORGA\BLÖCKE\Nicht freigegeben (Serie).SLDBLK" 'nach diesem Block wird gesucht bPreliminary = False Set SwSketchMgr = Model.SketchManager vBlockDef = SwSketchMgr.GetSketchBlockDefinitions If Not IsEmpty(vBlockDef) Then 'wenn mindestens ein Block da ist For i = 0 To UBound(vBlockDef) 'durch alle Blöcke Set swBlockDef = vBlockDef(i) 'holt die Blockeigenschaften vBlockInst = swBlockDef.GetInstances ' >0, wenn der Block verwendet wird If sPreliminaryBlockName = swBlockDef.FileName Then 'Wenn es der gesuchte Block ist If Not IsEmpty(vBlockInst) Then 'wenn der Block verwendet wird bPreliminary = True End If End If Next i End If End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |