Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: Александр Пекшев aka Modis от 26-05-2015, 12:52:44

Название: Проблемы при копировании таблиц методом WblockCloneObjects
Отправлено: Александр Пекшев aka Modis от 26-05-2015, 12:52:44
Всем привет.
Для копирования таблицы из другого файла использую метод WblockCloneObjects. Вот примерно так это выглядит:
Код - C# [Выбрать]
  1. var tableStyle = "bla_bla_bla";
  2. // Имя файла из которого берем таблицу
  3. var sourceFileName = Path.Combine(dir, "Tables.dwg");
  4. // Read the DWG into a side database
  5. sourceDb.ReadDwgFile(sourceFileName, FileShare.Read, true, string.Empty);
  6. var tblIds = new ObjectIdCollection();
  7. // Создаем пустую таблицу
  8. var tbl = new Table();
  9. using (var myT = sourceDb.TransactionManager.StartTransaction())
  10. {
  11.     var sourceBtr = (BlockTableRecord) myT.GetObject(sourceDb.CurrentSpaceId, OpenMode.ForRead, false);
  12.     foreach (var obj in sourceBtr)
  13.     {
  14.         var ent = (Entity)myT.GetObject(obj, OpenMode.ForRead);
  15.         if (ent is Table)
  16.         {
  17.             var tblsty = (Table)myT.GetObject(obj, OpenMode.ForRead);
  18.             if (tblsty.TableStyleName.Equals(tableStyle))
  19.             {
  20.                 tblIds.Add(tblsty.ObjectId);
  21.                 var im = new IdMapping();
  22.                 sourceDb.WblockCloneObjects(tblIds, db.CurrentSpaceId, im, DuplicateRecordCloning.Replace, false);
  23.                 tbl = (Table) tr.GetObject(im.Lookup(tblsty.ObjectId).Value, OpenMode.ForWrite);
  24.                 break;
  25.             }
  26.         }
  27.     }
  28.     myT.Commit();
  29. }
Далее по коду эту таблицу перемещаю в указанную пользователем точку. В общем ничего сверхъестественного в этом коде нет на первый взгляд, однако есть очень неприятная проблема - этот вариант переопределяет текстовый стиль!
Допустим в файле из, которого я копирую, есть текстовый стиль Standard у которого шрифт стоит Arial и степень сжатия 1.0. И этот текстовый стиль применен к таблице. В моем текущем документе тоже есть текстовый стиль Standard, но с другим шрифтом и степенью сжатия (например Simplex.shx и 0.7). Так вот - после работы выше написанного кода текстовый стиль в текущем документе тоже переопределится (шрифт станет Arial, степень сжатия 1.0).
Предположил, что дело в самом методе WblockCloneObjects и попробовал заменить DuplicateRecordCloning.Replace на DuplicateRecordCloning.Ignore. И вроде все сработало (т.е. текстовый стиль не переопределился, а таблица скопировалась), но при попытке дальнейших манипуляций с таблице автокад вылетает с FatalError
Как быть?
Название: Re: Проблемы при копировании таблиц методом WblockCloneObjects
Отправлено: Александр Ривилис от 26-05-2015, 12:55:40
1) Не забывай про форматирование кода (смотри у меня в подписи)
2) Попробуй заменить DuplicateRecordCloning.Replace на DuplicateRecordCloning.MangleName
Название: Re: Проблемы при копировании таблиц методом WblockCloneObjects
Отправлено: Александр Ривилис от 26-05-2015, 13:00:35
P.S.: Вообще-то в этом коде ты клонируешь не таблицу, а табличный стиль.
Название: Re: Проблемы при копировании таблиц методом WblockCloneObjects
Отправлено: Александр Пекшев aka Modis от 26-05-2015, 13:31:34
P.S.: Вообще-то в этом коде ты клонируешь не таблицу, а табличный стиль.
Разве?
Я "беру" таблицу: var tblsty = (Table)myT.GetObject(obj, OpenMode.ForRead);
проверяю, что у нее табличный стиль нужный мне: if (tblsty.TableStyleName.Equals(tableStyle))
и делаю "клон" по ObjectId таблицы: tblIds.Add(tblsty.ObjectId);
Просто имена переменных корявые
Название: Re: Проблемы при копировании таблиц методом WblockCloneObjects
Отправлено: Александр Ривилис от 26-05-2015, 13:37:24
К сожалению в этом коде всё корявое.
Название: Re: Проблемы при копировании таблиц методом WblockCloneObjects
Отправлено: Андрей Бушман от 26-05-2015, 13:49:10
Код - C# [Выбрать]
  1. var tbl = new Table();
  2. ...
  3. tbl = (Table) tr.GetObject(im.Lookup(tblsty.ObjectId).Value, OpenMode.ForWrite);
