Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Pro ENGINEER
  weblink pfcModelItem -> pfcCurve

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 PTC CREO
Autor Thema:  weblink pfcModelItem -> pfcCurve (1511 mal gelesen)
supTom
Mitglied
CAD-Support


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

Beiträge: 42
Registriert: 19.02.2008

erstellt am: 08. Jun. 2010 08: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

Hallo zusammen,
wenn man nicht absolut fit ist in Klassen und Methoden, raucht einem bei Weblink bald der Kopf. Hoffentlich weiß einer mehr als ich:

Ich muß die Daten eines Kurvenzuges aus Linien und Radien auslesen.
Kein Problem, Anwender soll Kurve selektieren.
Damit bekomme ich ein Objekt der Klasse pfcFeature und kann viele Infos rausholen u.a. die ID. Mit GetItemById kann ich mir ein Objekt der Klasse pfcModellItem holen, was mir andere Informationen gibt, aber mir nicht weiterhilft. (zumindest auf den ersten Blick)
Was ich brauche ist ein Zugang zur Klasse pfcCompositeCurve (als Unterklasse von pfcCurve als Unterklasse von pfcModellItem) damit ich die einzelnen Teile der Kurve extrahieren und deren Daten auslesen kann.
Gibt es ein Verfahren wie ich die Klasse umwandeln kann?
Oder: wie greife ich auf Klassen und Methoden im Modul pfcGeometry zu wenn ich im Modul pfcModelItem bin.
Da ich noch mit Prozeduren und Funktionen aufgewachsen bin, tue ich mich noch etwas schwer mit Klassen und Methoden.

Danke für die Antworten 

------------------
nixblick

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

anagl
Ehrenmitglied V.I.P. h.c.
 


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

Beiträge: 4566
Registriert: 28.05.2001

CREO2 M140
PDMLink 10.2 M020
HW diverse
Das Schreiben bei CAD.de ist freiwillig und kein Muss !!!!!

erstellt am: 08. Jun. 2010 09: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 supTom 10 Unities + Antwort hilfreich

2 Denkansätze nicht verifiziert
1. Direkte Selektion der Kurve und nicht des Features
2. ListSubItems    z.B  var edge =sel_f.ListSubItems(pfcCreate ("pfcModelItemType").ITEM_EDGE);
HTH

------------------
Servus    
Alois

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

supTom
Mitglied
CAD-Support


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

Beiträge: 42
Registriert: 19.02.2008

erstellt am: 09. Jun. 2010 14:02    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 Alois für die schnelle Antwort.
Leider mußte ich gestern noch kurzfristig was dringendes anderes machen, deshalb komme ich erst heute dazu auszuprobieren und zu schreiben.

Zum Problem vorneweg:
Bei uns werden Leitungen konstruiert indem aus mehreren 3D-Punkten ein Kurvenzug aus Geraden und Kreisbögen generiert wird. Mit dem Kurvenzug als Leitkurve wird dann über ein Zug-KE ein Rohr generiert.
Ich muß die Daten der Punkte (kein Problem) sowie die Koordinaten der Anfangs- und Endpunkte der Linienstücke sowie die Kurvenradien in eine Tabelle eintragen.

zu. 1
Bei genauerem Hinsehen (ich habe die Selektion auch nur übernommen) bekomme ich ein pfcModelItemObjekt. Leider selektiere ich mit der Selektierungsoption Curve nur einen Teil des Kurvenzugs. Da ListParents mit meinem ModelItemObjekt nicht geht (braucht pfcFeatures) scanne ich alle Kurvenfeatures im Modell durch bis eines seiner Kinder die selektierte ID aufweist.

zu 2.
Da ich nur ein Kind des Kurvenzugs selektiere, funktioniert ListSubItems nicht. Zum einen weil es keine Kinder gibt und zum zweiten da ich die Methode nicht mit meinem pfcModelItemObjekt aufrufen kann. Somit bekomme ich auch mit ListParents immer eine Fehlermeldung.

Da ich zumindest über oben genanntes Verfahren die einzelnen IDs der Kurve und der Kurventeile habe, kann ich über GetItemById zumindest die pfcModelItemObjekte bekommen. Wie komme ich dann auf die Geometrie ?
(den Typ bekomme ich heraus aber danach die Methoden zB. der Klasse pfcPoint zu benutzen -> da verliesen sie ihn).

Für das Einarbeiten ins Pro/Blem und die Anregungen gibts zumindest 5 Punkte.

Gruß Thomas

------------------
nixblick

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

anagl
Ehrenmitglied V.I.P. h.c.
 


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

Beiträge: 4566
Registriert: 28.05.2001

