| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
22.08.2006, 16:40 | #1 | |
Округление координат, полилиний, центров окружностей, блоков
Москва
Регистрация: 22.08.2006
Сообщений: 9
|
||
Просмотров: 24162
|
|
||||
Регистрация: 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
|
Цитата:
Код:
Что же касается округления до десятокв и сотен, да еще и с учетом с учетом единиц, то это требует отдельной программы. |
|||