API - Hoekige runtime-dimensie - Fout 424

Hoi allemaal

Ik probeer via de API's een hoekige uitvoeringsdimensie op een Europarlementariër te creëren. Ik selecteer mijn entiteiten, maar als ik bij de regel AddAngularRunningDim kom, krijg ik een 424-fout. Het meest verontrustende is dat het voorbeeld van Dassault ook deze fout bevat. Ik heb de verwijzingen wel toegevoegd in Visual Basic.

Waar kan deze fout vandaan komen?

 

Dank u voor uw hulp.

Mickaël

Waarschijnlijk ben je vergeten een object toe te wijzen, kunnen we je code zien?

1 like

Het is een code in aanbouw, bedankt voor uw toegeeflijkheid. ^^

Ik heb alleen het voorbeeld genomen door het aan te passen aan mijn model,

Het voorbeeld is hier beschikbaar:

http://help.solidworks.com/2016/English/api/sldworksapi/Set_Properties_of_Angular_Running_Dimension_Example_VB.htm

 

 

Dim swApp als SldWorks.SldWorks
Dim deel als SldWorks.ModelDoc2
Dim swmodel As SldWorks.ModelDocExtension
Zon selmgr As SldWorks.SelectionMgr
Dim dispdim As SldWorks.DisplayDimension
Dim boolstatus als Booleaanse
Dim errstatus zo lang

Optie Expliciete

Sub hoofd()

    Stel swApp = Toepassing.SldWorks in
    Deel instellen = swApp.ActiveDoc
    Set swmodel = Deel.Uitbreiding
    
    boolstatus = Part.ActivateView("Lay-out View1")
    boolstatus = swmodel. SelectByID2("Line5@Esquisse3D4@Fonds-GRC-tekening 3@Vue 1", "EXTSKETCHSEGMENT", 0.567145629669376, 0.556256162693586, 0, True, 0, Nothing, 0)
    boolstatus = swmodel. SelectByID2("Line5@Esquisse3D5@Fonds-GRC-Drawing 3@Vue", "EXTSKETCHSEGMENT", 0.159796832575413, 0.661760850386628, 0, True, 0, Nothing, 0)
   
    

    Stel dispdim = swmodel in. AddAngularRunningDim(True, False, True, 0.56, 0.64, 0, errstatus)
    Part.Extension.ReJogRunningDimension
    Deel.Extensie.AlignRunningDimension
    

    Deel.SetPickMode

Einde Sub

 

In uw geval hier zal SolidWorks op zoek gaan naar het schetsstuk Line5@Esquisse3D4@Fonds-GRC-3@Vue van de tekening1 Nu, van de ene tekening, of zelfs van het ene aanzicht naar het andere, zal het niet eerlijk zijn.

Als je zeker weet dat het het juiste is, vertel het me dan nog eens.

 

Ps: Op welke regel heb je de fout?

1 like

Ik heb de fout op de lijn: Set dispdim = swmodel. AddAngularRunningDim(True, False, True, 0.56, 0.64, 0, errstatus)

Ik weet niet zeker of ik het juiste element heb genomen, maar mijn doel is om het einde van deze regel te krijgen om er het midden van mijn hoekdimensie van te maken, dan selecteer ik de volgende lijn en start ik de dimensie met deze selecties. 

Het is bij de lijst dat het verknoeit, dus ik zeg tegen mezelf dat de herstelde elementen hun rol niet goed vervullen.

Wat ik me eigenlijk afvraag is of de positie van de selecties (in X, Y en Z) en de beoordeling (LocX, LocY en LocZ) correct zijn, maar a priori de retval van de AddAngularRunningDim een waarde van 0 retourneert, het is dat het de kansen niet kan creëren. 

Moet ik in dit geval de coördinaten van elke rij die ik opnieuw wil selecteren ophalen in de SelectByID2?

Wat de LocX, Y en Z betreft, zie ik niet echt waar ze mee overeenkomen, is het de positie van de "klik" of de positie van de waarde 0°?

Ik zal het onderwerp ter sprake brengen, heeft iemand een oplossing?

