| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Готовые программы > Округление координат кратно значению

Округление координат кратно значению

Ответ
Поиск в этой теме
Непрочитано 13.12.2012, 02:35 #1
Округление координат кратно значению
baaba
 
архитектор
 
Москва
Регистрация: 07.07.2007
Сообщений: 622

Часто возникает потребность избавиться от "паразитных" значений при работе над чертежами, когда координаты узловой точки линии могут быть скажем такие:
0.111222,23.999999
что может раздражать, мешать работать (т. к. потом возникают проблемы со штриховками, два миллиметра могут "гулять" по всему проекту). Просмотрел несколько давно существующих похожих тем "округления координат". Однако, потратив около двух часов времени, я так и не нашёл того что мне нужно: утилиту для округления координат узловых точек примитивов чертежа скажем кратно 5 мм, что достаточно для строительства. Пришлось потратить ещё 4 часа и вот что у меня получилось:
Код:
[Выделить все]
; The program rounds the values ​​x, y, z coordinates of the point of the lines, polylines,
; circles, multiply the specified value.
; Radius, coordinates community centers also become multiple setpoint.
; This can be avoided in the drawings of the coordinates of the form 150.0989,
; do say multiple dimensions of 5 mm, which is sufficient for construction drawings.

; Программа округляет значения x, y, z координат узловых точке отрезков,
; полилиний, кругов кратно заданному значению.
; Радиусы, координаты центров кругов так же становятся кратными заданному значению.
; Этим можно избежать в чертежах значений координат вида: 150.0989,
; сделать все размеры кратными скажем 5 мм, что достаточно для
; строительных чертежей

(defun rn (num w)
	(* (atof (rtos (/ num w) 2 0)) w)
)

(defun rn1 (lst w)
	(if (or
			(eq 10 (car lst))
			(eq 11 (car lst))
			(eq 40 (car lst))
		)

		(if (listp (cdr lst))
			(cons 
				(car lst)
				(mapcar '(lambda (x) (rn x w)) (cdr lst))
			)
			(cons (car lst) (rn (cdr lst) w))
		)
		lst
	)
)

(defun c:rnd (/ ss w cnt inent)
	(setq
		w (getreal "Enter the value to which the round: ")
		ss (ssget)
		cnt 0
	)
	(while (setq inent (entget (ssname ss cnt)))
		(progn
			(entmod (mapcar '(lambda (x) (rn1 x w)) inent))	
			(setq cnt (1+ cnt))		
		)
	)
	(princ)
)
(princ "type: \"RND\"")
(princ)
Прошу прощения за несколько неоптимальный код: алгоритм округления выполнен несколько мудрёно, возможно следовало бы "втащить" подсобные функции в тело основной функции, дабы не сорить в памяти. Но т. к. программа "ругается" при каждом выполнении, а я не владею средствами отладки программ (да я кустарь), функции оставлены "снаружи", что бы можно было починить "на ходу" если что отвалится
Может быть кому-нибудь пригодится!
=================================================
PS Вопрос модераторам форума:
попробовал скопировать текст программы. При вставке получаются номера строк (я пользовался тегом LISP). Такой код неработоспособен. Обычным notepad это трудно исправить. По-этому я добавляю вложение, использую тег [code] вместо [code] + [lisp].
Предлагаю исправить тег LISP так что бы не показывались номера строк, или при "выделить всё" они не выделялись.

Вложения
Тип файла: zip rnd.zip (694 байт, 282 просмотров)


Последний раз редактировалось baaba, 13.12.2012 в 20:34.
Просмотров: 23274
 
Непрочитано 14.12.2012, 14:18
#2
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Часто возникает потребность избавиться от "паразитных" значений при работе над чертежами, когда координаты узловой точки линии могут быть скажем такие:
0.111222,23.999999
Если будешь чертить, а не рисовать, то и проблем таких не будет.

Цитата:
Однако, потратив около двух часов времени, я так и не нашёл того что мне нужно: утилиту для округления координат узловых точек примитивов чертежа скажем кратно 5 мм, что достаточно для строительства. Пришлось потратить ещё 4 часа и вот что у меня получилось
Бесполезное и вредное велосипедостроение. Плохо искал.

Миниатюры
Нажмите на изображение для увеличения
Название: округление3.png
Просмотров: 3153
Размер:	40.6 Кб
ID:	92491  
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:

Последний раз редактировалось hwd, 14.12.2012 в 14:23.
hwd вне форума  
 
Непрочитано 14.12.2012, 14:19
#3
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 36,531


hwd, показ координат и размеров - одно, а их истинные значения - совсем другое Ты ж сам в курсе ))
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 14.12.2012, 14:25
#4
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
hwd, показ координат и размеров - одно, а их истинные значения - совсем другое Ты ж сам в курсе ))
да один хрен - обновил скрин для коодинат (настройки ведь идентичны). Используя "родное" округление не теряется связь с фактическим значением размеров, а "перенабивание" убивает её.

