Ik zou graag een heel eenvoudige macro willen maken met een lijn met de beoordeling ervan:

Ik maak de opname en wanneer ik de macro start, stopt deze bij de dimensie waar het zwevende venster me vraagt een waarde te typen; Ik had graag gezien dat de beoordeling van 50 zichzelf had ingesteld. Maar zelfs als ik een waarde invoer, gaat het programma overgaan tot debuggen omdat het wacht tot het de dimensie van 50 kan plaatsen die al is ingesteld.

Iedereen weet hoe te gaan te gaan om de dimensie van een schets automatisch?
1 like
Hallo
U moet de optie deactiveren voer de dimensie in
1 like
In de code moet je aan het begin toevoegen: boolstatus = swApp.SetUserPreferenceToggle(swInputDimValOnCreate, False) en aan het einde van de code boolstatus = swApp.SetUserPreferenceToggle(swInputDimValOnCreate, True)
1 like
@Cyril.f
Ik probeer het, maar ik krijg een foutmelding:

We zouden twee of drie controles moeten doen, aan de ene kant is swapp gedeclareerd als Sldworks.Sldworks (het kan het probleem oplossen in plaats van gedeclareerd als een object).
Ontbreken er dan geen referenties in de referenties?
1 like
Ja, swapp wordt gedeclareerd als SldWorks.sldworks
Ik ben aan het drogen, kun je alle code door het in te voegen met de optie om code van het forum in te voegen, zodat ik het terug kan zien.
Controleer anders in ieder geval de referenties (Tools> referenties) als de volgende referenties zijn ingeschakeld:
Solidworks 201X Bibliotheek met uitbreidbaarheid
Sldworks 201X Type Bibliotheek
Solidworks 201X Bibliotheek met constant type
Solidworks 201X Commando's type bibliotheek
Van mijn kant ben ik op 2016 en geen problemen.
Sorry, hier is de eerste code:
Dim swApp als SldWorks.SldWorks
Dim deel als SldWorks.ModelDoc2
Dim boolstatus als Booleaanse
Dim skSegment als object
MyDisplayDim als object dimmen
MyDimension dimmen als object
Sub hoofd()
Stel swApp = Toepassing.SldWorks in
Deel instellen = swApp.ActiveDoc
Deel.SketchManager.InsertSketch Waar
boolstatus = Part.Extension.SelectByID2("Gezichtsplan", "VLIEGTUIG", -6.71223122593068E-02, 0.049524099883856, 0, Onwaar, 0, Niets, 0)
Stel skSegment = Part.SketchManager.CreateLine in(0#, 0#, 0#, 0.052237, 0#, 0#)
Deel.ClearSelection2 Waar
boolstatus = Part.Extension.SelectByID2("Lijn1", "SCHETSSEGMENT", 3.01706029555596E-02, 3.7613240418119E-04, 0, Onwaar, 0, Niets, 0)
Stel myDisplayDim in = Deel.AddDimension2(2.91675832110764E-02, -1.54214285714286E-02, 0)
Deel.ClearSelection2 Waar
Stel myDimension = Part.Parameter("D1@Esquisse1") in
myDimension.SystemValue = 0.05
Deel.ClearSelection2 Waar
Deel.SketchManager.InsertSketch Waar
Einde Sub
Het staat op SolidWorks 2016
Hier zijn de referenties:

Hier is de tweede bewerkte code:
Dim swApp als SldWorks.SldWorks
Dim deel als SldWorks.ModelDoc2
Dim boolstatus als Booleaanse
Dim skSegment als object
MyDisplayDim als object dimmen
MyDimension dimmen als object
Sub hoofd()
Stel swApp = Toepassing.SldWorks in
Deel instellen = swApp.ActiveDoc
boolstatus = swApp.SetUserPreferenceToggle(swInputDimValOnCreate, onwaar)
Deel.SketchManager.InsertSketch Waar
boolstatus = Part.Extension.SelectByID2("Gezichtsplan", "VLIEGTUIG", -6.71223122593068E-02, 0.049524099883856, 0, Onwaar, 0, Niets, 0)
Stel skSegment = Part.SketchManager.CreateLine in(0#, 0#, 0#, 0.052237, 0#, 0#)
boolstatus = Part.Extension.SelectByID2("Lijn1", "SCHETSSEGMENT", 3.01706029555596E-02, 3.7613240418119E-04, 0, Onwaar, 0, Niets, 0)
Stel myDisplayDim in = Deel.AddDimension2(2.91675832110764E-02, -1.54214285714286E-02, 0)
Stel myDimension = Part.Parameter("D1@Esquisse1") in
myDimension.SystemValue = 0.05
Deel.SketchManager.InsertSketch Waar
boolstatus = swApp.SetUserPreferenceToggle(swInputDimValOnCreate, True)
Einde Sub
Hallo
Vervang "Dim swApp As SldWorks.SldWorks" door "Dim swApp As Object", dit zou moeten werken.
Vriendelijke groeten
1 like
En wees ook voorzichtig, wanneer u de SW-parameters aanraakt, verdient het de voorkeur om de waarde van de parameter te lezen en, als u deze voor een behandeling moet wijzigen, deze aan het einde van de behandeling terug te brengen naar de oorspronkelijke staat:
Dim value As Boolean
value = swApp.GetUserPreferenceToggle(swUserPreferenceToggle_e.swInputDimValOnCreate)
If value = True Then
boolstatus = swApp.SetUserPreferenceToggle(swUserPreferenceToggle_e.swInputDimValOnCreate, False)
End If
###### Là tu mets ton traitement #######
boolstatus = swApp.SetUserPreferenceToggle(swUserPreferenceToggle_e.swInputDimValOnCreate, value)
Vriendelijke groeten
3 likes
Inderdaad d.roger, ik heb niet gespecificeerd omdat zijn sw was ingesteld om de kansen in te voeren.
In ieder geval werkt een set op False en vervolgens True (ik heb het bewust vereenvoudigd), zelfs als de optie al is aangevinkt of uitgeschakeld (ik heb het opzettelijk vereenvoudigd).
Voor de swApp als object, ik heb het met beide geprobeerd (sldworks.sldworks en object) op 2016 werkt het voor mij. Het voordeel van de tweede is om automatisch aan te vullen bij het invoeren van de code en een overzicht van wat er wordt verwacht bij elke functieaanroep zonder dat je de hulp de hele tijd open hoeft te houden ;)
Edit: Eindelijk, werkt met Object, met SldWorks.SldWorks genereert het een compilatiefout, ik denk dat het gisteren het Object-type in het geheugen had bewaard.
1 like
Er is geen manier om de dimensie-invoer niet te doen, alleen door een argument van de functie, in plaats van ongedaan te maken en vervolgens de algemene parameters terug te plaatsen...??
Opmerking: als het bestand al een schets bevat, is degene die door de macro is gemaakt niet "schets1" maar met een ander nummer... (??)
1 like
@ Olivier42 : Hallo, het is niet mogelijk om een argument te gebruiken omdat het een algemene parameter is. Er is voor zover ik weet niets in de API's dat je in staat stelt om deze parameters via een argument te overschrijven.
Dit wordt bevestigd door de Help van de SW-API: Voordat u deze methode aanroept , wilt u mogelijk ISldWorks::SetUserPreferenceToggle aanroepen met swUserPreferenceToggle_e.swInputDimValOnCreate om het dialoogvenster te onderdrukken waarin de gebruiker de dimensiewaarde kan typen.
1 like
Hallo
Het algemene idee is om complete schetsen te maken die gedimensioneerd zijn door te programmeren en er vervolgens natuurlijk volumefuncties op te zetten. Maar het is belangrijk dat er kanten in de schets zitten. Vandaar de test met een enkele lijn en de kansen daarvoor.
Ik zal proberen de aanpassingen in een tijdje.
Bedankt voor je hulp!
Nog steeds niet.
Hier is de nieuwe code
Dim swApp als object
Deel dimmen als object
Dim boolstatus als Booleaanse
Dimwaarde als Booleaanse waarde
Sub hoofd()
Stel swApp = Toepassing.SldWorks in
Deel instellen = swApp.ActiveDoc
waarde = swApp.GetUserPreferenceToggle(swUserPreferenceToggle_e.swInputDimValOnCreate)
Als waarde = Waar Dan
boolstatus = swApp.SetUserPreferenceToggle(swUserPreferenceToggle_e.swInputDimValOnCreate, onwaar)
Einde als
boolstatus = Part.Extension.SelectByID2("Gezichtsvlak", "VLIEGTUIG", 0, 0, 0, Onwaar, 0, Niets, 0)
Deel.SketchManager.InsertSketch Waar
Dim skSegment als object
Set skSegment = Part.SketchManager.CreateLine(0#, 0#, 0#, 0.051925, 0#, 0#)
boolstatus = Part.Extension.SelectByID2("Lijn1", "SCHETSSEGMENT", 1.97416243507319E-02, -1.20689440993789E-03, 0, Onwaar, 0, Niets, 0)
MyDisplayDim als object dimmen
Stel myDisplayDim in = Deel.AddDimension2(2.59101957793034E-02, -1.59578260869565E-02, 0)
MyDimension dimmen als object
Stel myDimension = Part.Parameter("D1@Esquisse1") in
myDimension.SystemValue = 0.05
Deel.SketchManager.InsertSketch Waar
boolstatus = swApp.SetUserPreferenceToggle(swUserPreferenceToggle_e.swInputDimValOnCreate, waarde)
Einde Sub
Het komt vast te zitten op dezelfde plek