Hallo

Probeer de instellingen van de functie (Waar en Onwaar) te wijzigen om te zien wat er gebeurt.

Vriendelijke groeten.

Hallo

Hier is de code van het voorbeeld aangepast en functioneel (maar in C#, te vertalen):

ModelDoc2 Deel = standaard(ModelDoc2);
bool boolstatus = onwaar;
int intstatus;
object obj;

Deel = ((ModelDoc2)(Program.swapp. ActiveDoc));

boolstatus = Deel.Uitbreiding. SelectByID2("", "EDGE", 0.163726736787323, 0.199115091463415, 0.00479999999999993197, true, 0, null, 0);
boolstatus = Deel.Uitbreiding. SelectByID2("", "EDGE", 0.220795425811714, 0.179644597560976, 0.004799999999881, true, 0, null, 0);

obj = Deel.Uitbreiding. AddAngularRunningDim(onwaar, waar, waar, 0.154288188900673, 0.0794194886913027, 0, uit intstatus);

Deel.Uitbreiding. ReJogRunningDimension();
Deel.Uitbreiding. AlignRunningDimension();

Deel.SetPickMode();

 

Probeer in jouw geval de variabele "dispdim" als een "object" te zetten en niet als een "DisplayDimension".

Vriendelijke groeten

Ik heb geprobeerd de waar en onwaar (alle mogelijke combinaties) van de functie AddAngularRunningDim te wijzigen, het werkt in de sjabloon, maar de fout 424 verschijnt nog steeds op deze regel. Deze eigenschappen beheren alleen het type afmeting (lijn naar middelpunt, boogplot van de hoek, enz.)

 

Ik heb ook geprobeerd de dispdim-verklaring in Object te vervangen. Het werkt ook niet.

 

Nog andere ideeën? 

Hallo

Ik heb je code gisteravond geprobeerd en ik heb ook dezelfde fout.

Ik heb ook geprobeerd een macro op te nemen van het toevoegen van dit type kust en hier gebruikt sw deze functie niet, maar AddDimension2().

Probeer het uit op een prototypemodel en je zou je code moeten hebben.

Als u in de functie SelectByID2() de naam van de eerste variabele invult, hoeft u X, Y en Z niet in te vullen. Hij vindt de entiteit zonder zijn positie.

Vriendelijke groeten.

Bedankt voor het SelectbyID2-ding, je moet overal 0 zetten om de gewenste entiteit te knippen. Het werkt perfect.

Aan de andere kant had ik de recorder ook getest en kwam ik uit op dezelfde code met de AddDimension2, helaas krijg ik door 2 lijnen te selecteren wel een afmeting maar het blijft een eenvoudige hoekafmeting zonder de 0° die voor mij essentieel is in ons werk als ketelmaker, vandaar het belang (sinds de versie van 2014) van de hoekige uitvoeringsafmetingen. 

Ik kan begrijpen hoe deze code werkt (declaratie van de basisentiteit, dan de secundaire entiteiten, dan weergave van de 0° dimensie op de LocX, LocY en LocZ  positie, en tenslotte de volgende), maar deze fout, 424, is een echt mysterie.

Zit er geen fout in de API-verwijzingen? (Je weet maar nooit en als hun voorbeeld bevat ook deze fout...)

Hallo

Met behulp van een C#-programma is het volkomen duidelijk dat er een castingprobleem is tussen het object van het type 'System.Object[]' en het object van het type 'SolidWorks.Interop.sldworks.DisplayDimension'. Zodra de wijziging aan dit probleem is aangebracht, werkt alles normaal.

Ik weet niet genoeg over VBA om u te vertellen dat het probleem hetzelfde is, maar ik kan aannemen dat ja, ik laat VBA-specialisten u op dit punt antwoorden.

Vriendelijke groeten


capture.png

Er is inderdaad een probleem met de API. Ik heb een ticket geopend bij Solidworks, die hetzelfde probleem heeft gedetecteerd 

Ik neem contact met u op voor de rest, een correctie kan worden aangebracht op het volgende Service Pack.

Bedankt

Hier is de correctie die door Dassault is toegepast. Nu werkt dit voorbeeld perfect met het model van de adv. tutorial (keukenmachine)

'----------------------------------------------------------------------------
' Randvoorwaarden:
' 1. Open public_documents\tutorial\advdrawings\foodprocessor.slddrw.
' 2. Open een onmiddellijk venster.
'
' Postvoorwaarden:
' 1. De opgegeven hoekige loopmaat wordt in de tekening ingevoegd.
' 2. Inspecteer het venster Onmiddellijk.
'
' OPMERKING: Omdat het model elders wordt gebruikt, dient u de wijzigingen niet op te slaan.
' ---------------------------------------------------------------------------
Dim swApp als SldWorks.SldWorks
Dim deel als SldWorks.ModelDoc2
Dim PartExt als SldWorks.ModelDocExtension
Zon selmgr As SldWorks.SelectionMgr
Dim dispdim As SldWorks.DisplayDimension
Dim swDispDim als SldWorks.DisplayDimension
Dim vdim als variant
Dim boolstatus als Booleaanse
Dim errstatus zo lang
Zon i Zo lang

Optie Expliciete

Sub hoofd()

    Stel swApp = Toepassing.SldWorks in
    Deel instellen = swApp.ActiveDoc
    Stel PartExt = Deel.Uitbreiding in
    

    boolstatus = Part.ActivateView("Tekening View1")
    boolstatus = Part.Extension.SelectByID2("", "HOEKPUNT", 0.17648799570697, 0.195948476524618, 4.79999999998881E-03, Waar, 0, Niets, 0)
    boolstatus = Part.Extension.SelectByID2("", "EDGE", 0.270641278567064, 0.202920893989561, 4.7999999999993197E-03, True, 0, Nothing, 0)
    boolstatus = Part.Extension.SelectByID2("", "EDGE", 0.238383279638647, 0.257816085148446, -3.99999999999592E-04, True, 0, Niets, 0)
    boolstatus = Part.Extension.SelectByID2("", "EDGE", 0.154059738580153, 0.26234352359454, 6.00000000247292E-04, True, 0, Nothing, 0)
    boolstatus = Part.Extension.SelectByID2("", "EDGE", 0.104823845478885, 0.213673560299033, 6.000000000019918E-04, True, 0, Nothing, 0)
    boolstatus = Part.Extension.SelectByID2("", "EDGE", 0.152361949162868, 0.163871737392003, 6.000000000019918E-04, True, 0, Nothing, 0)
    
    vdim = PartExt.AddAngularRunningDim(True, True, True, 0.154288188900673, 7.94194886913027E-02, 0, errstatus)
    Deel.SetPickMode
    
    Voor i = 0 Naar UBound(vdim)
        Dispdim instellen = vdim(i)
        Part.Extension.ReJogRunningDimension
        Deel.Extensie.AlignRunningDimension
        
        Debug.Print "Weergave geketende hoekafmetingen? " & dispdim. DisplayAsChain
        Debug.Print "De hoekafmetingen bidirectioneel uitvoeren? " & dispdim. Bidirectioneel uitvoeren
        Debug.Print "Verlenglijnen verlengen vanuit het midden van de hoekige lopende dimensie? " & dispdim. ExtensionLineExtendsFromCenterOfSet
        Debug.Print "Worden verlenglijnen gejogd? " & dispdim. Joggen
        Debug.Print "Extensielijnstijl hetzelfde als aanhaallijnstijl? " & dispdim. ExtensionLineSameAsLeaderStyle
        Debug.Print "Extensieregel maakt gebruik van documentinstellingen? " & dispdim. ExtensionLineUseDocumentDisplay
        

    Volgend

Einde Sub

 

Als ik het goed begrijp, kwam het probleem voort uit het feit dat de functie elke keer op hetzelfde element liep, vandaar het voorstel om een variabele en een lus op de elementen te declareren. 

 

Heb ik gelijk?

 

Hallo

Wat is er veranderd:

'----------------------------------------------------------------------------
' Randvoorwaarden:
' 1. Open public_documents\tutorial\advdrawings\foodprocessor.slddrw.
' 2. Open een onmiddellijk venster.
'
' Postvoorwaarden:
' 1. De opgegeven hoekige loopmaat wordt in de tekening ingevoegd.
' 2. Inspecteer het venster Onmiddellijk.
'
' OPMERKING: Omdat het model elders wordt gebruikt, dient u de wijzigingen niet op te slaan.
' ---------------------------------------------------------------------------
Dim swApp als SldWorks.SldWorks
Dim deel als SldWorks.ModelDoc2
Dim PartExt als SldWorks.ModelDocExtension
Zon selmgr As SldWorks.SelectionMgr
Dim dispdim As SldWorks.DisplayDimension
Dim swDispDim als SldWorks.DisplayDimension
Dim vdim als variant
Dim boolstatus als Booleaanse
Dim errstatus zo lang
Zon i Zo lang

Optie Expliciete

Sub hoofd()

    Stel swApp = Toepassing.SldWorks in
    Deel instellen = swApp.ActiveDoc
    Stel PartExt = Deel.Uitbreiding in
    

    boolstatus = Part.ActivateView("Tekening View1")
    boolstatus = Part.Extension.SelectByID2("", "HOEKPUNT", 0.17648799570697, 0.195948476524618, 4.79999999998881E-03, Waar, 0, Niets, 0)
    boolstatus = Part.Extension.SelectByID2("", "EDGE", 0.270641278567064, 0.202920893989561, 4.7999999999993197E-03, True, 0, Nothing, 0)
    boolstatus = Part.Extension.SelectByID2("", "EDGE", 0.238383279638647, 0.257816085148446, -3.99999999999592E-04, True, 0, Niets, 0)
    boolstatus = Part.Extension.SelectByID2("", "EDGE", 0.154059738580153, 0.26234352359454, 6.00000000247292E-04, True, 0, Nothing, 0)
    boolstatus = Part.Extension.SelectByID2("", "EDGE", 0.104823845478885, 0.213673560299033, 6.000000000019918E-04, True, 0, Nothing, 0)
    boolstatus = Part.Extension.SelectByID2("", "EDGE", 0.152361949162868, 0.163871737392003, 6.000000000019918E-04, True, 0, Nothing, 0)
    
    vdim = PartExt.AddAngularRunningDim(True, True, True, 0.154288188900673, 7.94194886913027E-02, 0, errstatus)
    Deel.SetPickMode
    
    Voor i = 0 Naar UBound(vdim)
        Dispdim instellen = vdim(i)
        Part.Extension.ReJogRunningDimension
        Deel.Extensie.AlignRunningDimension
        
        Debug.Print "Weergave geketende hoekafmetingen? " & dispdim. DisplayAsChain
        Debug.Print "De hoekafmetingen bidirectioneel uitvoeren? " & dispdim. Bidirectioneel uitvoeren
        Debug.Print "Verlenglijnen verlengen vanuit het midden van de hoekige lopende dimensie? " & dispdim. ExtensionLineExtendsFromCenterOfSet
        Debug.Print "Worden verlenglijnen gejogd? " & dispdim. Joggen
        Debug.Print "Extensielijnstijl hetzelfde als aanhaallijnstijl? " & dispdim. ExtensionLineSameAsLeaderStyle
        Debug.Print "Extensieregel maakt gebruik van documentinstellingen? " & dispdim. ExtensionLineUseDocumentDisplay

        

    Volgend

Einde Sub

Vetgedrukt:

Er was een castingprobleem in de retourwaarde  van de functie AddAngularRunningDim() en swDispDim.

Overigens retourneert AddAngularRunningDim() een Array(of DisplayDimension) die vba niet naar Object kon casten.

Cursief gedrukt is het slechts een lus om de eigenschappen van de gemaakte dimensies weer te geven.

Vriendelijke groeten.

1 like

Hallo

Goed om te weten, een generiek "object" in C# is dus een "Variant" in VBA.

Vriendelijke groeten

Goedenavond

Ik denk het wel. Het is verdacht, maar ja ...

Vriendelijke groeten