UPD а блин ))) Я неправильно понял автора... Он округляет координаты точек примитивов, а не снимаемые с них размеры... Тогда звиняюсь...
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:

Последний раз редактировалось hwd, 14.12.2012 в 14:37.
hwd вне форума  
 
Непрочитано 14.12.2012, 14:46
#5
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,682
Отправить сообщение для Do$ с помощью Skype™


Цитата:
; Программа округляет значения x, y, z координат узловых точке отрезков,
; полилиний, кругов кратно заданному значению.
Какой-то явно неполный список, судя по:
Цитата:
ss (ssget)
Do$ вне форума  
 
Автор темы   Непрочитано 15.12.2012, 17:15
#6
baaba

архитектор
 
Регистрация: 07.07.2007
Москва
Сообщений: 622
<phrase 1= Отправить сообщение для baaba с помощью Skype™


Цитата:
Сообщение от Do$ Посмотреть сообщение
ss (ssget)
Стоило бы добавить фильтры на ssget?
baaba вне форума  
 
Непрочитано 15.12.2012, 20:34
#7
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 36,531


Цитата:
Сообщение от baaba Посмотреть сообщение
Вопрос модераторам форума:
попробовал скопировать текст программы. При вставке получаются номера строк (я пользовался тегом LISP). Такой код неработоспособен. Обычным notepad это трудно исправить. По-этому я добавляю вложение, использую тег [code] вместо [code] + [lisp].
https://www.youtube.com/watch?v=wFKc6EfRofo
Касательно кода, как альтернативный вариант:
Код:
[Выделить все]
 (vl-load-com)

(defun c:roundval (/ adoc selset value round _kpblc-conv-selset-to-enam _kpblc-ent-modify-autoregene)

  (defun _kpblc-ent-modify-autoregen (ent bit value ext_regen / ent_list old_dxf new_dxf layer_dxf70)
                                     ;|
*    Функция модификации указанного бита примитива
*    Параметры вызова:
*	entity	- примитив, полученный через (entsel), (entlast) etc
*	bit	- dxf-код, значение которого надо установить
*	value	- новое значение
*	regen	- выполнять или нет регенерацию примитива сразу. t/ nil
*    Примеры вызова:
(_kpblc-ent-modify-autoregen (entlast) 8 "0" t)	; перенести последний примитив на слой 0
(_kpblc-ent-modify-autoregen (entsel) 62 10 nil)	; установить выбранному примитиву цвет 10
*    Возвращаемое значение:
*	примитив с модифицированным dxf-списком. Примитив перерисовывается в
* зависимости от значения ключа ext_regen
|;
    (if (not
          (and
            (or
              (= (strcase (cdr (assoc 0 (entget ent))) nil) "STYLE")
              (= (strcase (cdr (assoc 0 (entget ent))) nil) "DIMSTYLE")
              (= (strcase (cdr (assoc 0 (entget ent))) nil) "LAYER")
              ) ;_ end of or 
            (= bit 100)
            ) ;_ end of and 
          ) ;_ end of not 
      (progn
        (setq ent_list (entget ent)
              new_dxf  (cons bit
                             (if (and (= bit 62) (= (type value) 'str))
                               (if (= (strcase value) "BYLAYER")
                                 256
                                 0
                                 ) ;_ end of if 
                               value
                               ) ;_ end of if 
                             ) ;_ end of cons 
              ) ;_ end of setq 
        (if (not (equal new_dxf (setq old_dxf (assoc bit ent_list))))
          (progn
            (entmod (if old_dxf
          ;(_KPBLC-LIST-ADD-OR-SUBST ent_list bit (cdr new_dxf))
                      (subst new_dxf old_dxf ent_list)
                      (append ent_list (list new_dxf))
                      ) ;_ end of if 
                    ) ;_ end of entmod
            (if ent_regen
              (entupd ent)
              (redraw ent)
              ) ;_ end of if
            ) ;_ end of progn 
          ) ;_ end of if 
        ) ;_ end of progn 
      ) ;_ end of if 
    ent
    ) ;_ end of defun

  (defun _kpblc-conv-selset-to-ename (selset / tab item)
                                     ;|
*    Преобразование набора, полученного через ssget, в список ename-представлени
* примитивов.
*    Параметры вызова:
	selset	набор примитивов
*    Примеры вызова:
(_kpblc-conv-selset-to-ename (ssget))
|;
    (cond
      ((not selset) nil)
      ((= (type selset) 'pickset)
       (repeat (setq tab  nil
                     item (sslength selset)
                     ) ;_ end setq
         (setq tab (cons (ssname selset (setq item (1- item))) tab))
         ) ;_ end repeat
       )
      ((listp selset) selset)
      ) ;_ end of cond
    ) ;_ end of defun

  (defun round (value precision)
;;; http://forum.dwg.ru/showthread.php?t=21977
    ;|Функция (round число <точность округления>)
Аргумент ЧИСЛО округляется в зависимости от значения аргумента <точность округления>
Примеры вызова:
(round 126.643 0.1) 126.6 
(round 126.663 0.1) 126.7
(round 126.243 0.5) 126.0
(round 126.643 0.5) 126.5
(round 126.843 0.5) 127.0
(round 126.443 1) 126
(round 126.543 1) 127
(round 122.343 5) 120
(round 122.843 5) 125
(round 126.843 5) 125
(round 127.843 5) 130
Ну и т.д.
|;
    ((lambda (x)
       (if (apply '<= (list (rem x 1.) 0.5))
         (* (fix x) precision)
         (+ (* (fix x) precision) precision)
         ) ;_ end of if
       ) ;_ end of lambda
      (apply '/ (mapcar 'float (list value precision)))
      )
    ) ;_ end of defun

  (if (and (= (type (setq value (vl-catch-all-apply
                                  (function
                                    (lambda ()
                                      (initget 7)
                                      (getreal "\nEnter round value <Cancel> : ")
                                      ) ;_ end of lambda
                                    ) ;_ end of function
                                  ) ;_ end of vl-catch-all-apply
                          ) ;_ end of setq
                    ) ;_ end of type
              'real
              ) ;_ end of =
           (= (type (setq selset (vl-catch-all-apply
                                   (function
                                     (lambda ()
                                       (ssget "_:L" '((0 . "*LINE,ARC,CIRCLE,ELLIPSE")))
                                       ) ;_ end of lambda
                                     ) ;_ end of function
                                   ) ;_ end of vl-catch-all-apply
                          ) ;_ end of setq
                    ) ;_ end of type
              'pickset
              ) ;_ end of =
           ) ;_ end of and
    (progn
      (vla-startundomark (setq adoc (vla-get-activedocument (vlax-get-acad-object))))
      (foreach item (_kpblc-conv-selset-to-ename selset)
        (foreach dxf '(10 11 40)
          (if (member dxf (mapcar (function car) (entget item)))
            (_kpblc-ent-modify-autoregen item
                                         dxf
                                         (mapcar
                                           (function
                                             (lambda (x)
                                               (round x value)
                                               ) ;_ end of lambda
                                             ) ;_ end of function
                                           (cdr (assoc dxf (entget item)))
                                           ) ;_ end of mapcar
                                         nil
                                         ) ;_ end of _kpblc-ent-modify-autoregen
            ) ;_ end of if
          ) ;_ end of foreach
        ) ;_ end of foreach
      (vla-regen adoc acactiveviewport)
      (vla-endundomark adoc)
      ) ;_ end of progn
    ) ;_ end of if
  (princ)
  ) ;_ end of defun
---
Добавлено: хоть отпишитесь - работает аль посылает в неизвестном направлении?

Последний раз редактировалось Кулик Алексей aka kpblc, 17.12.2012 в 14:39.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 21.12.2012, 10:49
#8
getr

Конструктор
 
Регистрация: 06.04.2005
Из тех ворот-откуда весь народ.
Сообщений: 341
<phrase 1=


есть еще информация по ссылке- http://forum.dwg.ru/showthread.php?t=8019&page=2
__________________
"Мнение не бывает ни истинным, ни ложным, а лишь полезным в жизни или бесполезным. ",- Ауробиндо
И не надо делать удивленных движений руками.
getr вне форума  
 
Автор темы   Непрочитано 22.12.2012, 00:45
#9
baaba

архитектор
 
Регистрация: 07.07.2007
Москва
Сообщений: 622
<phrase 1= Отправить сообщение для baaba с помощью Skype™


Цитата:
Сообщение от getr Посмотреть сообщение
есть еще информация по ссылке- http://forum.dwg.ru/showthread.php?t=8019&page=2
у меня это к сожалению не заработало, я начал с этой ссылки.
baaba вне форума  
 
Непрочитано 25.01.2013, 14:12
#10
bernata


 
Регистрация: 22.09.2005
здесь могла быть ваша реклама
Сообщений: 1,231


кстати... код по ссылке работает.
baaba-> попробуй сохранить с кодировкой не в *unicod, а в *ANSI, и поставь точкус запятой перед строкой, как советуют вот здесь.
После чего надо перезагрузить файл round-coord.lsp
__________________
иногда молчание мудрее любой высказанной мудрости
bernata вне форума  
 
Непрочитано 06.02.2014, 14:51
#11
RNB

Проектирование мостов
 
Регистрация: 29.01.2014
Новосибирск
Сообщений: 415


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Касательно кода, как альтернативный вариант:
Команда: ROUNDVAL
Enter round value <Cancel> : 10
Выберите объекты: найдено: 1
Выберите объекты: ; ошибка: неверный тип аргумента: listp 0.0

----- добавлено через ~5 мин. -----
Цитата:
Сообщение от baaba Посмотреть сообщение
rnd.zip (694 байт, 39 просмотров)
Всё работает! Спасибо! В конце выдает ошибку почему-то, но функцию выполняет

Команда: RND
Enter the value to which the round: 10
Выберите объекты: Противоположный угол: найдено: 8
Выберите объекты: ; ошибка: неверный тип аргумента: lentityp nil
RNB вне форума  
 
Непрочитано 28.07.2014, 10:32
#12
kurstep


 
Регистрация: 27.01.2012
Сообщений: 217


А как сделать чтобы координаты выделенных объектов округлялись в системе ПСК координат...? а то Лисп округляет только к Мировой системе
kurstep вне форума  
 
Непрочитано 15.02.2015, 16:56 Нужна доработка блока из соседней темы
#13
NikolayKotov


 
Регистрация: 25.10.2007
Сообщений: 36


http://forum.dwg.ru/showpost.php?p=1181382&postcount=36
Можно ли сделать, чтобы программа обрабатывала блоки (статические)?
NikolayKotov вне форума  
 
Непрочитано 14.08.2015, 18:42
#14
overband

Инженер-конструктор
 
Регистрация: 25.02.2008
Москва
Сообщений: 142


Цитата:
Сообщение от NikolayKotov Посмотреть сообщение
http://forum.dwg.ru/showpost.php?p=1181382&postcount=36
Можно ли сделать, чтобы программа обрабатывала блоки (статические)?
Присоединяюсь
---------
P.S. Нашел решение. Вот эта программка умеет округлять и точки вставки блоков:
http://experement.spb.ru/wiki/doku.p...inates#скачать

Последний раз редактировалось overband, 16.08.2015 в 12:32. Причина: нашел решение
overband вне форума  
 
Непрочитано 06.03.2016, 15:58
#15
crosandr

Инженер-строитель
 
Регистрация: 09.07.2010
Санкт-Петербург
Сообщений: 1,773


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Добавлено: хоть отпишитесь - работает аль посылает в неизвестном направлении?
Алексей, расчудесно все работает на отрезках. Вот бы еще точки вставки блоков округлять. Может с 2012 года прогресс ушел вперед в этой части?
crosandr вне форума  
 
Непрочитано 06.03.2016, 18:10
1 | #16
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,555


просто добавить блок в фильтр выбора "*LINE,ARC,CIRCLE,ELLIPSE,INSERT"
gomer вне форума  
 
Непрочитано 31.03.2016, 09:48
#17
KEHT


 
Регистрация: 12.11.2014
Сообщений: 21


Код:
[Выделить все]
 (defun rn1 (lst w)
    (if (or
            (eq 10 (car lst))
            (eq 11 (car lst))
            (eq 40 (car lst))
			(eq 13 (car lst)) ; 1ая размерная линия
			(eq 14 (car lst)) ; 2ая размерная линия
        )
 
        (if (listp (cdr lst))
            (cons
                (car lst)
                (mapcar '(lambda (x) (rn x w)) (cdr lst))
            )
            (cons (car lst) (rn (cdr lst) w))
        )
        lst
    )
)
Если добавить строчки, будет обрабатывать и размеры. Часто бывает начерти или скопировал, образмерил и видишь длины с запятыми (50,122) применяешь RND линии полилинии изменились а размеры(dimension) нет. и остаються нестыковки эти 0,122 или руками править или заново образмеривать. А так добавил две строчки и все впорядке
KEHT вне форума  
 
Непрочитано 08.09.2016, 22:22
#18
Миксер


 
Регистрация: 10.01.2006
Сообщений: 144


Кулик Алексей aka kpblc, а можно попросить вас в округление добавить 3dface и 3d полилинии... Очень нужно, а найти нигде не могу
Миксер вне форума  
 
Непрочитано 08.05.2017, 12:08
#19
чудик


 
Регистрация: 23.03.2008
Сообщений: 6


Скажите пожалуйста как изменить код, чтобы координаты точки вставки блока округлялись по модулю. Если отрицательное число он его округляет в большую сторону но с учетом знака -139,9 округлить кратно 5 до 135.А нужно чтобы было -140.
чудик вне форума  
 
Непрочитано 09.05.2017, 02:43
#20
skkkk

AutoCAD_2008->2011
 
Регистрация: 20.03.2008
Московская область
Сообщений: 2,235


чудик, какой хоть код-то? Тот, что в шапке или один из двух других?
skkkk вне форума  
 
Непрочитано 09.05.2017, 11:51
#21
чудик


 
Регистрация: 23.03.2008
Сообщений: 6


код от Кулик Алексей aka kpblc, он получается округляет в большую сторону без учета знака. Т.е. 439.69 округлит кратно 5 до 440, если бы было -439.69 округлит кратно 5 до -435, а нужно до -440

Последний раз редактировалось чудик, 12.05.2017 в 14:01.
чудик вне форума  
 
Непрочитано 14.02.2018, 14:55
#22
Агент СмиТ

Gti
 
Регистрация: 14.01.2010
МО Железнодорожный
Сообщений: 121


Доброго времени суток!
Кто нибудь сталкивался с необходимостью округления координат вершин такого замечательного примитива как MPolygon?
Перепробовал коды из этой и этой тем, c MPolygon не работают, а "взрывать" каждый примитив до полилиний, округлять и вновь экспортировать в MPolygon неблагодарное занятие
P.s. образец мполигона во вложении, версия файла 2007
Вложения
Тип файла: dwg
DWG 2007
МПолигон 2007.dwg (445.8 Кб, 11 просмотров)
__________________
Каждая система стремится к равновесию.
Агент СмиТ вне форума  
 
Непрочитано 14.02.2018, 20:16
1 | #23
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,784
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Цитата:
Сообщение от Агент СмиТ Посмотреть сообщение
Перепробовал коды из этой и этой тем, c MPolygon не работают
В #36 замени строку "LWPOLYLINE,LINE,ARC,CIRCLE,POINT,INSERT"
этой "LWPOLYLINE,LINE,ARC,CIRCLE,POINT,INSERT,MPOLYGON"
-------------------------------------
Приведу код полностью
Код:
[Выделить все]
 
(defun c:RC (/ _kpblc-eval-nearest round)
;;;Round-Coord
;;;http://forum.dwg.ru/showthread.php?p=1181242#post1181242
;;;VVA for dwg.ru
  (defun _kpblc-eval-nearest (value lst / x base)
    (if lst
      (progn
        (setq x    (car lst)
              base (abs (- value x))
        ) ;_ end of setq
        (foreach item (cdr lst)
          (if (> base (abs (- value item)))
            (setq x    item
                  base (abs (- value item))
            ) ;_ end of setq
          ) ;_ end of if
        ) ;_ end of foreach
      ) ;_ end of progn
      (setq x value)
    ) ;_ end of if
    x
  ) ;_ end of defun
  (vl-load-com)
  (if (not *kpblc-activedoc*)
    (setq *kpblc-activedoc*
           (vla-get-activedocument (vlax-get-acad-object))
    ) ;_ end of setq
  ) ;_ end of if
  (vla-startundomark *kpblc-activedoc*)
  (cond
    ((setq round
            (getreal
              "\nЗначение округления координат <Приводить к целым> : "
            ) ;_ end of getreal
     ) ;_ end of setq
    )
    (t (setq round 1.))
  ) ;_ end of cond
  (foreach ent
           (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget "_:L"))))
    (vl-catch-all-apply
      (function
        (lambda ()
          (cond
            ((wcmatch (cdr (assoc 0 (entget ent)))
                      "LWPOLYLINE,LINE,ARC,CIRCLE,POINT,INSERT,MPOLYGON"
             ) ;_ end of wcmatch
             (entmod
               (mapcar
                 '(lambda (x)
                    (if (member (car x) '(10 11 40)) ;_Начало; конец; точка вставки; радиус
                      (vl-list*
                        (car x)
                        (if (listp (cdr x))
                          (mapcar
                            '(lambda (y)
                               (_kpblc-eval-nearest
                                 y
                                 (list (* round (fix (/ y round)))
                                       (* round (1+ (fix (/ y round))))
                                 ) ;_ end of list
                               ) ;_ end of _kpblc-eval-nearest
                             ) ;_ end of lambda
                            (cdr x)
                          ) ;_ end of mapcar
                          (_kpblc-eval-nearest
                            (cdr x)
                            (list (* round (fix (/ (cdr x) round)))
                                  (* round (1+ (fix (/ (cdr x) round))))
                            ) ;_ end of list
                          ) ;_ end of _kpblc-eval-nearest
                        ) ;_ end of if
                      ) ;_ end of VL-LIST*
                      x
                    ) ;_ end of if
                  ) ;_ end of lambda
                 (entget ent)
               ) ;_ end of mapcar
             ) ;_ end of entmod
             (entupd ent)
            )
            (t nil)
          ) ;_ end of cond
        ) ;_ end of lambda
      ) ;_ end of function
    ) ;_ end of vl-catch-all-apply
  ) ;_ end of foreach
  (vla-endundomark *kpblc-activedoc*)
  (princ)
) ;_ end of defun
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 15.02.2018, 08:50
#24
Агент СмиТ

Gti
 
Регистрация: 14.01.2010
МО Железнодорожный
Сообщений: 121


Цитата:
Сообщение от VVA Посмотреть сообщение
В #36 замени строку "LWPOLYLINE,LINE,ARC,CIRCLE,POINT,INSERT"
этой "LWPOLYLINE,LINE,ARC,CIRCLE,POINT,INSERT,MPOLYGON"
-------------------------------------
VVA, благодарю за ответ! Код работает как нужно, одельно порадовала возможность обработки нескольких предварительно выбранных объектов.
Offtop: Понимаю, что выглядит несколько нагловато, но есть ли возможность добавить MPolygon в код ECoorE, уверен многие пользователи Map3D будут благодарны за это!
__________________
Каждая система стремится к равновесию.
Агент СмиТ вне форума  
 
Непрочитано 15.02.2018, 16:43
#25
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,784
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Агент СмиТ, Offtop: MPolygon добавил http://forum.dwg.ru/showthread.php?p=244237#post244237
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 13.02.2019, 17:03
#26
golotvin


 
Регистрация: 03.02.2016
Сообщений: 7


Ребят, а всё в порядке с кодов в #23? У всех всё именно округляется? Или это у меня лыжи не едут?
Округлить необходимо до 3-х знаков.
Пример до и после "округления" привожу.
Версия ПО Civil3D 2015
Вложения
Тип файла: dwg
DWG 2013
Round-Coord_TEST.dwg (388.9 Кб, 5 просмотров)
golotvin вне форума  
 
Непрочитано 13.02.2019, 17:21
#27
AlexCondor

инженер
 
Регистрация: 03.08.2007
Сообщений: 753


Вроде все работает. Что вы вводите на запрос: Значение округления координат <Приводить к целым>?
AlexCondor вне форума  
 
Непрочитано 13.02.2019, 17:26
#28
golotvin


 
Регистрация: 03.02.2016
Сообщений: 7


1.111
На другое она вроди не гукается
golotvin вне форума  
 
Непрочитано 13.02.2019, 17:28
#29
AlexCondor

инженер
 
Регистрация: 03.08.2007
Сообщений: 753


Введите 0.001
AlexCondor вне форума  
 
Непрочитано 13.02.2019, 17:32
#30
golotvin


 
Регистрация: 03.02.2016
Сообщений: 7


Спасибо!
Наверное перетрудился....
golotvin вне форума  
 
Непрочитано 14.02.2019, 00:16
#31
golotvin


 
Регистрация: 03.02.2016
Сообщений: 7


Н-да! Как там говорил классик: "Или я поведу её в ЗАГС, или она поведёт меня к прокурору!"
А кто-то баловался активно с MPolygon-ами? Может быть Агент СмиТ?
Округляет. Близко. Очень близко. Но чуть-чуть не считается....
Пример привожу. Там МПолигоны. Голым Кадом посмотреть не получится
ПО то же Civil3D 2015
Вложения
Тип файла: dwg
DWG 2013
Round-Coord_TEST.dwg (1.25 Мб, 7 просмотров)
golotvin вне форума  
 
Непрочитано 14.02.2019, 10:30
#32
AlexCondor

инженер
 
Регистрация: 03.08.2007
Сообщений: 753


От классиков: "Не смешите мои тапочки!"
Голый AutoCAD. Округляет очень даже точно. Во вложении до 0.01...

Последний раз редактировалось AlexCondor, 16.04.2019 в 10:54.
AlexCondor вне форума  
 
Непрочитано 14.02.2019, 12:10
#33
golotvin


 
Регистрация: 03.02.2016
Сообщений: 7


Ну если голый AutoCAD видит мэйповские полигоны это просто прекрасно. Вопрос не в том.
Где "очень даже точно"? Сравните хоть бы две левые вершины исходного полигона и Вашего.
golotvin вне форума  
 
Непрочитано 14.02.2019, 12:57
#34
AlexCondor

инженер
 
Регистрация: 03.08.2007
Сообщений: 753


А если попробовать округлять до 0.0005.
P.S. А потом уже до 0.001
AlexCondor вне форума  
 
Непрочитано 14.02.2019, 13:26
#35
golotvin


 
Регистрация: 03.02.2016
Сообщений: 7


Попробовал тогда оно в эти 0,0005 и не бьет с контрольной полилинией.
А если потом прогнать до 0,001 то коверкаются вершины с координатами типа 0,5360 на эту самую тысячную. С полилинией такого не происходит.
По видимому МПолигон, зараза, имеет более замудрённые свойства.
Придётся, наверное, их создавать после округления полилиний. Ну хоть с ними проблем нет. Все вершины округляются однозначно и топология перестраивается без ругани. И на том спасибо.
Но жаль....
golotvin вне форума  
 
Непрочитано 15.05.2019, 12:42
#36
peshkoff


 
Регистрация: 11.06.2014
Юбутово@Москва
Сообщений: 20


Стандартных средств не появилось? ACAD LT...
peshkoff вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Готовые программы > Округление координат кратно значению

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Округление координат, полилиний, центров окружностей, блоков MA2 Программирование 44 15.01.2015 15:19
округление подписей координат в атрибутах блока АлексЮстасу AutoCAD 4 19.07.2010 13:35
Помощь по Лире Серега М Лира / Лира-САПР 52 28.05.2007 02:47
управление системой координат Автокад из Делфей Владимир В Программирование 12 27.04.2005 09:54