Зачем выполнять инициализацию через new, если ты всё равно не используешь значение, но выполняешь повторное присвоение значения? Вопрос риторический. Тогда уж лучше так:
Код - C# [Выбрать]
  1. var tbl = null;

Получать Entity для каждого ObjectId лишь для того, чтобы проверить тип - это затратно и нецелесообразно. Имхо лучше так:
Код - C# [Выбрать]
  1. // за рамками цикла
  2. var targetType = RXClass.GetClass(typeof(Entity));
  3. ..
  4. // в цикле
  5. if (id.ObjectClass.IsDerivedFrom(targetType)){
  6.  
  7. }

А это что за ужасы?
Код - C# [Выбрать]
  1. var ent = (Entity)myT.GetObject(obj, OpenMode.ForRead);
  2.         if (ent is Table)
  3.         {
  4.             var tblsty = (Table)myT.GetObject(obj, OpenMode.ForRead);
зачем тебе ещё и tblsty, если  ты уже получил искомое в ent? Эти две переменные у тебя указывают на один и тот же объект. Кроме того, если объект вдруг окажется не Entity то в первой строке кода ты получишь исключение.

А этой строчкой кода ты что хотел сказать?
Код - C# [Выбрать]
  1. tbl = (Table) tr.GetObject(im.Lookup(tblsty.ObjectId).Value, OpenMode.ForWrite);

Код - C# [Выбрать]
  1. if (tblsty.TableStyleName.Equals(tableStyle))
А если регистр символов не совпадёт? Вопрос риторический.

Цитировать
Просто имена переменных корявые
Корявые имена способствуют соответствующему восприятию, путанице и появлению ошибок.

Честно говоря, мне даже "больно" читать твой код... :(
Название: Re: Проблемы при копировании таблиц методом WblockCloneObjects
Отправлено: Александр Пекшев aka Modis от 26-05-2015, 14:06:44
Так лучше?
Код - C# [Выбрать]
  1. var doc = AcApp.DocumentManager.MdiActiveDocument;
  2. var currentDb = doc.Database;
  3. var tableStyle = "bla_bla_bla";
  4. // Read the DWG into a side database
  5. sourceDb.ReadDwgFile(sourceFileName, FileShare.Read, true, string.Empty);
  6. var tblIds = new ObjectIdCollection();
  7. // Создаем пустую таблицу
  8. Table tbl = null;
  9.  
  10. using (var sourceTr = sourceDb.TransactionManager.StartTransaction())
  11. {
  12.     var sourceBtr = (BlockTableRecord)sourceTr.GetObject(sourceDb.CurrentSpaceId, OpenMode.ForRead, false);
  13.     foreach (var objectId in sourceBtr)
  14.     {
  15.         if (sourceTr.GetObject(objectId, OpenMode.ForRead).GetType() == typeof(Table))
  16.         {
  17.             var sourceTable = (Table)sourceTr.GetObject(objectId, OpenMode.ForRead);
  18.             if (sourceTable.TableStyleName.Equals(tableStyle)) // Если стиль таблицы совпадает - это искомая таблица
  19.             {
  20.                 tblIds.Add(sourceTable.ObjectId);
  21.                 var im = new IdMapping();
  22.                 sourceDb.WblockCloneObjects(tblIds, currentDb.CurrentSpaceId, im, DuplicateRecordCloning.Replace, false);
  23.                 tbl = (Table)tr.GetObject(im.Lookup(sourceTable.ObjectId).Value, OpenMode.ForWrite);
  24.                 break;
  25.             }
  26.         }
  27.     }
  28.     sourceTr.Commit();
  29. }
  30. sourceDb.Dispose();
  31. if(tbl == null) return;
  32.  
  33. // Перемещаем
  34. var entJig = new TableJig(tbl, pointAligin, tbl.Width, tbl.Height);
  35. var pr = ed.Drag(entJig);
  36. if (pr.Status != PromptStatus.OK) return;
  37. doc.TransactionManager.QueueForGraphicsFlush();
  38. // Дальше идут другие действия с таблицей...
Этот кода - самый, что ни есть, стандартный из всех возможных примеров, что можно найти. Вот например http://adndevblog.typepad.com/autocad/2012/09/copying-deepcloning-from-one-drawing-to-another-using-net.html или http://through-the-interface.typepad.com/through_the_interface/2006/08/import_blocks_f.html
Обычные шаги:
1. Открыл базу данных документа
2. Нашел подходящий объект
3. Скопировал в текущую базу данных
Естественно таблица копируется с табличным стилем. А он за собой тянет текстовый стиль, который в свою очередь перезаписывается в текущем документе (если есть такой-же)
Название: Re: Проблемы при копировании таблиц методом WblockCloneObjects
Отправлено: Андрей Бушман от 26-05-2015, 14:08:22
Ты пробовал сделать то, что тебе советовали (http://adn-cis.org/forum/index.php?topic=2736.msg9589#msg9589) (п.2)?
Название: Re: Проблемы при копировании таблиц методом WblockCloneObjects
Отправлено: Андрей Бушман от 26-05-2015, 14:12:31
Этот кода - самый, что ни есть, стандартный из всех возможных примеров, что можно найти.
Допущенные тобой ошибки - твои личные. По обозначенным ссылкам они отсутствуют, так что не нужно пенять на других.
Название: Re: Проблемы при копировании таблиц методом WblockCloneObjects
Отправлено: Александр Пекшев aka Modis от 26-05-2015, 14:16:55
Ты пробовал сделать то, что тебе советовали (http://adn-cis.org/forum/index.php?topic=2736.msg9589#msg9589) (п.2)?
Да. Если выставить DuplicateRecordCloning.MangleName, то стили (табличный и текстовый) копируются в текущий документ с приставками к имени символов $0$. Конечно текстовый стиль не перезаписывается, но при каждом использовании кода текущие списки стилей будут, простите за мой французский, засераться новыми копиями стилей
Этот кода - самый, что ни есть, стандартный из всех возможных примеров, что можно найти.
Допущенные тобой ошибки - твои личные. По обозначенным ссылкам они отсутствуют, так что не нужно пенять на других.

Допущенные мной ошибки ни коем случаем не являются причиной вопроса, описанного в самом начале)))
Название: Re: Проблемы при копировании таблиц методом WblockCloneObjects
Отправлено: Андрей Бушман от 26-05-2015, 14:28:27
Попробуй вариант DuplicateRecordCloning.Ignore:
Цитировать
If a duplicate is found, ignore the clone, and continue to use the existing record in the destination database. This is how the INSERT command and Database.insert() operate.
Или DuplicateRecordCloning.UnmangleName:
Цитировать
Primarily used by RefEdit when it checks records back into the origin database. Any mangling done by MangleName is undone, and then it defaults to Ignore. In other words, if a duplicate is found after the mangling is removed, AutoCAD continues to use the existing record, and ignores the cloned one.
Их описание в справке не совсем ясно для меня, поэтому лучше проверить эти варианты на примере.
Название: Re: Проблемы при копировании таблиц методом WblockCloneObjects
Отправлено: Александр Пекшев aka Modis от 26-05-2015, 14:51:29
Попробуй вариант DuplicateRecordCloning.Ignore:
Цитировать
If a duplicate is found, ignore the clone, and continue to use the existing record in the destination database. This is how the INSERT command and Database.insert() operate.
Или DuplicateRecordCloning.UnmangleName:
Цитировать
Primarily used by RefEdit when it checks records back into the origin database. Any mangling done by MangleName is undone, and then it defaults to Ignore. In other words, if a duplicate is found after the mangling is removed, AutoCAD continues to use the existing record, and ignores the cloned one.
Их описание в справке не совсем ясно для меня, поэтому лучше проверить эти варианты на примере.
Вот тут и начинается самое интересное)
Сразу говорю - да, я согласен заранее, что код может быть "печальным"
Дальше по коду при действиях с этой таблицей есть динамическая вставка строк.
Запускается так (этот код идет прям сразу после приведенного выше)
Код - C# [Выбрать]
  1. // Динамическая вставка строк
  2. if (this.ChkDynRowsStandard.IsChecked.Value)
  3. {
  4.     var jig = new TableAddCellsJig
  5.     {
  6.         FPt = tbl.Position,
  7.         RowH = double.Parse(this.TbRowHeight.Text) * Scale(this.CbScales.SelectedItem.ToString()),
  8.         StopRows = int.Parse(xmltbl.Attribute("DataRow").Value),
  9.         TbH = tbl.GeometricExtents.MaxPoint.Y - tbl.GeometricExtents.MinPoint.Y
  10.     };
  11.     jig.StartJig(tbl);
  12. }
