Autor
|
Thema: Easy Ü's (1402 mal gelesen)
|
DasDon Mitglied Konstruktuer
Beiträge: 169 Registriert: 25.07.2011 R18 SP2. WIN
|
erstellt am: 15. Mrz. 2013 08:44 <-- editieren / zitieren --> Unities abgeben:
Moin moin, ich versuche gerade einen AddNewExtract per Makro zu erzeugen, jedoch ohne erfolg. Bin schon am fluchen, da es eigentlich nicht schwer ist. Nun habe ich versucht, einen ganz einfachen Punkt zu erzeugen. geht nicht.# Das Script ist schon auf das minimale herunter reduziert. Der GeoSet wird erzeugt und benannt. also nur in der Zeile 7 (Set oPoint...) Kann mir jemand von euch sagen wo hier der Fehler ist? Ich finde ihn einfach nicht. Code: Sub CATMain() Dim GeoSet As HybridBody Dim oPoint As HybridShapePointCoord Set GeoBody = CATIA.ActiveDocument.Part.HybridBodies.Add() GeoBody.Name = "test" Set oPoint = CATIA.ActiveDocument.Part.HybridShapeFactory.AddNewPointCoord(0.0, 0.0, 0.0) End Sub
Im watch Fenster wird das ding erzeugt, jedoch ohne Parent. Ich bekomme auch keine Fehlermeldung. Ich sehe weder den Punkt noch den Extract. Linien Funtionieren auch nicht! Hilfe!!! Gruß, ein frustrierter Mann, DasDon Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RSchulz Moderator² Head of CAD, Content & Collaboration / IT-Manager
Beiträge: 5541 Registriert: 12.04.2007 @Work Lenovo P510 Xeon E5-1630v4 64GB DDR4 Quadro P2000 256GB PCIe SSD 512GB SSD SmarTeam V5-6 R2016 Sp04 CATIA V5-6 R2016 Sp05 E3.Series V2019 Altium Designer/Concord 19 Win 10 Pro x64
|
erstellt am: 15. Mrz. 2013 09:02 <-- editieren / zitieren --> Unities abgeben: Nur für DasDon
|
DasDon Mitglied Konstruktuer
Beiträge: 169 Registriert: 25.07.2011 R18 SP2. WIN
|
erstellt am: 15. Mrz. 2013 09:04 <-- editieren / zitieren --> Unities abgeben:
|
DasDon Mitglied Konstruktuer
Beiträge: 169 Registriert: 25.07.2011 R18 SP2. WIN
|
erstellt am: 26. Aug. 2014 08:42 <-- editieren / zitieren --> Unities abgeben:
Moin Moin, ich habe mal wieder ein Problem was eingenlich keins sein sollte. Ich erzeuge in JAVA einen CSV Datei mit eine Liste von Bauteilen die ich positionieren muss. Ich splitte dann die Zeilen der CSV Datei auf, hole mir die informationen und positioniere die Bauteile entsprechend der Werte. Geht alles super. Aber, ich muss die InstanceName auch umbenennen. Und das haut hier nicht hin... Ich habe schon etliche scripts geschrieben, mit denen die InstanceNames gelesen und umbenannt werden, aber hier haut es nicht hin und ich finde den Fehler nicht. . .. ...
Code: do until inStream.AtEndOfStream txtLine = inStream.ReadLine currentLineNr = currentLineNr +1 splitTxt = split(txtLine,";") if ubound(splitTxt) > 0 then item = splitTxt(0) path(0) = mainObjectPath & item instanceName = splitTxt(1) insertIn = splitTxt(2) 'coordinates = getCoods(splitTxt) coordinates(0) = Cdbl(splitTxt(3)) coordinates(1) = Cdbl(splitTxt(4)) coordinates(2) = Cdbl(splitTxt(5)) coordinates(3) = Cdbl(splitTxt(6)) coordinates(4) = Cdbl(splitTxt(7)) coordinates(5) = Cdbl(splitTxt(8)) coordinates(6) = Cdbl(splitTxt(9)) coordinates(7) = Cdbl(splitTxt(10)) coordinates(8) = Cdbl(splitTxt(11)) coordinates(9) = Cdbl(splitTxt(12)) coordinates(10) = Cdbl(splitTxt(13)) coordinates(11) = Cdbl(splitTxt(14)) 'only positions file, if found in library dim oParentProd As Product dim parentPrdInst As String dim found as boolean found = false If CATIA.FileSystem.FileExists(path(0)) Then 'check if insertIn elements exists for each prod in CATIA.ActiveDocument.Product.Products if prod.PartNumber = insertIn then found = true set oParentProd = prod parentPrdInst = prod.name end if next 'if not found create it if found = false then set oParentProd = CATIA.ActiveDocument.Product.Products.AddNewProduct ( insertIn ) parentPrdInst = oParentProd.name end if oParentProd.Products.AddComponentsFromFiles path, "All" set oItem = oParentProd.Products.Item(oParentProd.Products.Count) oItem.Position.SetComponents coordinates oItem.Name = Replace(oItem.Name, oItem.PartNumber, instanceName, vbTextCompare) else errMsg = errMsg + Chr(10) + "item in row:" + CStr(currentLineNr) + " not found in CATIAFilePath" End If path(0) = "" end if loop
in der Zeile oItem.Name = Replace(oItem.Name, oItem.PartNumber, instanceName, vbTextCompare) sollte es passieren, der Rückgabewert vom Replace ist korrekt und einen String. Ich gehe davon aus, das es relativ einfach ist, aber ich finde es nicht. Und nachdem ich solange drauf gestarrt habe, überlasse ich es jetzt euch... Mit freundlichen Grüßen, Dean ------------------ wer ist diese Catia und wo kann ich sie finden? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 26. Aug. 2014 11:50 <-- editieren / zitieren --> Unities abgeben: Nur für DasDon
Servus ggf gibt das Script einen Fehler aus, da es den Instance-Name schon in der Baugruppe gibt. (das trat zumindest in meinen Kurztest so auf) Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DasDon Mitglied Konstruktuer
Beiträge: 169 Registriert: 25.07.2011 R18 SP2. WIN
|
erstellt am: 29. Aug. 2014 12:44 <-- editieren / zitieren --> Unities abgeben:
Hallo Bernd, das dachte ich auch. aber selbst bei neuen Product und das einfügen von 1 Bauteil passiert nichts. Auch wenn ich
Code: oItem.Name = "test"
eingebe, passiert auch nichts... Komisch. ------------------ wer ist diese Catia und wo kann ich sie finden? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 29. Aug. 2014 13:16 <-- editieren / zitieren --> Unities abgeben: Nur für DasDon
Servus Bei mir funktioniert das so. Ggf kannst du erst alle Teile einfügen, und erst ganz am Schluss die Instancenames korrigieren (ist dann auch einfacher bei mehrfach verwendeten Teilen (Zähler). Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DasDon Mitglied Konstruktuer
Beiträge: 169 Registriert: 25.07.2011 R18 SP2. WIN
|
erstellt am: 02. Sep. 2014 08:07 <-- editieren / zitieren --> Unities abgeben:
Moin Bernd, aber das es auch bei einem Bauteil nicht geht ist doch komisch Benutzt du auch das CODE so wie es heir steht zum testen...wenn ja, dann liegt der Fehler bei mir komischerweise vorher im CODE... Gruß, Dean ------------------ wer ist diese Catia und wo kann ich sie finden? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 02. Sep. 2014 21:49 <-- editieren / zitieren --> Unities abgeben: Nur für DasDon
Servus Ich hab es nochmal mit deinem Code getestet.Ändere mal folgende Zeile: Code: Set oItem = oParentProd.ReferenceProduct.Products.item(oParentProd.Products.Count)
Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DasDon Mitglied Konstruktuer
Beiträge: 169 Registriert: 25.07.2011 R18 SP2. WIN
|
erstellt am: 03. Sep. 2014 08:06 <-- editieren / zitieren --> Unities abgeben:
Moin Bernd, super. Wie immer eine erstklassige hilfe. Das habe ich nicht gesehen und/oder bedacht, aber genau daran lag es. Vielen Dank für die hilfe. habe nun ein Dictionary, welches die instanceNames Unique hält, mit eingebaut. Gruß, Dean
Code:
'-------------------- 'POSITION PARTS dim txtLine as string dim item as string dim insertIn as string dim instanceName as string dim coordinates(11) dim path(0) as string dim oItem as Object dim splitTxt as Object 'dictionary to store elements instance name to assure no double name occurs dim dict as Object set dict = CreateObject("Scripting.Dictionary") do until inStream.AtEndOfStream txtLine = inStream.ReadLine currentLineNr = currentLineNr +1 splitTxt = split(txtLine,";") if ubound(splitTxt) > 0 then item = splitTxt(0) path(0) = mainObjectPath & item instanceName = splitTxt(1) insertIn = splitTxt(2) 'coordinates = getCoods(splitTxt) coordinates(0) = Cdbl(splitTxt(3)) coordinates(1) = Cdbl(splitTxt(4)) coordinates(2) = Cdbl(splitTxt(5)) coordinates(3) = Cdbl(splitTxt(6)) coordinates(4) = Cdbl(splitTxt(7)) coordinates(5) = Cdbl(splitTxt(8)) coordinates(6) = Cdbl(splitTxt(9)) coordinates(7) = Cdbl(splitTxt(10)) coordinates(8) = Cdbl(splitTxt(11)) coordinates(9) = Cdbl(splitTxt(12)) coordinates(10) = Cdbl(splitTxt(13)) coordinates(11) = Cdbl(splitTxt(14)) 'only positions file, if found in fileSystem dim oParentProd as Product dim prod as Product dim parentPrdInst as String dim found as boolean found = false If CATIA.FileSystem.FileExists(path(0)) Then 'check if insertIn elements exists for each prod in CATIA.ActiveDocument.Product.Products if prod.PartNumber = insertIn then found = true set oParentProd = prod parentPrdInst = prod.name end if next 'if not found create it if found = false then set oParentProd = CATIA.ActiveDocument.Product.Products.AddNewProduct ( insertIn ) parentPrdInst = oParentProd.name end if oParentProd.Products.AddComponentsFromFiles path, "All" Set oItem = oParentProd.ReferenceProduct.Products.item(oParentProd.Products.Count) oItem.Position.SetComponents coordinates If dict.Exists(instanceName) Then dict.Item(instanceName) = dict.Item(instanceName) +1 Else dict.Add instanceName, 1 End If oItem.Name = instanceName + "." + CStr(dict.Item(instanceName)) else errMsg = errMsg + Chr(10) + "item in row:" + CStr(currentLineNr) + " not found in CATIAFilePath" End If path(0) = "" end if loop set dict = nothing if Len(errMsg) > 0 then msgbox errMsg end if
------------------ wer ist diese Catia und wo kann ich sie finden? [Diese Nachricht wurde von DasDon am 03. Sep. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |