• このフォーラムは、www.cad3d.it/forum1 - イタリアのデザインコミュニティの機械翻訳です。いくつかの用語は正しく翻訳されていません。

自動作成 ipartのメンバーおよび輸出ステップ

3olo

Guest
salve,
ho realizzato delle parti ipart da cui genererò qualche migliaio di componenti ognuna.
questo non é un problema, già fatto ,il problema é che dovrei realizzare lo step di ognuna per poterlo condividere con altri modellatori cad.
attualmente metto tutte le parti generate in un assieme e a fatica mi sono costruito una regola ilogic che mi converte tutti i componenti di questo assieme in formato step.
chiedo cortesemente se qualcuno é in grado di scrivere una regola che mi generi tutti i membri dell'ipart e che poi in automatico esporti in step ognuna di questi membri generati.
io sono poco ferrato di vb e non ci riesco.
mi fareste un gran piacere.
grazie mille in anticipo
 
sei fortunato perchè uno degli esempi nella guida alla programmazione fa quello che chiedi
(help ina alto a dx > risorse della community > guida alla programmazione > indice, cerca ipart > ipartfactory object, in fondo alla pagina i link agli esempi.
se hai già rudimenti ilogic non dovresti aver problemi

Code:
public sub addipartoccurrence()
    ' open the factory document invisible.
    dim ofactorydoc as partdocument
    set ofactorydoc = thisapplication.documents.open("c:\temp\ipartfactory.ipt", false)

    ' set a reference to the component definition.
    dim ocompdef as partcomponentdefinition
    set ocompdef = ofactorydoc.componentdefinition

    ' make sure we have an ipart factory.
    if ocompdef.isipartfactory = false then
        msgbox "chosen document is not a factory.", vbexclamation
        exit sub
    end if

    ' set a reference to the factory.
    dim oipartfactory as ipartfactory
    set oipartfactory = ocompdef.ipartfactory

    ' get the number of rows in the factory.
    dim inumrows as integer
    inumrows = oipartfactory.tablerows.count

    ' create a new assembly document
    dim odoc as assemblydocument
    set odoc = thisapplication.documents.add(kassemblydocumentobject, , true)

    dim ooccs as componentoccurrences
    set ooccs = odoc.componentdefinition.occurrences

    dim opos as matrix
    set opos = thisapplication.transientgeometry.creatematrix

    dim ostep as double
    ostep = 0#
    dim irow as long

    ' add an occurrence for each member in the factory.
    for irow = 1 to inumrows

        ostep = ostep + 10

        ' add a translation along x axis
        opos.settranslation thisapplication.transientgeometry.createvector(ostep, ostep, 0)

        dim oocc as componentoccurrence
        set oocc = ooccs.addipartmember("c:\temp\ipartfactory.ipt ", opos, irow)
    next
end sub

o meglio, non fa esattamente quello che vorresti ma con la tua regola già fatta sei a posto... questo programma mette in un nuovo assieme tutti gli elementi di una ipart
 
grandissimo! grazie mille! in realtà sono ancora molto neanderthal con ilogic e uso questa regola per esportare tutte le parti di un assieme in iges ,l'ho trovata su un forum che non mi ricordo al momento,ma funziona alla perfezione

'define the open document
dim opendoc as document
opendoc = thisdoc.document

'define folder to create files in
ofolder = "c:\temp\igs files"

'check for the destination folder and create it if it does not exist
if not system.io.directory.exists(ofolder) then
system.io.directory.createdirectory(ofolder)
end if

'look at all of the files referenced in the open document
dim docfile as document
for each docfile in opendoc.allreferenceddocuments
'format file name
dim fnamepos as long
'postion of last back slash
fnamepos = instrrev(docfile.fullfilename, "\", -1)
dim docfname as string
'file name with extension
docfname = right(docfile.fullfilename, len(docfile.fullfilename) - fnamepos)
'file name without extension
shortname = left(docfname, len(docfname) -4)

' get the iges translator add-in.
dim oigestranslator as translatoraddin
oigestranslator = thisapplication.applicationaddins.itembyid _
("{90af7f44-0c01-11d5-8e83-0010b541cd80}")
dim ocontext as translationcontext
ocontext = thisapplication.transientobjects.createtranslationcontext
dim ooptions as namevaluemap
ooptions = thisapplication.transientobjects.createnamevaluemap
if oigestranslator.hassavecopyasoptions(docfile, ocontext, ooptions) then
' set geometry type for wireframe.
' 0 = surfaces, 1 = solids, 2 = wireframe
'ooptions.value("geometrytype") = 1
' to set other translator values:
' ooptions.value("solidfacetype") = n
' 0 = nurbs, 1 = analytic
' ooptions.value("surfacetype") = n
' 0 = 143(bounded), 1 = 144(trimmed)
ocontext.type = iomechanismenum.kfilebrowseiomechanism
dim odata as datamedium
odata = thisapplication.transientobjects.createdatamedium
'set file path for igs file
odata.filename = ofolder & "\" & shortname & ".igs"
oigestranslator.savecopyas(docfile, ocontext, ooptions, odata)
end if
next


secondo te basta che lo ce la aggiungo sotto nella stessa regola che hai postato tu per fare quello che chiedo? al momento mi esporta in iges, ma se volessi esportare in step come potrei fare?non mi piace molto iges perché sono files più pesanti di quelli in formato step. ti ringrazio ancora
 
unito in fretta un paio di esempi, mi pare funzioni...

Code:
public sub addipartoccurrence()
    ' open the factory document invisible.
    dim ofactorydoc as partdocument
    set ofactorydoc = thisapplication.documents.open("w:\commesse\aia\15030_modifica zona lavatrici\assieme2.c02.ipt", false)

    ' set a reference to the component definition.
    dim ocompdef as partcomponentdefinition
    set ocompdef = ofactorydoc.componentdefinition

    ' make sure we have an ipart factory.
    if ocompdef.isipartfactory = false then
        msgbox "chosen document is not a factory.", vbexclamation
        exit sub
    end if

    ' set a reference to the factory.
    dim oipartfactory as ipartfactory
    set oipartfactory = ocompdef.ipartfactory

    ' get the number of rows in the factory.
    dim inumrows as integer
    inumrows = oipartfactory.tablerows.count

    ' create a new assembly document
    dim odoc as assemblydocument
    set odoc = thisapplication.documents.add(kassemblydocumentobject, , true)

    dim ooccs as componentoccurrences
    set ooccs = odoc.componentdefinition.occurrences

    dim opos as matrix
    set opos = thisapplication.transientgeometry.creatematrix

    dim ostep as double
    ostep = 0#
    dim irow as long

    ' add an occurrence for each member in the factory.
    for irow = 1 to inumrows

        ostep = ostep + 10

        ' add a translation along x axis
        opos.settranslation thisapplication.transientgeometry.createvector(ostep, ostep, 0)

        dim oocc as componentoccurrence
        set oocc = ooccs.addipartmember("w:\commesse\aia\15030_modifica zona lavatrici\assieme2.c02.ipt", opos, irow)
        
    next
    
    odoc.save
    
    dim orefdoc as document
    for each orefdoc in odoc.referenceddocuments
       call exporttostep(orefdoc)
    next
        
    
end sub

public sub exporttostep(odoc as document)
    
    dim exportpath as string
    exportpath = "c:\stp\"

    ' get the step translator add-in.
    dim osteptranslator as translatoraddin
    set osteptranslator = thisapplication.applicationaddins.itembyid("{90af7f40-0c01-11d5-8e83-0010b541cd80}")

    if osteptranslator is nothing then
        msgbox "could not access step translator."
        exit sub
    end if

    dim ocontext as translationcontext
    set ocontext = thisapplication.transientobjects.createtranslationcontext
    dim ooptions as namevaluemap
    set ooptions = thisapplication.transientobjects.createnamevaluemap
    if osteptranslator.hassavecopyasoptions(thisapplication.activedocument, ocontext, ooptions) then
        ' set application protocol.
        ' 2 = ap 203 - configuration controlled design
        ' 3 = ap 214 - automotive design
        ooptions.value("applicationprotocoltype") = 3

        ' other options...
        'ooptions.value("author") = ""
        'ooptions.value("authorization") = ""
        'ooptions.value("description") = ""
        'ooptions.value("organization") = ""

        ocontext.type = kfilebrowseiomechanism

        dim odata as datamedium
        set odata = thisapplication.transientobjects.createdatamedium
        

        'format file name
        dim fnamepos as long
        'postion of last back slash
        fnamepos = instrrev(odoc.fullfilename, "\", -1)
        dim docfname as string
        'file name with extension
        docfname = strings.right(odoc.fullfilename, len(odoc.fullfilename) - fnamepos)
        'file name without extension
        dim shortname as string
        shortname = strings.left(docfname, len(docfname) - 4)

        odata.filename = exportpath & shortname & ".stp"

        call osteptranslator.savecopyas(odoc, ocontext, ooptions, odata)
    end if
end sub
 
grazie mille,gentilissimo,appena sono in ufficio lo provo e poi ti faccio sapere. grazie mille ancora per l'aiuto
 
buongiorno,l'ho provata,ma prima inventor mi ha dato un messaggio che tutte le istruzioni sub e function devono essere posizionati dopo sub main(), allora l'ho rinominata sub main.
quando l'ho riavviata inventor mi ha dato il messaggio che le istruzioni let e set non sono più supportate.... boh! dove sb sbaglio? io creo la regola dal menu ilogic di inventor e poi la faccio partire,devo farla girare in qualche altro modo?
 
non era una regola ilogic ma un programma vba (che è compatibile con ilogic); dai messaggi che hai penso tu possa semplicemente provare a rimuovere le istruzione set (sono prima di assegnazioni di variabili, tipo "set opippo = ...")
 
grazie mille, ma sono riuscito a farla girare usando l'editor integrato in inventor. va come una scheggia. grazie ancora
 
vi faccio i complimenti per l'utilizzo della programmazione. comunque sotto gli strumenti di inventor (dal menu start) c'è programmazione operazioni.
tra le operazioni pianificate puoi usare "converti file", poi selezioni gli ipt di partenza e come file di arrivo lo step. poi dai il via e fa tutto lui.
ciao
 
ciao, il problema é che l' ipt é uno solo, ma i membri di tale ipt sono migliaia, essendo un ipart. convertendo quel file lì non me ne faccio niente, é tutti i suoi membri che bisogna generare e convertire contemporaneamente. la macro pubblicata sopra fa proprio quello
 
ciao, il problema é che l' ipt é uno solo, ma i membri di tale ipt sono migliaia, essendo un ipart. convertendo quel file lì non me ne faccio niente, é tutti i suoi membri che bisogna generare e convertire contemporaneamente. la macro pubblicata sopra fa proprio quello

apri l'ipt ed apri sul browser l'elenco delle ipart (non entrare nella finestra di modifica ma visualizza semplicemente i membri sul nodo del browser). poi selezioni tutti i membri > tasto dx > genera file. ti ritrovi tutti gli ipt nella sottocartella che si crea sotto l'ipt base. poi in automatico fai gli step di quella cartella.
 
sono due strade percorribili ,ma la macro fa tutto in colpo solo

infatti la mia non era una critica e vi ho fatto i complimenti.
semplicemente ho aggiunto un secondo modo manuale per chi non è programmatore e chissà che girando tra le possibilità delle operazioni pianificate qualcuno non trovi li la risposta già fatta al suo problema.
 
ci mancherebbe! grazie! tra l'altro pianifica operazioni lo uso per convertire gruppi di tavole solitamente, non ci avevo pensato che poteva tornare utile anche per le esportazioni! può tornare molto utile il tuo spunto,così magari uno che ha tanti ipt da convertire può fare tutto così. granzie mille,ogni spunto é più che ben accetto. grazie ancora
 
riapro il thread perchè vorrei chiedere aiuto per fare una piccola miglioria alla macro:attualmente tale macro genera tutti i membri dell'ipart poi crea un assieme,mette tutti i membri generati in tale assieme, si ferma chiedendoti dove salvare tale assieme e con che nome,poi genera tutti gli step dei membri. volevo chiedere se qualcuno è in grado di fare salvare in automatico l'assieme settandone un nome predefinito ,così basta lanciare la macro e lui si arrangia da inizio a fine senza bloccarsi.
vi ringrazio molto
 
こんにちは3eolo、あなたはあなたがそれをvbaエディタを介して動作する方法を教えてください? ?
プログラムをアップロードする場所のイメージがいくつかあります。 私はそれがvbaエディタを介して働いたことを書いたので、3eoloを指示しました
しかし、誰が私を失望させ、受け入れる方法を知っている

お問い合わせ

インターネットからこの小さなプログラムをロードしようとしました1616566763493.pngしかし、私は間違っている
ilogic の負荷が 3elo で引用された同じエラーを私に与えた場合
「おはようやくやってみましたが、最初に発明家は、サブメイン()の後にすべてのサブと関数の指示が置くべきメッセージを与えてくれました。その後、サブメインの名前を変更しました。」
 
その小さなプログラムは、すべてのIPTを周囲のシートに変換する必要があります
 
日本語版で動作します。
Code:
パブリックサブ createmtest()
アセンブリドキュメントとして asmdoc
asmdoc = thisapplication.activedocument の設定

occ を componentoccurrence として薄暗くして下さい
asmdoc.componentdefinition.occurrencesの各occのために
パートドキュメントをpartdocumentとして
設定したpartdoc = occ.definition.document

' 部分の文書を目に見えるようにします。
partdoc.views.add ディレクティブ

' シートメタルタイプに変換します。
partdoc.subtype = "{9c464203-9bae-11d3-8bad-0060b0ce6bb4}"

シートメタルコンポンデンプションとしてsmdefを薄暗くして下さい
smdef = partdoc.componentdefinition を設定する

' 部分を折ります。 フラットパターン環境を有効にします。
'smdef.unfold (ho tolto) は、

'フラットパターン環境を終了します。
'smdef.flatpattern.exitedit(ホットトルト)

ドキュメントを閉じて保存します。 これはビューを閉じるが、
' アセンブリがまだ参照しているので、実際に開いたまま。
コールpartdoc.close(true)
次へ
エンドサブ
厚さのokを置く方法を知っています。 vba マクロが説明したように ilogic ルールを使用しようとすると:
 

Forum statistics

Threads
46,674
Messages
380,976
Members
2
Latest member
loop80
このフォーラムは、www.cad3d.it/forum1 - イタリアのデザインコミュニティの機械翻訳です。いくつかの用語は正しく翻訳されていません。

Members online

No members online now.
Back
Top