Ну и как это работает:
Извините, вам запрещён просмотр содержимого спойлеров.

Дело в том, что в чистом чертеже все работает. Но если я пытаюсь запустить код в существующем чертеже, то автокад вылетает с FatalError. Причем вот именно в тот момент, когда пытается сработать Jig
Название: Re: Проблемы при копировании таблиц методом WblockCloneObjects
Отправлено: Александр Ривилис от 26-05-2015, 15:11:43
Если резюмировать, то у тебя есть такие варианты:
1) Использовать DuplicateRecordCloning.Replace и тогда заменяются стили в чертеже-приёмнике.
2) Использовать DuplicateRecordCloning.Ignore и тогда используются стили, которые есть в чертеже-приёмнике. Кстати, это не только текстовый стиль, но и табличный стиль. То, что у тебя при этом возникает Fatal Error мы пока рассматривать не будем.
3) Использовать DuplicateRecordCloning.MangleName и тогда вопросов нет - свои текстовый и табличные стили.
Так какой вариант тебе нужен?
Название: Re: Проблемы при копировании таблиц методом WblockCloneObjects
Отправлено: Александр Пекшев aka Modis от 26-05-2015, 15:17:08
Если резюмировать, то у тебя есть такие варианты:
1) Использовать DuplicateRecordCloning.Replace и тогда заменяются стили в чертеже-приёмнике.
2) Использовать DuplicateRecordCloning.Ignore и тогда используются стили, которые есть в чертеже-приёмнике. Кстати, это не только текстовый стиль, но и табличный стиль. То, что у тебя при этом возникает Fatal Error мы пока рассматривать не будем.
3) Использовать DuplicateRecordCloning.MangleName и тогда вопросов нет - свои текстовый и табличные стили.
Так какой вариант тебе нужен?
Естественно идеальный вариант п.2. Кстати DuplicateRecordCloning.UnmangleName с виду делает почти тоже самое, что и DuplicateRecordCloning.Ignore
Остается вопрос - почему Fatal Error?

