Тема: Округление длин отрезков

Есть чертежи где отрезки начерчены не круглым размером: 10,215 или 2205,32 и т.п.. Кто может помочь с лиспом, который при выделении всех отрезков округлял значение их длин до ближайшего значения (хорошо если можно было бы выставлять степень округления).

10,215 -> 10
2205,32 -> 2205

спасибо!

Re: Округление длин отрезков

Постановка задачи не полная...
Что значит "округлял значение"?
В свойствах объекта?
Или укорачивать отрезок? Тогда в какую сторону?
Ну и т.д.

Re: Округление длин отрезков

Ну хотелось бы чтобы лисп укорачивал или удлинял длины отрезков до ближайшего заданного значения.

Например:
при значении 5
102,32 округлял бы до ближайшего значения кратного 5 =  100
106,78=110
132,7=135 и т. д.

при значении 1
102,32 округлял бы до ближайшего значения кратного 1 =  102
106,78=107
132,7=133 и т. д.

(изменено: Alan aka Александр Назаров, 9 августа 2011г. 20:41:16)

Re: Округление длин отрезков

trvi пишет:

чтобы лисп укорачивал или удлинял длины отрезков до ближайшего заданного значения.

Надо читать не только себя, но и других...

Alan aka Александр Назаров пишет:

Или укорачивать отрезок? Тогда в какую сторону?

От начала к концу, от середины в обе стороны, от конца к началу?
Ну и не забудьте, что картинка исказиться. Если это какие-то построения, то соприкосновения будут неточными. Гораздо правильнее сразу правильно чертить, используя клавиатурный ввод координат, вспомогательные линии, ортогональность и объектную привязку...
Постановка задачи - 50% успеха.

Re: Округление длин отрезков

Не важно в в какую сторону будет изменяться длина отрезка...
Пусть исказится... Мне только получить равные размеры

Если это не реально, так и напишите... Может кто-нибудь другой поможет

Re: Округление длин отрезков

trvi пишет:

Если это не реально...

Задача выполнимая, но не имеет ИМХО практической пользы.
Чистая теория...

(изменено: Alan aka Александр Назаров, 10 августа 2011г. 16:58:28)

Re: Округление длин отрезков

>trvi Это хотел?
Так как я не программист, ногами не бить  :)

;| программка укорачивания или удлинения длины отрезков до ближайшего заданного значения
так как в постановке задачи пробелы, сделал ТОЛЬКО один вариант -
Изменение длины отреза от точки его начала
Пример вызова  - (round_dl 5) (round_dl 1)|;
(defun round_dl    (precision / ln_pp aa3 i dlp ugp po1 po2)
  (setq    i 0
    ln_pp (nz_vybor)
  ) ;_ конец setq
;;;                Цикл по примитивам
  (if ln_pp
    (progn
      (repeat (sslength ln_pp)
    (setq aa3 (entget (ssname ln_pp i))
          po1 (cdr (assoc 10 aa3))
          po2 (cdr (assoc 11 aa3))
          dlp (distance po1
                po2
          ) ;_ конец distance
          ugp (angle po1
             po2
          ) ;_ конец angle
    ) ;_ конец setq
;;;    удаление текущего примитива
    (entdel (ssname ln_pp i))
    (entmake_line po1 (polar po1 ugp (round dlp precision)))
    (setq i (1+ i))
      ) ;_ конец repeat
    ) ;_ конец progn
    (prompt "\n Ну отменили, так отменили")
  ) ;_ конец if
(princ)
) ;_ конец defun
;;; выбор примитивов
(defun nz_vybor    (/ r)
  (vl-catch-all-apply
    '(lambda ()
       (setq r (ssget '((0 . "LINE"))))
     ) ;_ end of lambda
  ) ;_ end of vl-catch-all-apply
  (setq    r (if r
        r
        nil
      ) ;_ конец if
  ) ;_ конец setq
) ;_ конец defun
;;; построение LINE по двум точкам
(defun entmake_line (po1 po2)
  (entmake (list (cons 0 "LINE")
         (cons 10 po1)
         (cons 11 po2)
       ) ;_  list
  ) ;_  entmake
) ;_  defun
;;;http://forum.dwg.ru/showthread.php?t=21977&highlight=%EE%EA%F0%F3%E3%EB%E5%ED%E8%E5+%E7%ED%E0%F7%E5%ED%E8%FF
;;; программа округления
(defun round (value precision)
  ((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