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

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

это будет прекрасно вписыватсья в MVVM

 

Оно то да. Просто есть подозрения в неких косяках взаимодействия между кодом и непосредственно View - она же, кастомная PMP.

К примеру, реализация SelectionBox:

- свой контрол, который помещён в Usercontrol

- usercontrol помещён в Host Control

- отлов NewSelection в solidworks

- передача всего хозяйства либо по цепочке, либо событием сразу в usercontrol

 

 

сериализовать/десериализовать сразу в 3rd Party Storage

Думал об этом. Тогда потребуется хорошее описание кода, ибо если кто-то будет выбирать эти данные без исходника, то мороки будет ооочень много. Фактически, десериализация может быть затруднена.

DataContractSerializers

 

а чем это будет отличаться от обычного

[serializable]
public class SomeClass
{
...
}
Ссылка на сообщение
Поделиться на других сайтах


Подскажите пожалуйста как при переборе деталей сборки определить погашена деталь или нет?

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

 

Всётаки, иногда стоит поискать в хелпе самому  :wink:

IsSuppressed

GetSuppression

IsHidden 

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

@@science, это я к тому, что можно попробовать так: переключаете SW на американский язык. Смотрите, что делает та или иная команда или менюха или кнопка. Ищете в хелпе похожие слова.

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

Отличная статья!  :clap_1:  Отдельный плюс за heat.exe вместо custom action с regasm

 

Оно то да. Просто есть подозрения в неких косяках взаимодействия между кодом и непосредственно View - она же, кастомная PMP. К примеру, реализация SelectionBox: - свой контрол, который помещён в Usercontrol - usercontrol помещён в Host Control - отлов NewSelection в solidworks - передача всего хозяйства либо по цепочке, либо событием сразу в usercontrol

 

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

 

Думал об этом. Тогда потребуется хорошее описание кода, ибо если кто-то будет выбирать эти данные без исходника, то мороки будет ооочень много. Фактически, десериализация может быть затруднена.

Если сериализуете, как XML вместо binary, то можно будет понять структуру и десериализовать без исходника. Но если Вы хотите, чтобы можно было десериализовать Ваши данные из 3rd party, тогда можно сделать общую длл со структурами и описанием.

а чем это будет отличаться от обычного

Я предпочитаю XML vs Binary по следующим причинам

  • Можно просмотреть сериализованные данные и понять структуру
  • Нет проблем со специфической версией длл (при бинарной сериализации необходимо писать матчеры, чтобы поддерживать backward compatibility)
  • Если структура данных изменилась для поддержки старого кода можно написать XSLT трансформацию, а с байнари необходимо носить с собой старый класс

Из плюсов

  • Байнари сериализация более быстродейственна
  • Байнари сериализация меньше в объеме
Ссылка на сообщение
Поделиться на других сайтах

Я предпочитаю XML vs Binary

Тут я имел в виду разницу между DataContractSerializers и XMLSerializer. В чём преимущества?

 

heat.exe вместо custom action

Да потому что в своё время очень с ним намучился :smile:  а тут (HEAT) всё наглядно и просто.

 

можно сделать общую длл со структурами и описанием.

 

Ах ну да, точно.

 

необходимо писать матчеры

Да, тоже сталкивался, там обходы есть.

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

Доброе время суток, товарищи! Прошу подсобить по вопросу перевода локальных координат детали в глобальные координаты сборки.

Есть вершина детали IMathVector^ pnt.

деталь включена в сборку, и я получая на неё ссылку как компонент могу получить матрицу трансформации детали: MathTransform хЬ =  comp->Transform2;

домножая вектор на матрицу я должен получить искомую точку в глобальной системе координат. вроде всё просто, но с матрицей хЬ, у меня какие то непонятки.

она странно выглядит:

1 | 0 |  0 |  0

1 | 0 |  0 |  0

1 | X | Y |  Z

1 | 0 | 0  |  0

хотя в справке написано, что первые 9 элементов в матрице 3х3 отвечают за поворот, в нижней строке первые 3 числа должны быть координатами перемещения, а 4й столбец вообще не используется.

Но очевидно, что матрица, которую мне выдает компонент, искажена: трансформация переехала на строку выше и вправо. Первый столбец весь заполнен единицами. Соответственно, эта матрица никак не изменяет координаты моей точки. В чём может быть проблема?

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

Тут я имел в виду разницу между DataContractSerializers и XMLSerializer. В чём преимущества?

 

Плюсы DataContractSerializers по сравнению с XMLSerializer

  • Быстрее где-то на 10%
  • Возможность сериализовать приватные, протектед поля
  • Нет проблем с обязательным наличием конструктара без параметров
  • Возможность сериализовать ссылки - было критическим для меня

public class A

{

    public List<Item> Items { get;set; }

    public Item Item = Items.First();

}

 

После сереализации/десериализации через DataContractSerializers можно добиться, чтобы a.Items.First() == a.Item. Тогда как через XmlSerialization это a.Items.First() == a.Item будет всегда false

 

