Перейти к публикации

Рекомендованные сообщения

Может кто знает, есть ли возможность отслеживать постановку позиций на чертеже? В событиях на DrawingDoc найти ничего не удалось.

Ссылка на сообщение
Поделиться на других сайтах


andrey1307n2

Вопрос уточните. Что значит "отслеживать постановку"? Типа момент вставки позиции? А зачем такое нужно?

Ссылка на сообщение
Поделиться на других сайтах

Может кто знает, есть ли возможность отслеживать постановку позиций на чертеже? В событиях на DrawingDoc найти ничего не удалось.

Иногда можно искать например в поисковике по интернету (например, <noindex>http://www.google.ru/search?ie=UTF-8&h...vents%20Balloon</noindex> ), может и не совсем то, но всё же:

inserting balloon event

Check attachment. You may also need to have a hash table of all balloons to track which item is added.

BalloonInsertedEvent.zip

Источник: <noindex>https://forum.solidworks.com/message/326374</noindex>

Ссылка на сообщение
Поделиться на других сайтах

Kelny, спасибо, это - то что доктор прописал...

andrey1307n2

Вопрос уточните. Что значит "отслеживать постановку"? Типа момент вставки позиции? А зачем такое нужно?

Логика такая- пользователем включаестя "триггер", в этот момент все вставляемые позиции редактируются дабы получить нужный результат.

Изменено пользователем andrey1307n2
Ссылка на сообщение
Поделиться на других сайтах

Нашёл таки применение <noindex>3rdPartyStorage</noindex> и реализовал.

Это то же самое что и "Связь проектов", только позволяет сохранять данные ЛЮБОГО (картинка, текст, переменная, файл, таблица...) типа прямо в документе. Это хранилище не видно рядовым пользователям. Можно хоть копирайт вставлять. Правда чтобы его считать, нужно обязательно наличие аддона (или макроса) считывания.

Ссылка на сообщение
Поделиться на других сайтах

Нашёл таки применение <noindex>3rdPartyStorage</noindex> и реализовал.

Это то же самое что и "Связь проектов", только позволяет сохранять данные ЛЮБОГО (картинка, текст, переменная, файл, таблица...) типа прямо в документе. Это хранилище не видно рядовым пользователям. Можно хоть копирайт вставлять. Правда чтобы его считать, нужно обязательно наличие аддона (или макроса) считывания.

Не обязательно необходим аддон. Данные сохраняются как элементы составного файла и доступ к ним можно получить напрямую.

Ссылка на сообщение
Поделиться на других сайтах

andrey1307n2

я знаю что такое составной документ))) и я знаю как получить доступ к любому элементу напрямую.

А вы хорошо знакомы с API SW? Есть пара вопросов.

Ссылка на сообщение
Поделиться на других сайтах

Плоховато знаком, пока делаю Add-in попутно и сам изучаю именно то, что для этого необходимо. Основное с чем столкнулся - это перебор компонентов в сборке, работа с 3rdPartyStorageStore, некоторые из событий и только сейчас начал ковыряться с чертежами. Чем могу...

Изменено пользователем andrey1307n2
Ссылка на сообщение
Поделиться на других сайтах

Пытаюсь создать макрос на VB.Net для Solidworks 2010, сохраняющий DXF для всех элементов Sheet Metal из сборки.

Столкнулся с проблемой, что метод PartDoc.ExportToDWG не работает даже для примера из Help.

В VBA пример работает. Писать макрос на VBA - не вариант, там другие проблемы.

Другой функции, сохраняющей все dxf из Part (даже если это мультибодипарт), я не нашел.

Что можно сделать в данной ситуации?

Ссылка на сообщение
Поделиться на других сайтах

Столкнулся с проблемой, что метод PartDoc.ExportToDWG не работает даже для примера из Help.

Вероятно вы всё же что-то упустили и не подключили какую-нибудь библиотеку, не объявили переменную, упустили рекомендацию по запуску макроса (обычно в комментариях выше кода в примерах справки), неправильно выставили типы переменных (VBA к этому менее капризен)
Ссылка на сообщение
Поделиться на других сайтах

dmalsh

Всё работает на NET. Не забывайте смотреть Preconditions (то что нужно сделать перед запуском) и Postconditions (то что получается на выходе).

Скрытый текст: Код
using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using SolidWorks.Interop.sldworks;

using System.Runtime.InteropServices;

using SolidWorks.Interop.swconst;

namespace SolidworksApp1