CREO2 M140
PDMLink 10.2 M020
HW diverse
Das Schreiben bei CAD.de ist freiwillig und kein Muss !!!!!

erstellt am: 09. Jun. 2010 17: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 supTom 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von supTom:
Bei uns werden Leitungen konstruiert indem aus mehreren 3D-Punkten ein Kurvenzug aus Geraden und Kreisbögen generiert wird. Mit dem Kurvenzug als Leitkurve wird dann über ein Zug-KE ein Rohr generiert.
Ich muß die Daten der Punkte (kein Problem) sowie die Koordinaten der Anfangs- und Endpunkte der Linienstücke sowie die Kurvenradien in eine Tabelle eintragen.


Anderer Denkansatz Messen KE's erzeugen und die Ergebnisparameter in die Tabelle.

Zu deinem Weblink-Problem--> stelle mal die wesentlichen Teile deines CODES hier ein 

------------------
Servus    
Alois

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

supTom
Mitglied
CAD-Support


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

Beiträge: 42
Registriert: 19.02.2008

erstellt am: 10. Jun. 2010 13:06    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 Alois,
hier ist ein Teil des Codings:

zuerst wird ein Teil der Kurve selektiert,
dann wird die übergeordnete Kurve gesucht und gefunden
und dann verliesen sie ihn.


// Array initialisieren
var options = new Array();
var auswahl = void null;
options.push ("curve");

// jetzt kann nur eine Kurve selektiert werden.
// selectItems ist eigene (kopiert von Mr. Lewis) function
auswahl = selectItems(options,1);

// ausgewähltes ist eine Kurve (Kurvenelement)
var curvesel = auswahl.Item(0);

// und hat auch eine ID
var SelecId = curvesel.SelItem.Id

// alle Kurven durchscannen bis ID kommt
FeatAr = new pfcCreate("pfcFeatures");
FeatAr = solidMdl.ListFeaturesByType(false,pfcCreate ("pfcFeatureType").FEATTYPE_CURVE);

// heraussuchen welche ID die Kurvenelemente haben
for (i = 0; i < FeatAr.Count; i++)
{
FeatItem = FeatAr.Item(i);

OutString = ("Nummer = "+i+"\n");

OutString += ("Typ = "+FeatItem.FeatTypeName+"\n");
OutString += ("ID = "+FeatItem.Id+"\n");

// Lösung mit Subitems
FeatSubs = FeatItem.ListSubItems(pfcCreate ("pfcModelItemType").ITEM_CURVE);

// Kurve hat auch Subitems
OutString += ("Anzahl SubKinder = "+FeatSubs.Count+"\n");

FoundId = false;

// Durch alle Subitems
for (j = 0; j < FeatSubs.Count; j++)
{
FeatSub = FeatSubs.Item(j);
OutString += ("Kind "+j+" Id = "+FeatSub.Id+"\n");
if (FeatSub.Id == SelecId)
{
FoundId = true;
var ParCurve = FeatItem;
}
}

OutString += ("\ngefunden = "+FoundId);
        alert (OutString);
}

if (FoundId ==true)
{
// Gesamtkurvenzug wurde gefunden
// einzelne Teile werden durchgescannt und die Daten extrahiert

// wir haben ein Kurvenzugobjekt: ParCurve
// und die ID: ParCurve.Id

// ab hier gehts nicht weiter

ParElem = new pfcCreate("pfcCurves");
ParElem = ParCurve.ListElements();

ParCurvTyp = new pfcCreate("pfcCurveType");
ParCurvTyp = ParCurve.GetCurveType();

        // beiden Stimmt nicht
} else
{
alert ("Kein übergeordneter Kurvenzug gefunden");
}

Nachdem ich das Objekt des Kurvenzugs und seine ID habe möchte ich mit ListElements (Methode der Klasse pfcCompositeCurve)oder mit anderen Methode bis auf die einzelnen Linienstücke und Bögen herunterkommen um deren Definition auslesen zu können.

Vielleicht wird es jetzt klarer wo es bei mir hängt.

Gruß Thomas

------------------
nixblick

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

anagl
Ehrenmitglied V.I.P. h.c.
 


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

Beiträge: 4566
Registriert: 28.05.2001

CREO2 M140
PDMLink 10.2 M020
HW diverse
Das Schreiben bei CAD.de ist freiwillig und kein Muss !!!!!

erstellt am: 10. Jun. 2010 14:14    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 supTom 10 Unities + Antwort hilfreich