Пытался отладкой найти место где именно случается ошибка, но у меня какие-то проблемы - при отладке автокад открывается вообще без текстовых стилей
Вот я и пошел на форум - возможно проблема очевидна, но я ее не вижу
Название: Re: Проблемы при копировании таблиц методом WblockCloneObjects
Отправлено: Александр Ривилис от 26-05-2015, 15:26:48
Попробуй заменить
Код - C# [Выбрать]
  1. sourceDb.WblockCloneObjects(tblIds, currentDb.CurrentSpaceId, im, DuplicateRecordCloning.Ignore, false);
на
Код - C# [Выбрать]
  1. currentDb.WblockCloneObjects(tblIds, currentDb.CurrentSpaceId, im, DuplicateRecordCloning.Ignore, false);
Если не поможет. Делай новый минимальный тестовый проект, на котором воспроизводится Fatal Error при Ignore и чертеж с таблицей. Отправлю в Autodesk - пусть они поломают себе голову.
Название: Re: Проблемы при копировании таблиц методом WblockCloneObjects
Отправлено: Александр Ривилис от 26-05-2015, 15:28:37
Естественно идеальный вариант п.2.
Для меня этот вариант совсем не выглядит идеальным, т.к. при копировании таблицы я бы не хотел, чтобы у меня все элементы ячеек выглядели бы не так, как в исходном чертеже.
Название: Re: Проблемы при копировании таблиц методом WblockCloneObjects
Отправлено: Александр Пекшев aka Modis от 26-05-2015, 15:43:43
Проблему решил!
Как оказалось - совсем в другом месте нужно было искать))
Одно из действий с таблицей было ее масштабирование. Этого куска кода я даже не стал писать, т.к. не подумал на него
После кучи тестов я заметил, что fatal error выпадает только при динамической вставке строк в таблицу, у которой был изменен масштаб
после замены этого
Код - C# [Выбрать]
  1. var mat = Matrix3d.Scaling(Scale(this.CbScales.SelectedItem.ToString()), tbl.Position);
  2. tbl.TransformBy(mat);