Из минусов

 

Порядок и наличие всех полей в XML обязательно, тогда как в XmlSerialization нулевые поля могут отсутвовать в XML и порядок полей - неважен.

Доброе время суток, товарищи! Прошу подсобить по вопросу перевода локальных координат детали в глобальные координаты сборки.

Есть вершина детали IMathVector^ pnt.

деталь включена в сборку, и я получая на неё ссылку как компонент могу получить матрицу трансформации детали: MathTransform хЬ =  comp->Transform2;

домножая вектор на матрицу я должен получить искомую точку в глобальной системе координат. вроде всё просто, но с матрицей хЬ, у меня какие то непонятки.

она странно выглядит:

1 | 0 |  0 |  0

1 | 0 |  0 |  0

1 | X | Y |  Z

1 | 0 | 0  |  0

хотя в справке написано, что первые 9 элементов в матрице 3х3 отвечают за поворот, в нижней строке первые 3 числа должны быть координатами перемещения, а 4й столбец вообще не используется.

Но очевидно, что матрица, которую мне выдает компонент, искажена: трансформация переехала на строку выше и вправо. Первый столбец весь заполнен единицами. Соответственно, эта матрица никак не изменяет координаты моей точки. В чём может быть проблема?

 

Матрица на схеме из справки не разворачивается по строкам. Еее нужно разворачивать по алфавиту

   |a b c . n |

    |d e f . o |

    |g h i . p |

    |j k l . m |

 

Т.е. матрица разворачивается в такой массив: a,b,c,d,...,n,o,p

 

Если представить

 

   |r1 r2 r3 . n |

    |r4 r5 r6 . o |

    |r7 r8 r9 . p |

    |x  y  z  . s |

 

r1,r2,r3,r4,r5,r6,r7,r8,x,y,z,s,0,0,0

Ссылка на сообщение
Поделиться на других сайтах
Уважаемые streamdown и artem_cad подскажите пожалуйста еще раз (перерыл хелп солида но ответа не нашел).

Задача, разместить чертеж развертки на чертеже лицом в верх.

Решение, вставить чертеж развертки детали, считать примечания всех линий гиба. И если при данном расположении вида на чертеже число гибов ВНИЗ > ВВЕРХ оставляем этот вид если иначе переворачиваем вид на чертеже.

Вопросы:

Как считать примечания линий гибов с детали?

Как перевернуть вид на чертеже (не повернуть)?

 

С уважением science

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

 

так обычным перебором на виде. Ну и далее GetBendLineValues2 

Как перевернуть
 

Флипнуть)))

разместить чертеж развертки
 

меня больше это интересует. Вы решили задачу с размерами-габаритами? Каким образом обрабатываете кривые грани? К примеру, если одна из сторон - сплайн.

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

Матрица на схеме из справки не разворачивается по строкам. Еее нужно разворачивать по алфавиту

 

ок, спасибо за разъяснение. Теперь понятно как читать матрицу, и видно, что она заполнена правильно.

А моя загвоздка оказалась в другом. Я не сразу раскурил, что в СДК понятия вектор и точка - это совсем разные понятия. Я представлял вершину в виде вектора IMathVector, а оказывается необходимо применять для этого форму MathPoint. что очень странно для меня, т.к. в моем понимании точка в пространстве представлена именно вектором.


 

меня больше это интересует. Вы решили задачу с размерами-габаритами? Каким образом обрабатываете кривые грани? К примеру, если одна из сторон - сплайн.

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

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

так обычным перебором на виде. Ну и далее GetBendLineValues2 

 

 

 

Флипнуть)))

 

 

 

меня больше это интересует. Вы решили задачу с размерами-габаритами? Каким образом обрабатываете кривые грани? К примеру, если одна из сторон - сплайн.

Я пошел проще, Ставлю AutoDim а затем удаляю все размеры кроме максимальных. Правдв не всегда как надо работает но в 80-90% случаев с моими изделиями работает нормально.

Ссылка на сообщение
Поделиться на других сайтах
Ставлю AutoDim
 воот, AutoDim выдал какие то странные результаты, если кромки не прямые линии. Потому и спрашиваю.
я разбивал дугу на мелкие части
сами алгоритм писали? Или встроенными методами? Можно экспортнуть в DXF супердревней версии, там сплайны даже бьются вроде правильно.
Ссылка на сообщение
Поделиться на других сайтах

 воот, AutoDim выдал какие то странные результаты, если кромки не прямые линии. Потому и спрашиваю.

Да абсолютно согласен. Но у меня в 90% случаев изделия прямоугольные по этому у меня это работае более или менее правильно. А вот оставить размеры между линиями гибов таким способом получается лиш в 30 % случаев. Так как AutoDim проставляет эти размеры как попало.

"так обычным перебором на виде"

А что перебирать (все)?

Если не трудно кинте примерчик перебора.

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

кинте примерчик перебора.

 

киндаю  :biggrin:

 

