создание точек при помощи пользователя, затем создание окружности на точке!help!

Автор Тема: создание точек при помощи пользователя, затем создание окружности на точке!help!  (Прочитано 52258 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

Оффлайн zmk.autocadАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 64
  • Карма: 0
Да, так пишу программу для себя, и  f_handle это считанный из файла handle объекта, который был записан.
А вообще я почему то хотел все исключения потом написать, если всё будет работать. Так как ещё некоторым коллегам так же не помешала бы эта программа.

Чем она полезна?
имеется 100 точек и их высотка,
через 2 недели приходят те же точки но с немного другой высоткой.
мы открываем exel считаем отклонения от начальной высоты, т.е. их разность . распечатываем. сидит с листком смотрим
м324 ищем точку на чертеже и руками прописываем отклонения.
далее м313 и опять. очень нудная работа, причем пустяковая.
а если этот процесс автоматизировать, то большая экономия времени. можно сделать более серьезные вещи за это время.

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
А вообще я почему то хотел все исключения потом написать, если всё будет работать.
Никогда не откладывай на потом - пиши нормально сразу. Практика показывает, что это самое "потом" либо совсем не наступает, либо половина из намеченных на "потом" пунктов забывается.

Оффлайн zmk.autocadАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 64
  • Карма: 0
не преобразовывается число в 16  систему счисления -)
его история :
FP_result = acMText.Handle.ToString();
затем сохранен и считан из файла
теперь
handle_long = Convert.ToInt64(f_handle, 16);
выдает ошибку.
может из-за кодировки, хотя я не менял её, значит unicod

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Сохранять в строку 10-тичное представление и затем, читая его обратно, пытаться интерпретировать строку уже как 16-тиричное - это, конечно, оригинально. Почитай про форматирование строковых представлений чисел (см. перегруженные версии метода ToString()).
« Последнее редактирование: 22-04-2015, 10:23:28 от Андрей Бушман »

Оффлайн zmk.autocadАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 64
  • Карма: 0
Я боюсь что думаю не в том направлении.
как это всё должно выглядеть?
берем значение hadle.value и записываем его в переменную типа long
совмещаем с остальными строковыми параметрами методом string.format();
Считываем из файла и получаем : 592
как получается 16 система счисления тут вообще не появлялась.

а если брать hadle.ToString то получаем строковую переменную формата 16-ой системы счисления.


Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
как получается 16 система счисления тут вообще не появлялась.
Запятые расставь корректно, иначе х.з. как тебя понимать. И не ленись пользоваться поиском, не забывая так же про MSDN.

Оффлайн zmk.autocadАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 64
  • Карма: 0
получается шестнадцатеричная система счисления тут вообще не появлялась.

а если брать hadle.ToString то получаем строковую переменную формата 16-ой системы счисления.

Суть вопроса:
мне в файл надо записывать hadle.value , которое представляет формат : 592
или hadle.toString, где выходит формат : 53B

и перед записью в файл надо переводить в 16-ричную систему счисления?

Оффлайн trir

  • ADN Club
  • ****
  • Сообщений: 475
  • Карма: 63
А почему не использовать блоки с атрибутами? И ключ в атрибутах прописать...

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
А почему не использовать блоки с атрибутами? И ключ в атрибутах прописать...
А вот об этом я писал еще на первой странице этого обсуждения. Но меня zmk.autocad или не понял, или проигнорировал.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн zmk.autocadАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 64
  • Карма: 0
Я не совсем понимаю как это получится. и если в блоке MText и Circle то как я в будущем буду редактировать MText? и в этом случае как я понимаю нельзя будет подвинуть вручную текст, без окружности.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
В AutoCAD'е есть многострочные атрибуты и определения атрибутов (классы MTextAttribute и MTextAttributeDefinition).
Атрибуты блока можно двигать независимо от вставки блока и у каждого атрибута может быть своё, отличное от атрибута другого блока значение.
Учи матчасть. :)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн zmk.autocadАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 64
  • Карма: 0
Ну теперь уже начал так. -(

Вот я не могу понять главного

handle.tosting(); мне выдает 24D
Это что? это как бы уже готовое 16-ричное значение, просто текстовый вариант. т.е. его надо не переводить в 16-ричную систему, а преобразовать тип. так получается?

Оффлайн zmk.autocadАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 64
  • Карма: 0
вот без сохранения в файл работает

Код - C# [Выбрать]
  1. FP_result_long = acMText.Handle.Value;
  2.  
  3.                         Handle n_h = new Handle(FP_result_long);
  4.  
  5.                         ObjectId obj_id = ObjectId.Null;
  6.                         Boolean flag_get = acDocBase.TryGetObjectId(n_h, out obj_id);
  7.                         if (flag_get == false)
  8.                         {
  9.                             return "Error3";
  10.                         }
  11.  
  12.                         string obj_class_name = obj_id.ObjectClass.Name;
  13.                         DBObject get_object = acDocTr.GetObject(obj_id, OpenMode.ForWrite, true);
  14.                         MText haha = (MText)get_object;
  15.                         haha.Contents = "ewwe";
  16.                         acDocTr.Commit();
а здесь работа идет не с handle.toString(); , a c handle.value которое имеет тип 582. дак зачем тогда вообще 16-ричная система счисления?

Оффлайн zmk.autocadАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 64
  • Карма: 0
Всем БОЛЬШОЕ СПАСИБО! Теперь всё работает!
теперь осталось по мелочи доделать!

Оффлайн zmk.autocadАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 64
  • Карма: 0
блин как он так считает?
double x1 = 123,1385
double x2 = 123,1285
(x1-x2)*1000 = 9.99999999999091