на это
Код - C# [Выбрать]
  1. tbl.UpgradeOpen();
  2. var mat = Matrix3d.Scaling(Scale(this.CbScales.SelectedItem.ToString()), tbl.Position);
  3. tbl.TransformBy(mat);
  4. tbl.DowngradeOpen();
проблема исчезла
Естественно идеальный вариант п.2.
Для меня этот вариант совсем не выглядит идеальным, т.к. при копировании таблицы я бы не хотел, чтобы у меня все элементы ячеек выглядели бы не так, как в исходном чертеже.

В данном случае это все обусловлено тем, что файл из которого копируется таблица - это просто как исходник. А таблица как раз не должна по содержимому получится как в исходнике
Название: Re: Проблемы при копировании таблиц методом WblockCloneObjects
Отправлено: Александр Ривилис от 26-05-2015, 15:48:51
проблема исчезла
Несколько странно, т.к. в этом случае должен был быть не Fatal Error, а Exception с кодом NotOpenForWrite
Название: Re: Проблемы при копировании таблиц методом WblockCloneObjects
Отправлено: Александр Пекшев aka Modis от 26-05-2015, 15:53:58
проблема исчезла
Несколько странно, т.к. в этом случае должен был быть не Fatal Error, а Exception с кодом NotOpenForWrite

Проверил на 2010, 2013 и 2016 автокаде - работает)
Название: Re: Проблемы при копировании таблиц методом WblockCloneObjects
Отправлено: Александр Ривилис от 26-05-2015, 17:10:42
А каким местом на это влияло Replace и Ignore? Или при Replace тоже были Fatal Error, но ты на них не попадал?
Название: Re: Проблемы при копировании таблиц методом WblockCloneObjects
Отправлено: Александр Пекшев aka Modis от 26-05-2015, 17:21:45
А каким местом на это влияло Replace и Ignore? Или при Replace тоже были Fatal Error, но ты на них не попадал?
В том-то и юмор - при Replace все работало без проблем. Просто я столкнулся с проблемой переопределения текстового стиля и начал "копать" причину
Название: Re: Проблемы при копировании таблиц методом WblockCloneObjects
Отправлено: Андрей Бушман от 26-05-2015, 17:27:57
modplus.org
Симпатично сайт заделал, молодец! :) Правда "очепяток" в тексте многовато...
Название: Re: Проблемы при копировании таблиц методом WblockCloneObjects
Отправлено: Александр Ривилис от 26-05-2015, 17:32:50
Правда "очепяток" в тексте многовато...
Off-Topic: показать
Похоже и в программе тоже. ;)

Название: Re: Проблемы при копировании таблиц методом WblockCloneObjects
Отправлено: Александр Пекшев aka Modis от 26-05-2015, 17:37:19
Правда "очепяток" в тексте многовато...
Off-Topic: показать
Похоже и в программе тоже. ;)


Ну если сидеть и ждать, когда получится идеальная программа, чтобы поделиться ее с пользователем, то так и будешь сидеть... :-)
А так - модуль растет, развивается и уже получает своих поклонников
Название: Re: Проблемы при копировании таблиц методом WblockCloneObjects
Отправлено: Андрей Бушман от 26-05-2015, 17:40:22
Похоже и в программе тоже.
Имхо: если серьёзно за дело возьмётся + освоит модульное тестирование для своего кода, то софт получится хороший (за который деньги платить не жалко). С хорошими идеями у Модиса  проблем нет. У него, как я заметил, в основном качество реализации хромает (к сожалению). Но повторюсь - если он со временем всё же сможет сделать акцент на качестве, то это будет "бомба". :)
Название: Re: Проблемы при копировании таблиц методом WblockCloneObjects
Отправлено: Александр Ривилис от 26-05-2015, 17:42:04
С хорошими идеями у Модиса  проблем нет
Вот за это я ему плюсик и поставил.
Название: Re: Проблемы при копировании таблиц методом WblockCloneObjects
Отправлено: Андрей Бушман от 26-05-2015, 17:47:16
Ну если сидеть и ждать, когда получится идеальная программа, чтобы поделиться ее с пользователем, то так и будешь сидеть... :-)
Есть и обратная сторона медали: пользователь может так обжечься о качестве реализации того или иного продукта, что его потом и калачом не заманишь на повторную попытку использования (даже если очередная версия имеет намного более качественный код). Это тот случай, когда "ложечки нашлись, а осадочек остался". Психология, так сказать. Каждый разработчик для себя сам решает, на чём делать акцент: на фантиках, на скорости разработки или же на качестве. Подобрать оптимальное соотношение этих параметров - искусство (имхо).
Название: Re: Проблемы при копировании таблиц методом WblockCloneObjects
Отправлено: Александр Пекшев aka Modis от 26-05-2015, 18:21:14
Ну если сидеть и ждать, когда получится идеальная программа, чтобы поделиться ее с пользователем, то так и будешь сидеть... :-)
Есть и обратная сторона медали: пользователь может так обжечься о качестве реализации того или иного продукта, что его потом и калачом не заманишь на повторную попытку использования (даже если очередная версия имеет намного более качественный код). Это тот случай, когда "ложечки нашлись, а осадочек остался". Психология, так сказать. Каждый разработчик для себя сам решает, на чём делать акцент: на фантиках, на скорости разработки или же на качестве. Подобрать оптимальное соотношение этих параметров - искусство (имхо).