private void TraverseAnnotations(View swSheetView)
         {
             Object[] arrAnnotation = (Object[]) swSheetView.GetAnnotations();
             if (arrAnnotation != null)
             {
                 for (int i = 0; i <= arrAnnotation.Length - 1; i++)
                 {
                     Annotation swAnnotation = (Annotation) arrAnnotation[i];
                     string name = swAnnotation.GetName() + "@" + swSheetView.Name;
                     int IAnnoType = swAnnotation.GetType();


                     switch (IAnnoType)
                     {
                         case 1:
                             Debug.Print("Annotation: Thread");
                             break;
                         case 2:
                             Debug.Print("Annotation: Datum Tag");
                             break;
                         case 3:
                             Debug.Print("Annotation: Datum Target Symbol");
                             break;
                         case 4:
                             Debug.Print("Annotation: Display Diamension");
                             break;
                         case 5:
                             Debug.Print("Annotation: Gtol");
                             break;
                         case 6:
                             Debug.Print("Annotation: Note");
                             break;
                         case 7:
                             Debug.Print("Annotation: SFS Symbol");
                             break;
                         case 8:
                             Debug.Print("Annotation: Weld Symbol");
                             break;
                         case 9:
                             Debug.Print("Annotation: Custom Symbol");
                             break;
                         case 10:
                             Debug.Print("Annotation: Dowel Symbol");
                             break;
                         case 11:
                             Debug.Print("Annotation: Leader");
                             break;
                         case 12:
                             Debug.Print("Annotation: Block");
                             break;
                         case 13:
                             Debug.Print("Annotation: Center Mark symbol");
                             break;
                         case 14:
                             Debug.Print("Annotation: Table Annotation");
                             break;
                         case 15:
                             Debug.Print("Annotation: Center Line ");
                             break;
                         case 16:
                             Debug.Print("Annotation: Datum Origin");
                             break;
                         case 17:
                             Debug.Print("Annotation: swWeldBeadSymbol");
                             break;
                         case 18:
                             Debug.Print("Annotation: Revision Cloud");
                             break;
                     }
                 }
             }
         }

И ещё раз!!! Ну что ж в саму справку то не заглядываете?  :sad:  Там есть больше чем знаю я или @@artem_cad  :smile:

ТУТА

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

 

киндаю  :biggrin:

 

private void TraverseAnnotations(View swSheetView)
         {
             Object[] arrAnnotation = (Object[]) swSheetView.GetAnnotations();
             if (arrAnnotation != null)
             {
                 for (int i = 0; i <= arrAnnotation.Length - 1; i++)
                 {
                     Annotation swAnnotation = (Annotation) arrAnnotation[i];
                     string name = swAnnotation.GetName() + "@" + swSheetView.Name;
                     int IAnnoType = swAnnotation.GetType();


                     switch (IAnnoType)
                     {
                         case 1:
                             Debug.Print("Annotation: Thread");
                             break;
                         case 2:
                             Debug.Print("Annotation: Datum Tag");
                             break;
                         case 3:
                             Debug.Print("Annotation: Datum Target Symbol");
                             break;
                         case 4:
                             Debug.Print("Annotation: Display Diamension");
                             break;
                         case 5:
                             Debug.Print("Annotation: Gtol");
                             break;
                         case 6:
                             Debug.Print("Annotation: Note");
                             break;
                         case 7:
                             Debug.Print("Annotation: SFS Symbol");
                             break;
                         case 8:
                             Debug.Print("Annotation: Weld Symbol");
                             break;
                         case 9:
                             Debug.Print("Annotation: Custom Symbol");
                             break;
                         case 10:
                             Debug.Print("Annotation: Dowel Symbol");
                             break;
                         case 11:
                             Debug.Print("Annotation: Leader");
                             break;
                         case 12:
                             Debug.Print("Annotation: Block");
                             break;
                         case 13:
                             Debug.Print("Annotation: Center Mark symbol");
                             break;
                         case 14:
                             Debug.Print("Annotation: Table Annotation");
                             break;
                         case 15:
                             Debug.Print("Annotation: Center Line ");
                             break;
                         case 16:
                             Debug.Print("Annotation: Datum Origin");
                             break;
                         case 17:
                             Debug.Print("Annotation: swWeldBeadSymbol");
                             break;
                         case 18:
                             Debug.Print("Annotation: Revision Cloud");
                             break;
                     }
                 }
             }
         }

И ещё раз!!! Ну что ж в саму справку то не заглядываете?  :sad:  Там есть больше чем знаю я или @@artem_cad  :smile:

ТУТА

Заглядіваю, обязательно заглядіваю. Но я еще пока новичек и не все всегда могу найти. Только тогда обращаюсь к Вам.

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

streamdown

Подскажите пожалуйста. Не пойму как выбрать первую линию гиба на виде. Или получить имя линии гиба, что бы перебрать их все. Как получить матрицу линий гиба я нашел .GetBendLines. Нужна функция что типа GetFirstDisplayDimension5.

 

С уважением science

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

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

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

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

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

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

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

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

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

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

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




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