Перейти к содержанию

westwind

Пользователи
  • Публикаций

    26
  • Зарегистрирован

  • Посещение

  • Победитель дней

    2

westwind стал победителем дня 3 мая 2016

westwind имел наиболее популярный контент!

Репутация

4 Обычный

Информация о westwind

  • Звание
    Посетитель
  • День рождения 01.12.1985
  • Возраст 34

Информация

  • Пол
    Мужчина
  • Город
    Ростов-на-Дону
  • Интересы
    Инженер-проектировщик КИПиА
  • Возраст 34
  1. https://www.dkc.ru/upload/dkc/pub/Downloads/Drawing/Dinamic_blocks_Combitech/Dynamic_blocks_COMBITECH_DKC.zip
  2. DKC.ru Динамические блоки лоточных трасс. При добавлении в файл 30 штук блоков (разных) любые действия становятся ОЧЕЕЕНЬ длительными. Тоесть, копирование обычного отрезка занимало у меня 20 секунд. (На ПК 6 ядер 3,4 Гц. 12Гб ОЗУ)
  3. Спасибо всем за помощь. Суть в том, что у DKC (шкафы, лотки и т.д.) все динамические блоки как-то странно себя ведут в Nanocad.
  4. Вообщем, видимо это никому не интересно...
  5. Это эскиз шкафа. Открывается нормально. Смотрим на самый левый вид, вид шкафа с подписью: "вид спереди". При перемещении любой выноски в район заштрихованной панели (это блок "монтажная панель 800х800") или перемещении самого этого блока, его удалении программа крепко задумывается минуты на три. Я думаю, проблемы скорее всего связаны со штриховкой в блоке, но даже после удаления самого блока (после того как ПК "отвиснет"), эта область чертежа продолжает вести себя таким же образом. Проверка и очистка чертежа не помогают. Причём, в области второго вхождения блока (правый вид) такого поведения нет. Эскизы ШКУ 2020-06-19 (односторонний).dwg
  6. Ну как бы вопрос в названии темы. Конкретно, хотелось бы иметь поддержку Entity Framework в модулях расширения.
  7. Это я пытаюсь как-то более-менее автоматизировать процесс печати посредством Multicad. Только среди классов пространства мультикада ничего для работы с ViewPort'ами я не обнаружил. Создаю потомок McCustomBase, который отрисовывает форматку. Работаю в пространстве модели (на листах не работаю - мне не удобно). Задумка в том, чтобы программно создавать листы по количеству форматок в модели. На листе создаём viewport, выровненный по форматке. Потом останется только дать команду на печать всех листов (или части). Как-то так.
  8. создаю Teigha.DatabaseServices.Viewport view = new Teigha.DatabaseServices.Viewport(); //view.Layer = "sdsds"; view.CenterPoint = new Teigha.Geometry.Point3d(100, 100, 0); view.Width = 100; view.Height = 100; Как теперь его добавить в чертёж?!
  9. Вопрос. Nanocad 7.0. Multicad. C# --- 1) Пытаюсь печатать внутри плагина через COM-интерфейс . Компилируется dll без ошибок, загружается, все функции работают кроме данной: nanoCAD.Application app = Marshal.GetActiveObject("nanocad.Application") as nanoCAD.Application; nanoCAD.Document doc = app.ActiveDocument; (doc.Plot as InanoCADPlot).PlotToDevice(); даже прерывание при вызове функции не срабатывает. Что я делаю не так? 2) возможно ли программно (внутри плагина) установить области печати для дальнейшей печати или через Plot.PlotToDevice или через команду PLOT?!!
  10. Версия 7.0. Ну, в данном случае, мы объект не создаём, а редактируем - у меня работает. Вообще же... ко мне вчера прилетела куча чертежей газовых по узлам учёта, которые править нужно было. Стал срочно искать скрипт, вычищающий форматирование - не нашёл Написал небольшой кусочек кода - решил поделиться... по свободе нужно будет сделать с диалогом - какие команды форматирования убирать, а какие оставить. Плюс - автоматический перенос текста на свой слой, выставление всех свойств "по слою" и т.д. Сейчас времени нет....
  11. Не совсем понял, что имеется в виду Смысл происходящего в следующем: берём MText, который выглядит внутри вот так: Техническое {\fCourier New CYR|b0|i0|c204|p49;перевооружение} сетей г{\H1.4286x;азопотребления.}\P Узел учета газа{\W0.5; котельной по\Q19; адресу: у\Q15;л. ул. Р.Люксембург, 52-а }г.Таганрог, \PРостовская область 1) Находим и удаляем внутри все лексемы вида: \<внутри что-угодно кроме повторяющегося символа "\">; тут нюанс, нельзя в регулярном выражении написать просто \\.*?; потому, что в таком случае будут удалены "полезные" символы конца абзаца многострочного текста "\Р" нотация "\Р" отличается от остальных команд форматирования тем, что она не заканчивается ";" кроме того, возможны ещё какие-то нюансы. Так что пишем: \\[^\\]*?; заставляя .NET проверять, что внутри найденной лексемы, которую он собрался удалять нет слэшей. 2) потом удаляем фигурные скобки... тут, кстати косяк, если в тексте есть фигурные скобки, напечатанные пользователем - они удалятся... нужно строку Regex.Replace(str, @"[{}]", ""); заменить на совсем непонятную Regex.Replace(str, @"[^\\][{|}]", ""); и после выполнения функции получим MText без форматирования. Техническое перевооружение сетей газопотребления.\P Узел учета газа котельной по адресу: ул. ул. Р.Люксембург, 52-а г.Таганрог, \PРостовская область Ну или как-то так... я в программировании на C# упражняюсь реже чем в отпуск хожу... придёт МАКРОДЕМОН и всё разъяснит....
  12. Под Autocad есть много популярных LISP скриптов, сбрасывающих форматирование многострочного текста (а это реально проблема, когда смежники используют CAD как PaintBrush). Предлагаю простое решение на базе Multicad: static public void ClearTextFormat() { InputJig Jig = new InputJig(); List<McObjectId> lId = Jig.SelectObjects("Выбери Mtext : "); foreach (McObjectId id in lId) { if (id.IsNull) continue; DbText text = id.GetObject() as DbText; if (text == null) continue; string str = text.Text.Text; //удаляем все символы форматирования str = Regex.Replace(str, @"\\[^\\]*?;", ""); str = Regex.Replace(str, @"[{}]", ""); TextGeom tg = new TextGeom(str, text.Text.Origin, text.Text.Direction, text.Text.TextStyle); text.Text = tg; } }
  13. Немного затупил... утилитка спрашивает старый стиль текста, новый стиль текста, затем указываем объекты MText для поиска. По идее в найденных объектах стиль должен бы поменяться... и в отладчике он изменяется. Но после выхода из функции - изменений нет! static public void ReplaceStyle(string oldStyle, string newStyle) { InputJig Jig = new InputJig(); List<McObjectId> lId = Jig.SelectObjects("Выбери Mtext : "); foreach (McObjectId id in lId) { if (id.IsNull) continue; DbText text = id.GetObject() as DbText; if (text == null) continue; if (text.Text.TextStyle == oldStyle) { TextGeom tg = new TextGeom(text.Text.Text, text.Text.Origin, text.Text.Direction, newStyle); text.Text = tg; } } }
  14. Ещё попутный вопрос: как обработать событие открытия документа?!
  15. Для иллюстрации вопроса создал небольшой тестовый фрагмент: namespace ClassLibrary1 { //## Класс с командами NANOCAD public static class Commands { [CommandMethod("temp1", CommandFlags.NoCheck | CommandFlags.NoPrefix)] static public void temp1Cmd() { for (int i = 0; i < 30; i++) { Q.s.Add(new ser() { id = i }); } } [CommandMethod("temp2", CommandFlags.NoCheck | CommandFlags.NoPrefix)] static public void temp2Cmd() { System.Windows.Forms.MessageBox.Show( String.Join("; ", Q.s.Select (x => x.id.ToString()).ToArray()) ); } } [serializable] public class ser { public int id = 0; public override string ToString() { return id.ToString(); } } [serializable] static public class Q { public static List<ser> s = new List<ser>(); } } Если я запущу "temp1" и затем "temp2" я получу список из 30 цифр. при закрытии чертежа, но НЕ nanocad, и повторного открытия документа запуская "temp2" - те же 30 цифр. А вот, если ЗАКРЫТЬ nanocad, при повторной загрузке чертежа, после запуска "temp2" - коллекция будет пустой! Полагаю, что проблема в сериализации, но не соображу где именно!
×
×
  • Создать...