Ну, Андрей, тут все понятно и логично. У программы всегда будут постоянные пользователи, всегда будут те, кто обжегся, кому просто не понравилась или кому вообще не нужна) Это оправданный риск. К тому-же сейчас у модуля нет никакого пиара, кроме раздачи на рутрекере, потому-что есть еще места, которые нужно улучшать
Ну и по поводу улучшения - я не знаю ни одной программы, которая не выпускает обновлений. И всегда в этих обновлениях есть исправление ошибок. То же можно сказать и об операционных системах, да и о самом автокаде. Например сейчас у меня стоит Windows 10 и естественно в ней куча багов, но это не значит, что я не буду ей пользоваться. Однако до сих пор есть люди, которые кричат, что лучше всего была Windows XP) Всем не угодишь
Название: Re: Проблемы при копировании таблиц методом WblockCloneObjects
Отправлено: Дима_ от 26-05-2015, 22:44:20
Off-Topic: показать
Что-то совсем заработался - целый день сижу за компьютером и программирую - даже сюда не заглянуть

Я еще один раз убедился, что лучший метод разобраться с ошибкой - это написать "хелло ворд" с ней.
Название: Re: Проблемы при копировании таблиц методом WblockCloneObjects
Отправлено: Александр Пекшев aka Modis от 27-05-2015, 00:25:20
Off-Topic: показать
Что-то совсем заработался - целый день сижу за компьютером и программирую - даже сюда не заглянуть

