Масштабируйте длину в соответствии с размерами, указанными на диаграмме AutoCAD - PullRequest
1 голос
/ 17 апреля 2020

Это продолжение моего предыдущего поста здесь

У меня 2D-геометрия, созданная с использованием следующего кода, ref .

(defun graph ( pts sls tls )

    (   (lambda ( l )
            (foreach x l (text (cdr x) (itoa (car x)) 0.0 1))
            (mapcar
               '(lambda ( a b / p q r )
                    (setq p (cdr (assoc a l))
                          q (cdr (assoc b l))
                          r (angle p q)
                    )
                    (entmake (list '(0 . "LINE") (cons 10 p) (cons 11 q) '(62 . 8)))
                    (text
                        (mapcar '(lambda ( x y ) (/ (+ x y) 2.0)) p q)
                        (roundupto (distance p q) 12.4)
                        (if (and (< (* pi 0.5) r) (<= r (* pi 1.5))) (+ r pi) r)
                        2
                    )
                )
                sls tls
            )
        )
        (mapcar 'cons (vl-sort (append sls tls) '<) pts)
    )
)
(defun text ( p s a c )
    (entmake
        (list
           '(0 . "TEXT")
            (cons 10 p)
            (cons 11 p)
            (cons 50 a)
            (cons 01 s)
            (cons 62 c)
           '(40 . 2)
           '(72 . 1)
           '(73 . 2)
        )
    )
)

(defun roundupto ( x m / d r )
    (setq d (getvar 'dimzin))
    (setvar 'dimzin 8)
    (setq r (rtos (* m (fix (+ 1 -1e-8 (/ x (float m))))) 2 8))
    (setvar 'dimzin d)
    r
)

Ввод:

(graph
   '((75 25) (115 45) (90 60) (10 5) (45 0) (45 55) (0 25) (10 50) (115 25))
   '(1 1 1 2 2 3 4 4 6 7 2)
   '(2 4 5 3 6 6 5 7 7 8 9)
)

Вывод:

enter image description here

Фактические размеры не соответствуют значению, отображаемому в тексте (желтым цветом) над линиями. Например, 62 - это отображаемое значение, а 54.0833 - фактический размер. И я хочу изменить фактическую длину до значений, отображаемых желтым цветом по линиям. Я понимаю, что координаты, показанные в input, должны быть изменены. Вероятно, первая координата может быть фиксированной, а последующие координаты могут быть смещены.

Любые предложения о том, как это сделать, будут действительно полезны.

РЕДАКТИРОВАТЬ: Решение предоставлено здесь в ответе на мой предыдущий пост Масштабирование длин на диаграмме AutoCAD масштабирует только измерение, отображаемое желтым цветом, используя выходные данные, полученные из roundupto функция. Целью публикации этого вопроса является запрос предложений о масштабировании фактической длины, а не только размеров, отображаемых желтым цветом.

РЕДАКТИРОВАТЬ 2: Добавление дополнительной информации

Если непосредственно загружать входной файл в AutoCAD, желтый текст, отображаемый на следующем изображении, является фактическими размерами enter image description here

И я хочу преобразовать размеры в соответствующие желтые метки, показанные на следующем изображении: enter image description here

Примечание. Метки, отображаемые на втором изображении в EDIT2, были изменены внешне используя код AutoLISP, чтобы просто показать, как нужно масштабировать фактические длины соответствующих строк. На первом изображении, отображаемом в режиме EDIT2, метки ребер точно соответствуют длинам соответствующих линий.

1 Ответ

0 голосов
/ 27 апреля 2020

Существует ли постоянный коэффициент ошибок для всех значений или он отличается для каждого из них? Я имею в виду, если вы рассчитываете 60 / 54,0833, вы получите примерно 1,13. Если вы сделаете это на других длинах, вы получите что?
Если есть постоянный «коэффициент масштабирования», вы можете умножить свои вершины на это, а затем изменить маркировку (желтые цифры).

Я допускаю Я не очень хорошо знаю AutoCAD, поэтому я могу дать подсказки, никаких решений в коде, если вы не объясните мне свой синтаксис кода.

Я подозреваю, что причиной ошибок округления или разделения является расхождения в значениях. Вы можете проверить это? Например, a b / p q r целое число или результат с плавающей точкой? Как работает roundupto? какая точность имеет pi? Можете ли вы усечь или нормализовать ваши значения до одинаковой точности (например, «до трех цифр после запятой»)?
Что означают параметры sls и tls? pts Я могу идентифицировать себя как «список точек» из введенных вами материалов.

...