Как изменить путь детали-заготовки?

Автор Beco, 17.03.15, 12:16:18

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Beco

Я сделал miniPDM. Мой KompasPlugin ошибаться.
Этот код получает путь, но не могут его изменить:


            private void RerouteReferencedDocuments3D(string filename, string[] oldReferences, string[] newReferences, string saveAs)
            {
                List<string> pathsList = new List<string>();
                List<string> oldRefs = new List<string>(oldReferences);
                appl.KompasError.Clear();
                IKompasDocument3D doc = (IKompasDocument3D)appl.Documents.Open(filename, false, false);
                Part7 topPart = doc.TopPart;
                Parts7 parts = topPart.Parts;
                if (parts != null)
                {
                    int count = parts.Count;
                    for (int i = 0; i < count; i++)
                    {
                        Part7 part = (Part7)parts[i];
                        string partFileName = part.FileName;
                        if (!part.Standard)
                        {
                            if (oldRefs.Contains(part.FileName))
                            {
                                string newRef = newReferences[oldRefs.IndexOf(part.FileName)];
                                part.FileName = newRef;
                                part.Update(); //after this line part.FileName is reverted to initial state (.m3d ).
                            }
                        }
                    }
                    topPart.Update();
                }
                if (saveAs != null)
                {
                    if (saveAs != string.Empty)
                    {
                        doc.SaveAs(saveAs);
                    }
                }
                doc.Close(DocumentCloseOptions.kdSaveChanges);
            }


Я использую Kомпас V15 / C#

Нужно файл сохранить как по новому пути, а старый удалить, если ненужен.

Beco

Не работает.


                            if (oldRefs.Contains(part.FileName))
                            {
                                string newRef = newReferences[oldRefs.IndexOf(part.FileName)];
                                if (part.IsBillet)
                                {
                                    if (File.Exists(newRef))
                                    {
                                        File.Delete(newRef);
                                    }
                                    part.SaveAs(newRef);
                                    //part.FileName = newRef;
                                    //part.Update();
                                }
                                else
                                {
                                    part.FileName = newRef;
                                    part.Update();
                                }
                            }

Попробуйте поменять с помощью свойства FileName, интерфейса Детали заготовки и Зеркальной детали -IBilletObsolete.

Beco

IModelObject modelObjectTop = (IModelObject)topPart;
IModelContainer modelContainerTop = (IModelContainer)modelObjectTop;
BilletsObsoletes billetsTop = modelContainerTop.BilletsObsoletes;
int count = billetsTop.Count;


count = 0
:(

Кастинг на IPart7 в IBilletObsolete дает ошибку:

IBilletObsolete billet = (IBilletObsolete)(IModelObject)part;

Попробуйте найти нужную в коллекции деталей заготовок и зеркальных деталей.
IModelObjects.IBilletsObsoletes

Beco

Я уже попробовал и ничего не получил  - count = 0
Цитата: Beco от 18.03.15, 12:43:12
IModelObject modelObjectTop = (IModelObject)topPart;
IModelContainer modelContainerTop = (IModelContainer)modelObjectTop;
BilletsObsoletes billetsTop = modelContainerTop.BilletsObsoletes;
int count = billetsTop.Count;


count = 0
:(

IModelObjects и у Вас IModelObject - это не одно и тоже.

Beco

Это тоже не работает:
IModelObjects modelObjects = (IModelObjects)parts;
IBilletsObsoletes billets = (IBilletsObsoletes)modelObjects;

дает ошибку:
"Unable to cast COM object of type 'KompasAPI7.Parts7Class' to interface type 'KompasAPI7.IBilletsObsoletes'..."

Я считаю, что возможности изменить путь к файлу исчерпаны. Все равно - спасибо за помощь!

Вы справку смотрите?
billets = IModelObjects.IBilletsObsoletes

Beco

Смотрел.
IBilletsObsoletes не свойства, а интерфейс наследником.

Смотри вложение.