| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| |
| Konfigurieren, dokumentieren & Kosten optimieren - Produktdokumentation zur Angebotserstellung mit DraftSight |
Autor
|
Thema: api zu langsam beim selektieren von features (1362 mal gelesen)
|
ulix Mitglied Produktionsingenieur
Beiträge: 68 Registriert: 22.01.2003 SWX 2004 Office Educ.
|
erstellt am: 18. Okt. 2004 17:15 <-- editieren / zitieren --> Unities abgeben:
hallo, ich habe hier folgendes codeschnipsel, dass mir alle bohrungen mit einem maximalradius selektiert ElseIf swFeatTypeName = swTnHoleWzd Then If check_hole.Value = 1 Then Set swFeatData = swFeat.GetDefinition nRadius = swFeatData.Diameter nMinRadius = inp_hole.Text / 1000 If nRadius <= nMinRadius Then bRet = swFeat.Select(True) End If End If das problem ist nun, dass das ziemlich (extrem...) langsam ist. kann man das nicht beschleunigen? ich vermute mal, dass nicht das skript der flaschenhals sondern SWX beim "grafischen" anzeigen der selektion ist. gibt es keine moeglichkeit, die selektion nur auf skriptseite zu machen (z.b. alle betroffenen features in ein array laden, ohne dies auch grafisch anzuzeigen?). leider bin ich immer noch SWX API anfaenger... ebenso arbeite ich mich erst gerade in vb ein. gruss, daniel
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
PASCAM Mitglied Diplom Informatiker
Beiträge: 67 Registriert: 25.11.2002
|
erstellt am: 20. Okt. 2004 07:53 <-- editieren / zitieren --> Unities abgeben: Nur für ulix
Hallo Daniel, Frage hierzu: Ist das Beispiel aus VBA in SWX oder VB6? Was heisst langsam? Wieviel Bohrungen gilt es zu selektieren? Gruss, Ralph ------------------ PASCAM Ralph Müller Softwareentwicklung Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ulix Mitglied Produktionsingenieur
Beiträge: 68 Registriert: 22.01.2003 SWX 2004 Office Educ.
|
erstellt am: 20. Okt. 2004 10:04 <-- editieren / zitieren --> Unities abgeben:
salü ralph, vb6. zu langsam heisst: wenn ich dasselbe mit intelligent auswaehlen (bzw. suchen/modifizieren/auswaehlen) mache findet er mir die bohrungen viel schneller (mit diesem skript geht es ca. pro bohrung 0,5 sek). klar bei wenigen bohrungen ist das kein problem, aber das vollstaendige skript sucht mit dem gleichen algorithmus auch nach anderen features. bevor du dich fragst, weshalb ich nicht einfach die SWX funktion nehme: das skript fuehrt noch mehr operationen durch und soviel ich weiss, kann ich nicht auf dieses "intelligent auswaehlen" per API zugreifen, daher muss ich mir meinen eigenen weg suchen um die features zu selektieren. ich hoffe ich konnte das einigermassen verständlich formulieren. gruess, daniel Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
PASCAM Mitglied Diplom Informatiker
Beiträge: 67 Registriert: 25.11.2002
|
erstellt am: 20. Okt. 2004 10:38 <-- editieren / zitieren --> Unities abgeben: Nur für ulix
Hallo Daniel, jetzt kommen wir der Sache auf die Spur. Du nimmst also VB6 und wie ich vermnute laeuft Dein Programm nicht als AddIn, sondern extern (als EXE oder in der VB6-IDE). Und darin liegt das Problem (es liegt nicht an SWX, aondern am Systemaufbau!): Wenn Du aus Deiner VB6-EXE einen Methode/Property eines SWX-Objektes aufrufst, muss das alles "gemarshalled" werden, d.h. das Betriebssystem muss die Parameter kapseln, Speicher ueber Processgrenzen hinweg kopieren, in SWX wieder entkapseln, den Systemaufruf machen und wieder das ganez wieder zurueck. Puh. Ich hab die Erfahrung gemacht, dass das ca. 5-30 mal langsammer ist, als wenn der identische VB6-Code als AddIn in SWX als DLL laeuft. Uebrigens mit C++ holst Du nochmals so Faktor 2-3 heraus. An die Performance der SWX-Funktion kommst nicht ran, da die natuerlich ganz anders auf die Daten zugreifen koennen. Nutze auch solche Methoden wie SetBlockingState etc., das kann auch noch was aus machen. Gruss, Ralph ------------------ PASCAM Ralph Müller Softwareentwicklung Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ulix Mitglied Produktionsingenieur
Beiträge: 68 Registriert: 22.01.2003 SWX 2004 Office Educ.
|
erstellt am: 21. Okt. 2004 13:40 <-- editieren / zitieren --> Unities abgeben:
sali, recht hast du!!! hab mir mal kurz angeschaut, wie ich das hinkriege mit dem erstellen der dll, soweit reichen meine kenntnisse (noch) nicht. hast du ev. einen tip wie ich aus einem vb6 code eine dll hinkriege. habe gesehen im SWX helpfile gesehen, dass es tools gibt fuer die addin erstellung, leider nicht fuer vb6. hast du damit erfahrung? gruess daniel Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Axel Mitglied
Beiträge: 169 Registriert: 05.09.2000
|
erstellt am: 22. Okt. 2004 10:28 <-- editieren / zitieren --> Unities abgeben: Nur für ulix
Moin Daniel, du kannst deinen Code auch einfach in ein VBA-Makro kopieren. Das läuft etwa genauso schnell wie eine ActiveX-DLL. Was du noch machen kannst ist natürlich ein Object-Array zu füllen und anschließend alle in einer neuen Schleife selektieren lassen. Das dürfte aber keine Beschleunigung bringen, dafür aber deinen Speicher platzen lassen. Axel ------------------ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
PASCAM Mitglied Diplom Informatiker
Beiträge: 67 Registriert: 25.11.2002
|
erstellt am: 22. Okt. 2004 14:58 <-- editieren / zitieren --> Unities abgeben: Nur für ulix
Hallo Daniel, Anbei ein Beispielproejkt in VB6. Die Klasse Class1 linkt sich in SWX ein. Einfach Projekt kompilieren und Dll in SWX ziehen (Drag&Drop), damit erfolgt die Registrierung automatisch. Viel Spass, Ralph ------------------ PASCAM Ralph Müller Softwareentwicklung Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ulix Mitglied Produktionsingenieur
Beiträge: 68 Registriert: 22.01.2003 SWX 2004 Office Educ.
|
erstellt am: 22. Okt. 2004 15:21 <-- editieren / zitieren --> Unities abgeben:
|