{

public partial class SWForm : Form

{

SldWorks SwApp;

IModelDoc2 swModel;

public SWForm()

{

InitializeComponent();

try

{

SwApp = (SldWorks)Marshal.GetActiveObject("SldWorks.Application"); //clsid:83A33D31-27C5-11CE-BFD4-00400513BB57

}

catch

{

MessageBox.Show("Error getting SolidWorks Handle");

return;

}

if (SwApp.IActiveDoc == null)

{

MessageBox.Show("Open part");

System.Environment.Exit(-1);

}

swModel = SwApp.IActiveDoc2;

if (swModel.GetType() != (int)swDocumentTypes_e.swDocPART)//Choose document type

{

string text = "Only for part";

MessageBox.Show(text, "Warning!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

System.Environment.Exit(-1);

}

}

private void button1_Click(object sender, EventArgs e)

{

PartDoc swPart;

string sModelName;

string sPathName;

object varAlignment;

double[] dataAlignment = new double[12];

object varViews;

string[] dataViews = new string[2];

long options;

sModelName = swModel.GetPathName();

sPathName = swModel.GetPathName();

sPathName = sPathName.Substring(0, (sPathName.Length - 6));

sPathName = sPathName + "dwg";

swPart = (PartDoc)swModel;

dataAlignment[0] = 0.0;

dataAlignment[1] = 0.0;

dataAlignment[2] = 0.0;

dataAlignment[3] = 1.0;

dataAlignment[4] = 0.0;

dataAlignment[5] = 0.0;

dataAlignment[6] = 0.0;

dataAlignment[7] = 1.0;

dataAlignment[8] = 0.0;

dataAlignment[9] = 0.0;

dataAlignment[10] = 0.0;

dataAlignment[11] = 1.0;

varAlignment = dataAlignment;

dataViews[0] = "*Current";

dataViews[1] = "*Front";

varViews = dataViews;

//Export each annotation view to a separate drawing file

swPart.ExportToDWG(sPathName, sModelName, 3, false, varAlignment, false, false, 0, varViews);

//Export flat pattern of the sheet metal to a single drawing file

options = 13;

//0001101 - include flat pattern geometry, bend lines and sketches

swPart.ExportToDWG(sPathName, sModelName, 1, true, varAlignment, false, false, (int)options, null);

SwApp.SendMsgToUser("Inspect DWG files in " + sPathName.Substring(0, (sPathName.Length - 16)));

}

}

}

Ссылка на сообщение
Поделиться на других сайтах

Столкнулся с интересной особенностью SolidWorks 2008- при добавлении вида на чертеж, не вызывается событие AddItemNotify, хотя должно.При удалении вида, DeleteItemPreNotify нормально работает. У всех ли такая странность?

Ссылка на сообщение
Поделиться на других сайтах

andrey1307n2

а выбор события? Какой именно notify. Типа:

swNotifyDrawingView

)))) Сразу на всех форумах постинг?

Ссылка на сообщение
Поделиться на других сайтах

andrey1307n2

а выбор события? Какой именно notify. Типа:

swNotifyDrawingView

)))) Сразу на всех форумах постинг?

Параллельно на официальном форуме запрос делаю. :)

DDrawingDocEvents_AddItemNotifyEventHandler - никакой реакции при добавлении вида.

DDrawingDocEvents_DeleteItemPreNotifyEventHandler - нормально работает при удалении вида.

Проблему то решил, но это как-то по нашему, а не по буржуйски получается:

Событие DDrawingDocEvents_ViewCreatePreNotifyEventHandler срабатывает до факта добавления вида, ставим флаг.

DDrawingDocEvents_FeatureManagerTreeRebuildNotifyEventHandler срабатывает при всяких телодвижениях с FeatureManager- проверяем флаг, если "true", то сканируем документ на наличие новых видов.

Изменено пользователем andrey1307n2
Ссылка на сообщение
Поделиться на других сайтах

DDrawingDocEvents_AddItemNotifyEventHandler - должен возвратить int. Вы его должны сравнить с искомым событием swNotifyDrawingView. И дальше работать если true.

Ссылка на сообщение
Поделиться на других сайтах

DDrawingDocEvents_AddItemNotifyEventHandler - должен возвратить int. Вы его должны сравнить с искомым событием swNotifyDrawingView. И дальше работать если true.

Не понимаю как это.

Я делаю примерно так:

DrawingDoc m_Draw;

public void Main()

{

m_Draw = swApp.IActiveDoc2 as DrawingDoc;

m_Draw.AddItemNotify += new DDrawingDocEvents_AddItemNotifyEventHandler(m_Draw_AddItemNotify);

}

int m_Draw_AddItemNotify(int EntityType, string itemName)

{

// if (EntityType == (int)swNotifyEntityType_e.swNotifyDrawingView)

//{

// Feature feat = m_Draw.IFeatureByName(itemName);

// IView view = feat.GetSpecificFeature2() as View;

// }

int hhh=0;

return 0;

}

В режиме отладки Dll точка останова внутри метода m_Draw_AddItemNotify на int hhh = 0; не ловится совсем.

Ссылка на сообщение
Поделиться на других сайтах

Попробуйте так

int hhh= EntityType;
и поставьте точку останова. Удалите вид и увидите чему равен входной параметр.
Ссылка на сообщение
Поделиться на других сайтах

Попробуйте так

int hhh= EntityType;
и поставьте точку останова. Удалите вид и увидите чему равен входной параметр.

Понятно о чем спичь , он равен (int)swNotifyEntityType_e.swNotifyDrawingView ессно. И при удалении вида сие нормально просматривается,если подписаться на DeleteItemPreNotify.

Изменено пользователем andrey1307n2
Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.
Примечание: вашему сообщению потребуется утверждение модератора, прежде чем оно станет доступным.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.



×
×
  • Создать...