pfcGeomCurve.png

 
Vielleicht hilft mein Code-Schnipsel weiter (Ermitteln eines Ansatzpunktes für eine Notiz  an eine Bohrung in der Zeichnung)
Eigentlich müsstest es ähnlich gehen
Code:
var edge =sel_f.ListSubItems(pfcCreate ("pfcModelItemType").ITEM_EDGE);
var edge_y_max=0.0
var edge_nr=0
var edge_t_nr=0
  for (var k= 0; k < edge.Count; k ++)
                 {
                 var curvetype=edge.Item(k).GetCurveDescriptor ();
//Kreis
                 if (curvetype.GetCurveType()==4)
                 {
//Mittenpunkt auf der Kante
                     var curveXYZData= edge.Item(k).Eval3DData(0.5);
                     var centerpoint= curveXYZData.Point
//Zeichnungstranformation
                     centerpoint = viewTransf.TransformPoint (centerpoint);
                     if  (centerpoint.Item(1)>edge_y_max)
                         {
                           edge_y_max=centerpoint.Item(1);
                           edge_nr=k;
                           edge_t_nr=0.5

                         }

                    var curveXYZData= edge.Item(k).Eval3DData(1.0);
                     var centerpoint= curveXYZData.Point
                     centerpoint = viewTransf.TransformPoint (centerpoint);
                     if  (centerpoint.Item(1)>edge_y_max)
                         {
                           edge_y_max=centerpoint.Item(1);
                           edge_nr=k;
                           edge_t_nr=1.0;

                         }

                   }
                 }


HTH

------------------
Servus       
Alois

[Diese Nachricht wurde von anagl am 10. Jun. 2010 editiert.]

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

supTom
Mitglied
CAD-Support


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

Beiträge: 42
Registriert: 19.02.2008

erstellt am: 11. Jun. 2010 08:55    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

Hi Alois,

das war DER Tip. Danke dafür und jede Menge Us auch.
(Brauchst du für das Skript und die Drops)

Und für alle die es interessiert, so gehts weiter mit dem Auslesen:

Kurventeil wurde selektiert und Subitems bestimmt.

for (j = 0; j < FeatSubs.Count; j++)
{
        FeatSub = FeatSubs.Item(j);
OutString += ("Kind "+j+" Id = "+FeatSub.Id+"\n");

var CurveTypeDesc = FeatSub.GetCurveDescriptor();
CurveType = CurveTypeDesc.GetCurveType();
switch (CurveType)
{
case (pfcCreate("pfcCurveType").CURVE_COMPOSITE):
        OutString += ("Objekt ist CURVE_COMPOSITE\n");
break;
case (pfcCreate("pfcCurveType").CURVE_POINT):
OutString += ("Objekt ist CURVE_POINT\n");
break;
case (pfcCreate("pfcCurveType").CURVE_LINE):
OutString += ("Objekt ist CURVE_LINE\n");
// geht das auch weiter?
EndPt1 = FeatSub.End1;
PosX = EndPt1.Item(0);
PosY = EndPt1.Item(1);
PosZ = EndPt1.Item(2);
OutString += ("Linie "+j+" Ende1 = "+PosX+", "+PosY+", "+PosZ+"\n");
EndPt2 = CurveTypeDesc.End2;
PosX = EndPt2.Item(0);
PosY = EndPt2.Item(1);
PosZ = EndPt2.Item(2);
OutString += ("Linie "+j+" Ende1 = "+PosX+", "+PosY+", "+PosZ+"\n");
break;
case (pfcCreate("pfcCurveType").CURVE_ARC):
OutString += ("Objekt ist CURVE_ARC\n");
// gehts noch weiter?
CenterPt = CurveTypeDesc.Center;
PosX = CenterPt.Item(0);
PosY = CenterPt.Item(1);
PosZ = CenterPt.Item(2);
OutString += ("Bogen "+j+" Mitte = "+PosX+", "+PosY+", "+PosZ+"\n");
OutString += ("Bogen "+j+" Radius = "+CurveTypeDesc.Radius+"\n");
OutString += ("Bogen "+j+" Startang = "+CurveTypeDesc.StartAngle+", Endang = "+CurveTypeDesc.EndAngle+"\n");
break;
case (pfcCreate("pfcCurveType").CURVE_CIRCLE):
OutString += ("Objekt ist CURVE_CIRCLE\n");
break;
default:
OutString += ("Objekt ist etwas anderes\n");
break;
}

Wenn der Descriptor klar ist (nochmals Danke dafür) kann der Typ des Kurventeils bestimmt werden. Über die von der CurveDescriptor abgeleiteten Klasse (je nach Typ) können die geometrischen Werte einfach ausgelesen werden.

Der Rest ist bei mir nur noch Rechnerei und das Eintragen in eine Tabelle.

Ich hoffe, ich kann hier auch mal eine Hilfe reinstellen anstatt immer nur zu profitieren.

Gruß an alle Weblink Spezis von
Thomas

------------------
nixblick

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