Я еще один раз убедился, что лучший метод разобраться с ошибкой - это написать "хелло ворд" с ней.
Лучший метод - отвлечься на другую проблему ) Или попробовать объяснить проблему кому-нибудь. Обычно в процессе объяснения сам понимаешь в чем дело
Название: Re: Проблемы при копировании таблиц методом WblockCloneObjects
Отправлено: Андрей Бушман от 27-05-2015, 10:53:14
лучший метод
Лучший метод
Лучший метод - TDD (https://ru.wikipedia.org/wiki/%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0_%D1%87%D0%B5%D1%80%D0%B5%D0%B7_%D1%82%D0%B5%D1%81%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5) (имхо). В противном случае* ошибки чаще будет обнаруживаться не разработчиком, но пользователями его ПО, что существенно будет понижать карму как ПО, так и разработчика (имхо).

* - что, впрочем, зависит так же от внимательности и степени концентрации разработчика. Например, А.Н. Ривилис тесты не пишет, но качество его ПО вполне приемлемое (ошибки какие-то, помню выявлялись, но не существенные и не частые).
Название: Re: Проблемы при копировании таблиц методом WblockCloneObjects
Отправлено: Дима_ от 27-05-2015, 21:01:47
Я писал про "разобраться с ошибкой" - то есть "вылечить" ее, а не способ найти. Я просто всегда начинаю писать код с "хелловорда" - потихоньку усложняя его. И не понимаю тех формучан (а этим грешат и достаточно опытные) которые выкладывают кода на строк эдак 800 и говорят - у меня тут где-то "фаталит" - то есть - я тут "панописал" - но мне самому разбираться лень - а Вам все равно делать нечего. Еще, ну по крайней мере у меня это на 100%, использование "чистых" функций - https://ru.wikipedia.org/wiki/Чистота_функции (https://ru.wikipedia.org/wiki/Чистота_функции) многократно уменьшило число "сюрпризов".
з.ы. но по сути все "вылетающие" ошибки - это ерунда - не приятно конечно, но не смертельно - гораздо хуже когда программа что-то не так насчитает (ошибка в логике) - вот здесь могут быть сильные неприятности - тесты на данный вид ошибок "обязательная" процедура - причем желательно на объеме проверенных данных побольше (хорошо если эти данные есть) - конечно тоже не гарантирует, что ошибок не будет - но спится гораздо спокойней - когда по твоему "свежему расчетнику" объект на десяток другой "лямов" посчтитали.
Название: Re: Проблемы при копировании таблиц методом WblockCloneObjects
Отправлено: Андрей Бушман от 27-05-2015, 21:10:26
Я писал про "разобраться с ошибкой" - то есть "вылечить" ее, а не способ найти.
А что, ошибки можно "лечить" не находя их? :)
Название: Re: Проблемы при копировании таблиц методом WblockCloneObjects
Отправлено: Александр Ривилис от 27-05-2015, 21:10:42
И не понимаю тех формучан (а этим грешат и достаточно опытные) которые выкладывают кода на строк эдак 800 и говорят - у меня тут где-то "фаталит" - то есть - я тут "панописал" - но мне самому разбираться лень - а Вам все равно делать нечего.
Браво! Я каждый раз "намекаю", что если хотите, чтобы помогли с поиском ошибки и/или отправкой бага в Autodesk - минимизируйте код, создайте отдельный проект, которого достаточно для воспроизведения ошибки. Увы, но не всегда "намёк" воспринимается. Создаётся впечатление, что создать новый проект - это самое сложная процедура...
Название: Re: Проблемы при копировании таблиц методом WblockCloneObjects
Отправлено: Александр Пекшев aka Modis от 27-05-2015, 21:23:44
Какие странные пошли разговоры)
Ошибки есть и будут всегда - код пишет человек, который может и отвлечься и устать, и прочее. И очень часто бывает, что "смотришь в книгу - видишь фигу" и это никоем случаем не зависит от твоего уровня умений и знаний - просто так бывает
И спросить кого-то - это всегда только плюс. Когда начинаешь обсуждать вопрос - бывает сам и "доходишь" до проблемы
И зачем делать форум и постоянно на нем отвечать, если этого не хочешь. А если хочешь - то зачем "направлять" людей на то, чтобы они "не ленились, делали новые проекты и сами находили ошибки"? Тогда все станут такими молодцами, что и форум не нужен будет) И общение)

И вообще - вопрос, заданный в топике, нашел решение! Закрывайте тему и хватит тут флудить! Для этого обычно есть специальные ветки!
Название: Re: Проблемы при копировании таблиц методом WblockCloneObjects
Отправлено: Александр Ривилис от 27-05-2015, 21:51:11
Ошибки есть и будут всегда - код пишет человек, который может и отвлечься и устать, и прочее.
Согласен.
И спросить кого-то - это всегда только плюс.
Тоже согласен.
А если хочешь - то зачем "направлять" людей на то, чтобы они "не ленились, делали новые проекты и сами находили ошибки"?
А вот тут ты не прав. Во-первых, лично у меня вызывает отторжение и нежелание помогать человеку, которому лень пошевелится для решения собственной проблемы. Хочешь чтобы тебе помогли? Пожалуйста. Но и ты не ленись принять в этом участие. В данном конкретном случае я думал, что ты проверил все варианты и вышел на баг в AutoCAD .NET API. А если это баг, то есть и достаточно четкие и понятные правила для оформления его и отсылки в Autodesk, которые нужно соблюсти. В первую очередь это проект с максимально простым кодом, который этот баг воспроизводит. Вот об этом я не устаю повторять. ;)
И вообще - вопрос, заданный в топике, нашел решение! Закрывайте тему и хватит тут флудить! Для этого обычно есть специальные ветки!
Не нужно учить администратора тому, как управлять форумом. А то заставлю учить правила и сдавать экзамен! :D
Название: Re: Проблемы при копировании таблиц методом WblockCloneObjects
Отправлено: Дима_ от 27-05-2015, 21:52:32
Создаётся впечатление, что создать новый проект - это самое сложная процедура...
Которая не редко еще и показывает что ошибка "не здесь".
То Андрей - можно видеть что ошибка есть (например фатал - он немножко заметен) но не знать как с ней бороться и собственно где она.