Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  API: Wie ein face2 auswählen (select) ?

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 SOLIDWORKS
  
SolidWorks Kurs mit IHK-Zertifzierung , ein Kurs (bis zu 100% förderbar mit Bildungsgutschein)
Autor Thema:  API: Wie ein face2 auswählen (select) ? (3713 mal gelesen)
sebhad
Mitglied
Student


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

Beiträge: 20
Registriert: 04.05.2004

SolidWorks 2003
Visual C# .NET

erstellt am: 13. Okt. 2004 16:00    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 durchlaufe ein bel. Bauteil und speichere habe dann Zeiger zu einigen unterschiedlichen face2-Objekten, d.h. Flächen.

Nun meine Frage:

Wie kann ich später anhand einer face2-Referenz (diese kann ich unter C# ganz normal mit z.B. face.GetFaceId() verwenden) diese Fläche auswählen, so dass diese in SolidWorks 2003 grün angezeigt wird, als ob man sie direkt angeklickt hätte?

Vielen Dank für die Mühe,
Sebastian

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

u.clemens
Mitglied
Konstrukteur


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

Beiträge: 964
Registriert: 04.07.2000

engineer's law
o cheap
o fast
o good
check only two !

erstellt am: 13. Okt. 2004 16:53    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 sebhad 10 Unities + Antwort hilfreich

sollte doch mit
Face.Select true
funktionieren

------------------
mfg uc

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

sebhad
Mitglied
Student


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

Beiträge: 20
Registriert: 04.05.2004

SolidWorks 2003
Visual C# .NET

erstellt am: 13. Okt. 2004 17:13    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,

aber face sowie face2 hat keine Methode .select()

Das ist ja das Problem...
jetzt mache ich einen Versuch, es mit face2.GetClosestPointOn(x,y,z) zu versuchen. Auswahl dann mit ModelDoc2.SelectByID(...,x,y,z,...)

Mal sehen...

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

u.clemens
Mitglied
Konstrukteur


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

Beiträge: 964
Registriert: 04.07.2000

engineer's law
o cheap
o fast
o good
check only two !

erstellt am: 13. Okt. 2004 17:32    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 sebhad 10 Unities + Antwort hilfreich

... aber das Object Entity hat eine solche Methode.
Außerdem gibts ein Bsp. in der APIProgrammier- und Anwendungsschnittstelle (Application Programming Interface)-Hilfe "Select Component Face By Name Example (VB)" - das solltest Du Dir mal anschauen.

------------------
mfg uc

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

u.clemens
Mitglied
Konstrukteur


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

Beiträge: 964
Registriert: 04.07.2000

engineer's law
o cheap
o fast
o good
check only two !

erstellt am: 13. Okt. 2004 17:58    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 sebhad 10 Unities + Antwort hilfreich

hier noch einkleines Beispiel:

Sub main()
Set swApp = Application.SldWorks
Set Part = swApp.ActiveDoc
Set Feature = Part.FirstFeature
While Feature.IsBase = False
  Set Feature = Feature.GetNextFeature
Wend
FeatureName = Feature.Name
vFaces = Feature.GetFaces
FaceNum = Feature.GetFaceCount
Set Face = vFaces(0)
Face.Select True
End Sub


Zumindest bei mir wird damit die erste Fläche des Basisfeatures grün gefärbt ...

------------------
mfg uc

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

sebhad
Mitglied
Student


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

Beiträge: 20
Registriert: 04.05.2004

SolidWorks 2003
Visual C# .NET

erstellt am: 13. Okt. 2004 19:26    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

Erstmal vielen Dank!

Hab einfach nicht richtig hingesehen in der Hilfe und nicht erkannt, dass Face2 von Entity abgeleitet ist. Bin zwar schon geübt im lesen von VisualBasic-Code, muss aber genau hinschauen, weil man da ja für alles den Typ "object" verwenden kann. Das geht in C# nicht, ist sehr streng.

(In Visual C# ist es sehr wichtig welchen Objekttyp man verwendet, und komischerweise zeigt Face2 keine Methode Select() an, erst wenn man einen Typecast macht "(face as Entity).Select(false)")

# Jetzt gehts... #

Super Hilfe!

Respekt und Danke nochmal,

Sebastian

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

sebhad
Mitglied
Student


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

Beiträge: 20
Registriert: 04.05.2004

SolidWorks 2003
Visual C# .NET

erstellt am: 13. Okt. 2004 19:37    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

Erstmal vielen Dank!

Hab einfach nicht richtig hingesehen in der Hilfe und nicht erkannt, dass Face2 von Entity abgeleitet ist. Bin zwar schon geübt im lesen von VisualBasic-Code, muss aber genau hinschauen, weil man da ja für alles den Typ "object" verwenden kann. Das geht in C# nicht, ist sehr streng.

(In Visual C# ist es sehr wichtig welchen Objekttyp man verwendet, und komischerweise zeigt Face2 keine Methode Select() an, erst wenn man einen Typecast macht "(face as Entity).Select(false)")

# Jetzt gehts... #

Super Hilfe!

Respekt und Danke nochmal,

Sebastian

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

stucki
Mitglied
Ingenieur


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

Beiträge: 73
Registriert: 30.04.2004

erstellt am: 02. Nov. 2004 00:13    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 sebhad 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von sebhad:

Wie kann ich später anhand einer face2-Referenz (diese kann ich unter C# ganz normal mit z.B. face.GetFaceId() verwenden) diese Fläche auswählen, so dass diese in SolidWorks 2003 grün angezeigt wird, als ob man sie direkt angeklickt hätte?

Hallo Sebastian,
Habe selber das gleiche Problem. Nur fängt das Problem schon früher an. Bei GetFaceId() bekomme ich überall 0 zurück. In der APIProgrammier- und Anwendungsschnittstelle (Application Programming Interface) steht auch dass diese ID an Flächen von importierten Köpern vergeben wird. (This method gets the face ID of an imported body)

Wie also bekomme ich einen eindeutigen Bezeichner einer Fläche, welchen ich zu einem späteren Zeipunkt wieder verwenden kann um Beispielsweise diese Fläche über die APIProgrammier- und Anwendungsschnittstelle (Application Programming Interface) zu selektieren ?
(Ohne dass ich selber die Flächen alle bezeichnen muss)

liebe Grüsse
Tom

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

sebhad
Mitglied
Student


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

Beiträge: 20
Registriert: 04.05.2004

SolidWorks 2003
Visual C# .NET

erstellt am: 02. Nov. 2004 09:46    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 Tom,

Hast Du denn importierte Körper? (Ich weiß eigentlich gar nicht, wann man diese genau hat.)

Aber prinzipiell kannst Du es vermutlich genauso machen, wie ich:

Nämlich statt eine Fläche mit der ID (und dann ja wohl im endeffekt mit SelectByID() ) auszuwählen, kannst Du Dir einfach den Zeiger auf die Fläche in einer Variable merken (das Face2-Objekt ist der Zeiger) und später z.B. mit der von entity geerbten Methode .Select2() selektieren oder sonst was machen mit dem Face2-Objekt.

Das setzt natürlich voraus, dass Du vorher irgendwie an das Face2-Objekt gekommen bist, sei es mit dem SelectionManager, über feature.GetFaces() oder sonst wie.

Viele Grüße,
Sebastian

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

stucki
Mitglied
Ingenieur


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

Beiträge: 73
Registriert: 30.04.2004

erstellt am: 02. Nov. 2004 11:10    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 sebhad 10 Unities + Antwort hilfreich


Hallo Sebastian,
Importierte Körper sind welche, die in anderen CAD Systemen erzeugt wurden und dann beispielsweise als im IGES-Format in SW eingelesen werden.

Das mit den Zeigern funktioniert für meinen Bedarf nicht.
Ich muss für eine Fläche, Linie, Punkt, etc. ein eindeutiges Merkmal ermitteln, welches ich so in eine Datei abspeichern kann. Damit bei einer nächsten Session mit SW über dieses Merkmal das Element wieder ermittelt werden kann.

Kennst Du da was brauchbares ?

gruss tom

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

sebhad
Mitglied
Student


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

Beiträge: 20
Registriert: 04.05.2004

SolidWorks 2003
Visual C# .NET

erstellt am: 02. Nov. 2004 15:42    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 Tom,

was mir noch dazu einfällt:

Du kannst einer Fläche einen Namen geben, entweder in SWXSolidWorks/Flächeneigenschaften oder mit PartDoc::SetEntityName(). SetEntityName geht aber nur in Bauteil-Dokumenten.

In einer Baugruppe oder auch Bateil kannst Du dann alle Faces durchlaufen und mit ModelDoc2::GetEntityName() überprüfen, ob die aktuelle Fläche die Fläche mit dem vorher vergeben Namen ist.

Weiß Du, wie Du in Bauteilen oder Baugruppen alle Flächen ermittelst? (Body2::GetFirstFace() usw...)

Allerdings weiß ich jetzt nicht, ob das für Edges, Points usw. auch geht. Wäre aber möglich, wenn diese alle vom Typ Entity (geerbt) sind.

Vielleicht hilft Dir das ja weiter.

Viele Grüße,
Sebastian

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

stucki
Mitglied
Ingenieur


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

Beiträge: 73
Registriert: 30.04.2004

erstellt am: 11. Nov. 2004 22: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 sebhad 10 Unities + Antwort hilfreich

Hallo Sebastian,
Wenns Dich interessiert, ich löse das Problem der Identität eines Objektes nun auf folgende Weise:

Schau in der APIProgrammier- und Anwendungsschnittstelle (Application Programming Interface) Help unter : "persistent reference IDs" nach.
Da gibts die Methode:
persistId = ModelDocExtension.GetPersistReference ( dispObj)
dispObj ist dabei Beispielsweise die Referenz aif eine Fläche.

persistID ist ein byte-array, welches sich in einen Unicode-String umwandeln lässt. Dieser ist dann in einem File speicherbar und von da auch wieder abrufbar und kann zurückgewandelt werden in ein persistID

über persistID lässt sich dann das eigentliche Objekt wieder ermitteln:
*dispObj = ModelDocExtension.GetObjectByPersistReference(persistId)

gruss tom

PS: machst Du deine Diplomarbeit auf SolidWorks ?


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

sebhad
Mitglied
Student


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

Beiträge: 20
Registriert: 04.05.2004

SolidWorks 2003
Visual C# .NET

erstellt am: 15. Nov. 2004 13:15    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 Tom,

ja, ich mache meine Diplomarbeit mit SolidWorks 2003 und Visual C# .NET. Ich muss Kontruktionstools entwickeln, um apparatebauspezifische Baugruppen nach Norm zu erzeugen.

So, wie Du Dein Problem jetzt gelöst hast, wäre es unter SWXSolidWorks 2003 gar nicht möglich, da es diese Funktionen noch nicht in der APIProgrammier- und Anwendungsschnittstelle (Application Programming Interface) gibt.

Die größten Problem, die ich zuletzt zu lösen hatte, hatten den Grund, dass SWXSolidWorks z.B. folgendes macht:
Wenn ich in einer Baugruppe von einem Mate-Objekt, die damit verknüpften Features/Entities mit Mate::GetEntity() hole, zeigen diese nicht auf Features in der Baugruppe, sondern auf Features in dem Dokument, das als Komponente in die Baugruppe eingefügt wurde. Bis ich das entdeckt hatte...

Arbeitest Du mit der SolidWorks-APIProgrammier- und Anwendungsschnittstelle (Application Programming Interface) beruflich?

Viele Grüße,
Sebastian

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)2024 CAD.de | Impressum | Datenschutz