CaesarXXI
Guest
Au revoir à tous,
J'ai besoin d'aide avec une règle logique, je ne suis pas un expert et ce code est fait en faisant des copies de colle prises sur le net et en allant un peu intuition.
le résultat final que je voudrais, c'est que lorsque j'enregistre, automatiquement, je porte le modèle plat en dwg dans un dossier spécifique (qui est créé avec la règle) à la fois lors de la sauvegarde du fichier dans la feuille d'environnement et dans l'environnement avec la commande modifca (sans rouvrir le dossier).
J'ai créé 3 règles à l'intérieur du fichier de feuille, le premier "master" s'active après avoir enregistré le fichier avec le déclencheur d'événement; cette règle devrait vérifier s'ils sont dans la feuille ou ensemble de l'environnement, puis charger la règle combinée pour exporter le dwg. probablement vous pouvez tout faire avec une seule règle, mais pendant mes tentatives c'est le résultat le plus proche de mes attentes.
Tout fonctionne bien et comme je le voudrais avec la feuille, mais si j'essaie de changer avec l'axième je reçois une erreur et ne sauvegarde pas les nouvelles géométries.
le message d'erreur est ceci:

règle principale:
Regola per lamiera:
règle pour ensemble:
Quelqu'un peut me dire une solution ? Je vous remercie.
J'ai besoin d'aide avec une règle logique, je ne suis pas un expert et ce code est fait en faisant des copies de colle prises sur le net et en allant un peu intuition.
le résultat final que je voudrais, c'est que lorsque j'enregistre, automatiquement, je porte le modèle plat en dwg dans un dossier spécifique (qui est créé avec la règle) à la fois lors de la sauvegarde du fichier dans la feuille d'environnement et dans l'environnement avec la commande modifca (sans rouvrir le dossier).
J'ai créé 3 règles à l'intérieur du fichier de feuille, le premier "master" s'active après avoir enregistré le fichier avec le déclencheur d'événement; cette règle devrait vérifier s'ils sont dans la feuille ou ensemble de l'environnement, puis charger la règle combinée pour exporter le dwg. probablement vous pouvez tout faire avec une seule règle, mais pendant mes tentatives c'est le résultat le plus proche de mes attentes.
Tout fonctionne bien et comme je le voudrais avec la feuille, mais si j'essaie de changer avec l'axième je reçois une erreur et ne sauvegarde pas les nouvelles géométries.
le message d'erreur est ceci:


Code:
Maître
dim odoc comme document = cedoc.document
si odoc.documenttype = inventeur.documenttypeenum.kpartdocumentobject et odoc.subtype = "{9c464203-9bae-11d3-8bad-0060b0ce6bb4}" alors
si le type de cette demande. activeeditobject est un croquis alors
messagebox.show("vous avez un croquis actif dans un fichier partiel.", "arrêter le croquis")
Autre
ilogicvb.runrule("salva_modellopiatto")
fin si
Fichier de montage
sinon si odoc.documenttype = inventeur.documenttypeenum.kassemblydocumentobject puis
si odoc.componentdefinition.isiassemblyfactory alors
messagebox.show("c'est une iassemblyfactory", "i va s'arrêter")
retour
sinon si odoc.componentdefinition.isiassemblymember alors
messagebox.show("c'est un membre iassembly", "i va s'arrêter")
retour
fin si
si le type de cette demande. activeeditobject est un croquis alors
messagebox.show("vous avez un croquis actif dans un fichier de montage.", "arrêtez le croquis")
Autre
ilogicvb.runrule("salva_modellopiatto_01")
fin si
fin si
Code:
'salva_modellopiatto
rusure = boîte de message.show( _
"Salva dwg dal modello piatto." _
& vblf & "premere yes per continuare". _
& vblf & "premere no per abortire". _
& vblf & "attenzione il cambio di spessore deve essere gestito a mano.", "ilogic - elabora dwg file ",messageboxbuttons.yesno)
si rusure = vbno alors
retour
fin si
opath = cedoc.path
currentstyle = feuillet metal.getactivestyle()
codice_regola = droite(style actuel, 10)
num_part=iproperties.value("projet", "numéro de partie")
codiceinizio = gauche(num_part, 3)
'specifica la cartella di destinazione per il dwg
ofolder = thisdoc.path & "\" & "laserdwg" & "\" & codiceinizio & "_" & codice_regola
'controlla se la cartella esiste, oppure la crea
si pas system.io.directory.exists(ofolder) alors
system.io.directory.createdirectory(ofolder)
fin si
'-inizio-- questa parte funzona solo per la parte lamiera e non in modifica da Assieme
dim odoc = cette application.document actif
dim ocompdef en tant que composant de tôledéfinition = rien
si odoc.documenttype = documenttypeenum.kassemblydocumentobjet puis
dim assemdoc comme document de montage = odoc
'dim odoc = cette application.documents.open(iptpathname, false)
ocompdef = assemdoc.componentdefinition.sheetmetalcomponentdefinition
sinon odoc.documenttype = documenttypeenum.kpartdocumentobjet puis
dim partdoc comme document partiel = odoc
ocompdef = partdoc.componentdefinition'.sheetmetalcomponentdefinition
fin si
«controlla se esiste un modello piatto; altrimenti lo crea
si ocompdef.has flatpattern = false alors
ocompdef.unfold
Autre
ocompdef.flatpattern.edit
fin si
'-fine-- questa parte funzona solo per la parte lamiera e non in modifica da assieme
'-inizio-- solo per lamiera
«controlla se esiste un modello piatto; altrimenti lo crea
'dim odoc comme document
'odoc = cette demande.document actif
'dim ocompdef en tant que composant de tôle
'ocompdef = définition de la composante odoc.
'si ocompdef.a flatpattern = false alors
'ocompdef.unfold
'else
'ocompdef.flatpattern.edit
'finir si
'-fine-- solo par lamiera
'settaggio dwg
dim optionlist comme liste(de chaîne) = nouvelle liste(de chaîne)()
optionlist.add("acadversion=2004")
optionlist.add("outerprofilelayer=0")
optionlist.add("interiorprofileslayer=0")
Dim sout comme chaîne
Dim spath comme ficelle
sout = "plat pattern dwg?acadversion=2004&outerprofilelayer=iv_interior_profiles" _
+ "&invisiblelayers=iv_tangent;iv_feature_profiles_down;iv_arc_centers;iv_bend;iv_bend_down;iv_tool_center;iv_tool_center_down;iv_feature_profiles;iv_feature_profiles_down"
pour chaque opt dans la liste d'options
sout = sout & "&" & opt
suivant
dim sfname comme chaîne
sfname = ofolder & "\" & thisdoc.filename(false) & ".dwg"
'esporta il fichier dwg
ocompdef.dataio.writedatatofile( sout, sfname)
dim osmdef comme la définition des composants de tôle
osmdef = définition de la composante odoc.
osmdef.flatpattern.exitedit
messagebox.show("dwg salvato in: " & sfname, " lamiera - esportazione completata!",messageboxboutons.ok)
Code:
'salva_modellopiatto_01
si cette application.activedocument.documenttype <>documenttypeenum.kassemblydocumentobject alors
messagebox.show("e' un'assieme. (non fa niente, ma la regola viene eseguita; messaggio da eliminare), "controllo")
sortie sous
fin si
opath = cedoc.path
currentstyle = feuillet metal.getactivestyle()
codice_regola = droite(style actuel, 10)
num_part=iproperties.value("projet", "numéro de partie")
codiceinizio = gauche(num_part, 3)
'specifica la cartella di destinazione per il dwg
ofolder = thisdoc.path & "\" & "laserdwg" & "\" & codiceinizio & "_" & codice_regola
'controlla se la cartella esiste, oppure la crea
si pas system.io.directory.exists(ofolder) alors
system.io.directory.createdirectory(ofolder)
fin si
'-inizio-- questa parte funzona solo per la parte lamiera e non in modifica da Assieme
dim odoc = cette application.document actif
dim ocompdef en tant que composant de tôledéfinition = rien
si odoc.documenttype = documenttypeenum.kassemblydocumentobjet puis
dim assemdoc comme document de montage = odoc
'dim odoc = cette application.documents.open(iptpathname, false)
ocompdef = assemdoc.componentdefinition.sheetmetalcomponentdefinition
sinon odoc.documenttype = documenttypeenum.kpartdocumentobjet puis
dim partdoc comme document partiel = odoc
ocompdef = partdoc.componentdefinition'.sheetmetalcomponentdefinition
fin si
«controlla se esiste un modello piatto; altrimenti lo crea
si ocompdef.has flatpattern = false alors
ocompdef.unfold
Autre
ocompdef.flatpattern.edit
fin si
'-fine-- questa parte funzona solo per la parte lamiera e non in modifica da assieme
'-inizio-- solo per lamiera
«controlla se esiste un modello piatto; altrimenti lo crea
'dim odoc comme document
'odoc = cette demande.document actif
'dim ocompdef en tant que composant de tôle
'ocompdef = définition de la composante odoc.
'si ocompdef.a flatpattern = false alors
'ocompdef.unfold
'else
'ocompdef.flatpattern.edit
'finir si
'-fine-- solo par lamiera
'settaggio dwg
dim optionlist comme liste(de chaîne) = nouvelle liste(de chaîne)()
optionlist.add("acadversion=2004")
optionlist.add("outerprofilelayer=0")
optionlist.add("interiorprofileslayer=0")
Dim sout comme chaîne
Dim spath comme ficelle
sout = "plat pattern dwg?acadversion=2004&outerprofilelayer=iv_interior_profiles" _
+ "&invisiblelayers=iv_tangent;iv_feature_profiles_down;iv_arc_centers;iv_bend;iv_bend_down;iv_tool_center;iv_tool_center_down;iv_feature_profiles;iv_feature_profiles_down"
pour chaque opt dans la liste d'options
sout = sout & "&" & opt
suivant
dim sfname comme chaîne
sfname = ofolder & "\" & thisdoc.filename(false) & ".dwg"
'esporta il fichier dwg
ocompdef.dataio.writedatatofile( sout, sfname)
dim osmdef comme la définition des composants de tôle
osmdef = définition de la composante odoc.
osmdef.flatpattern.exitedit
messagebox.show("dwg salvato in: " & sfname, " Assieme - esportazione completata!",messageboxboutons.ok)