|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
22.08.2006, 16:40 | #1 | |
Округление координат, полилиний, центров окружностей, блоков
Москва
Регистрация: 22.08.2006
Сообщений: 9
|
||
Просмотров: 24132
|
|
||||
Регистрация: 22.08.2006
Москва
Сообщений: 9
|
Все что я смог найти это такой код программы, от господина kpblc (defun c:round-coord (/ selset item x_round y_round z_round point vla_point)
(vl-load-com) (if (not *kpblc-activedoc*) (setq *kpblc-activedoc* (vla-get-activedocument (vlax-get-acad-object))) ) ;_ end of if (vla-startundomark *kpblc-activedoc*) (setq counter 0 selset (ssget '((0 . "POINT"))) ) ;_ end of setq (if selset (progn (setq x_round (getint "\nКоличество знаков после запятой для X <0> : ")) (if (not x_round) (setq x_round 0) (setq x_round (abs x_round)) ) ;_ end of if (setq y_round (getint (strcat "\nКоличество знаков после запятой для Y <" (itoa x_round) "> : " ) ;_ end of strcat ) ;_ end of getint ) ;_ end of setq (if (not y_round) (setq y_round x_round) (setq y_round (abs y_round)) ) ;_ end of if (setq z_round (getint (strcat "\nКоличество знаков после запятой для Z <" (itoa x_round) "> : " ) ;_ end of strcat ) ;_ end of getint ) ;_ end of setq (if (not z_round) (setq z_round x_round) (setq z_round (abs z_round)) ) ;_ end of if (while (and selset (> (sslength selset) 0) ) ;_ end of and (setq item (ssname selset 0)) (ssdel item selset) (setq item (vlax-ename->vla-object item) point (vlax-safearray->list (vlax-variant-value (vla-get-coordinates item)) ) ;_ end of vlax-safearray->list vla_point (vlax-make-safearray vlax-vbdouble '(0 . 2)) ) ;_ end of setq (vlax-safearray-fill vla_point (list (atof (rtos (car point) 2 x_round)) (atof (rtos (cadr point) 2 y_round)) (atof (rtos (caddr point) 2 z_round)) ) ;_ end of list ) ;_ end of vlax-safearray-fill (vla-put-coordinates item vla_point) ) ;_ end of while ) ;_ end of progn ) ;_ end of if (vla-regen *kpblc-activedoc* acallviewports) (vla-endundomark *kpblc-activedoc*) ) ;_ end of defun но он только для точек, может, кто поможет на основании его сделать выравнивание вершин для полилиний, линий, центров окружностей, и точек вставок блоков |
|||
|
||||
Project Engineer Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392
|
Цитата:
Код:
|
|||
|
||||
Цитата:
__________________
Строишь завод, проводишь реактора испытание? грохнется иль долбанет - дважды проверь заранее! |
||||
|
||||
А допустим вариант для выбраных объектов. При чем с жестким требованием выбора объектов округления, а то можно весь чертеж испортить.
И буду благодарить ......
__________________
Строишь завод, проводишь реактора испытание? грохнется иль долбанет - дважды проверь заранее! |
||||
|
||||
Project Engineer Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392
|
Цитата:
|
|||
|
||||
Project Engineer Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392
|
Цитата:
|
|||
|
||||
Регистрация: 22.08.2006
Москва
Сообщений: 9
|
РЕЗУЛЬТАТЫ/
Странно, но у меня ничего не заработало 1. ПОСЛЕ команды "CRDRNDUP" идет запрос "Округлять координаты [Вместе/Порознь]: ?" затем еще один запрос "Количество знаков после запятой <1> :". на этом обращение с пользователем заканчивается. Дальше появляется вот такие надписи "Command: Regenerating model." и "Command: nil" Все. Как-то осталось без внимания момент выбора объектов. И простите мою наглость но можно сразу задать что количество знаков после запетой всегда равно "0", а в место этого лучше вести вопрос до какого целого число округлять. (например округлить до 5 мм, или до 1 метра). Уважаемый Лентяй, за ту помощь, которую оказываете Вы нам оказываете, Вас не возможно забыть. Внутренняя чистота чертежей будет всегда мне напоминать о Вас. |
|||
|
||||
Регистрация: 22.08.2006
Москва
Сообщений: 9
|
Уважаемый Лентяй, приношу Вам свои извинения. Все работает, вершины точек линий переносятся в новое положение, блоки то же, окружности также, Вот только первая вершина полилиний остается на месте и не изменяется. И не сочти те меня нахалом но можно все же сделать выбор объектов, и выбор степени округления?
|
|||
|
||||
Project Engineer Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392
|
Цитата:
А если вам нужен выбор объектов, то держите доработку. Код:
Опять же, проьба доложито результатах, потому как проверять мне было снова лениво :twisted: :twisted: Цитата:
|
|||
|
||||
Регистрация: 22.08.2006
Москва
Сообщений: 9
|
Да знаю я, что нету в акаде нет размерности координат. Скажу так Нужна степень округления координат, измеряемая в единицах чертежа. Понятно, если чудик из ВК все чертит метрах, то округлять его координаты нужно до 0,005. Если архитектурная часть, где одна единица чертежа равна 1 миллиметру, 5 единиц измерения чертежа, я думаю достаточная точность.
|
|||
|
||||
А вот бы еще чтобы округлять до 100 или до 1000 или до 10 или до 5 или до 37 и цены вам нет
__________________
Строишь завод, проводишь реактора испытание? грохнется иль долбанет - дважды проверь заранее! |
||||
|
||||
Project Engineer Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392
|
Цитата:
|
|||
|
||||
Регистрация: 22.08.2006
Москва
Сообщений: 9
|
ВК чертит так, если есть длина 1 метр, в пространстве модели это 1 единица, а не 1000 как мне хотелось бы. Ладно ВК можно и отмасштабировать. НЕ проблема. Но как сделать так чтоб последняя вершина полилинии то же меняла свое положение, я не знаю Уважаемый Лентяй В коде программы который вы тут представили есть такая ошибка, не могли бы ВЫ это подправить. а то получается что все точки меняют свое положение, а последняя вершина полилинии нет. НЕ порядок И так глобально, возможно ли в лиспе организовать округление? что то вроде ROUND. Ели нужно всю идею переваривать на VBA?
|
|||
|
||||
Регистрация: 22.08.2006
Москва
Сообщений: 9
|
Спасибо, действительно очень сильно помогли. Не знаю, что случилось, но первый вариант заработал, а второй выдает ошибку "Automation Error. Description was not provided", но при этом то же работает. Странно. . А по поводу степени округления координат, мне так и не понятно, возможно это реализовать на лиспе, или нет?
|
|||
|
||||
Project Engineer Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392
|
Цитата:
Код:
Что же касается округления до десятокв и сотен, да еще и с учетом с учетом единиц, то это требует отдельной программы. |
|||
|
||||
Цитата:
http://forum.dwg.ru/showthread.php?p=26859#post26859 Alaspher №10 Текст приведу здесь Код:
(pl:round 1234.346 2) -> 1234.35 (pl:round 1234.346 0) -> 1234 (pl:round 1266.346 -1) -> 1270 (pl:round 1266.346 -2) -> 1300 Последний раз редактировалось Кулик Алексей aka kpblc, 18.09.2015 в 23:57. |
||||
|
||||
Котло- и реакторостроение Регистрация: 25.02.2010
Барнаул
Сообщений: 807
|
Граждане приветствую. Вот код взятый отсюда http://www.caduser.ru/forum/index.ph...#message173683 и подправленный автором, скинул мне через личку, но у меня все равно не работает. Кто подскажет в чем дело.
Никакого округления не происходит. Как были координаты со знаками после запятой так они и остаются. Никаких ошибок при выполение команды не происходит. Автокад 2011, русский, леценз. PS Выложу на всякий случай пример. В файле линия, у нее координата Х дробная. Хотелось бы ее округлить до целого значения. Код:
Последний раз редактировалось Astartes, 15.10.2010 в 11:52. |
|||
|
||||
Котло- и реакторостроение Регистрация: 25.02.2010
Барнаул
Сообщений: 807
|
Я просто не совсем понял как задать точность
Команда: ROUND-COORD Значение округления координат <Приводить к целым> Что здесь написать если я хочу округлить до десятых? Сори если вопрос тупой )) Значение округления координат <Приводить к целым>0.1 Так ? Вроде разобрался )) Последний раз редактировалось Astartes, 15.10.2010 в 15:06. |
|||
|
||||
Gti Регистрация: 14.01.2010
МО Железнодорожный
Сообщений: 121
|
To Лентяй
Взял код из поста #10, всё работало (у меня AutoCad2011 x64), затем заменил строку из поста #18 изменений вроде не обнаружилось, а вот строка из поста #20 вызвала отказ в исполнении, пишет сообщение: неизвестная команда CrdRndUp. Но суть вопроса в следующем: можно ли подправить программу, что бы в случае если отбрасываемая часть округляемого числа равна половине предыдущего разряда, то округление производиться до ближайшего четного. Например: 3.75 = 3.8 3.85 = 3.8 Существующий же алгоритм выполняет простое арифметическое округление 3.85 = 3.9 Заранее спасибо! |
|||
|
||||
Лентяй: программа задачу выполняет, спасибо! Но после нее почему-то резко уменьшилась рабочая область файла. И undo привело к глухому зависанию Автокада.
Еще сюрприз: при вызове программы CrdRndUp в пространстве листа, началось бесконечное ее выполнение, остановить которое удалось только Диспетчером задач. |
||||
|
||||
Регистрация: 19.10.2012
Киев
Сообщений: 749
|
здравствуйте проблема почти таже
ГПисты привыкли кирпичом в пещере на стенах рисовать - потом пересели на кульманы всех все устраивало но сейчас век когда нужно рисовать четко и красиво тем более есть комп для этого помогите пожалуйста два лиспа которые здесь представлены работают, но какбы не совсем то что нужно, один просто округляет до количества знаков второй только с отрезками работает ((( в приложенном файле кусочек плана с очень не точными координатами мне бы слепить результат тех двух лиспов в один и чтобы все работало кстати что такое ординатный размер ГП не вкурсе - нужно самому координатную сетку с чертежом переносить кудой нужно Последний раз редактировалось PsixVK, 09.11.2012 в 19:54. |
|||
|
||||
__________________
Как использовать код на Лиспе читаем здесь |
||||
|
||||
Регистрация: 19.10.2012
Киев
Сообщений: 749
|
Цитата:
работает только с линиями, а полилинии и остальное чет отказывается двигать |
|||
|
||||
Цитата:
Немного (процентов на 90 ) изменил код #22 Сделал обновление через entmod. Тестировал без фанатизма, должно работать. PS. Убегаю регистрироваться на Сапряжение. PPS Если не нужно округлять радиусы, то в строке Код:
Код:
__________________
Как использовать код на Лиспе читаем здесь |
||||
|
||||
Регистрация: 19.10.2012
Киев
Сообщений: 749
|
здравствуйте
возник вопрос а можно как то сделать так что бы припустим все линии и полинии были строго вертикально и строго горизонтально друг к другу и относительно МСК для чего: припустим есть у нас генеральный план (реконструкция) там все сети, здания сделаны абы как под разными углами друг к другу. нужно с этого чуда сделать принципиальную схему тоесть сделать все упрощенно и ровненько (горизонтально и вертикально) буду очень благодарен |
|||
|
||||
Регистрация: 15.01.2010
Сообщений: 202
|
Проверял в AutoCAD 2011. И CrdRndUp и РС прекрасно работают . Единственное замечание - выносные размерные линии остаются с прежними координатами. Получается, что все размеры нужно вытирать и проставлять по новой, иначе выносные не совпадают с объектом образмеривания. Может уже и это можно подправить? Тогда действительно этим функциям цены не будет.
|
|||
|
||||
Регистрация: 19.10.2012
Киев
Сообщений: 749
|
спасибо
то что доктор прописал ) а еще бы сделать что бы лиспик объкекты,которые были в цепочке, проецировало на одну прямую тоесть чтоб цепочка сохранялась тоесть припустим линия(полилиния)+ окружность+линия(полилиния)+и т.д........ (проходящие под углом к МСК) так и оставались в цепочке но уже горизонтально или вертикально |
|||
|
||||
Оснащение проходки горных выработок, ПОС, нормоконтроль, КР, АР Блог Регистрация: 30.01.2008
Ленинград
Сообщений: 18,685
|
Цитата:
У меня одного этот лисп не работает ? Цитата:
Цитата:
Простите, у меня руки из жопы растут. Всё работает.
__________________
"Безвыходных ситуаций не бывает" барон Мюнхаузен |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,835
|
Возможно, скопировал не все (забыл скобку или две).
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Чтобы "зациклить" темы Округление координат кратно значению
__________________
Как использовать код на Лиспе читаем здесь |
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,835
|
В таком случае продолжаем в той теме, а эту я закрываю )
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||