Тема: Уклон в свойствах линии?

Сабж, как вписать еще одну переменную в свойства линии, так чтоб она еще и отображала ее уклон?
PS: Честно говоря надоело считать на калькуляторе ;) а книжки под рукой нет =(

Re: Уклон в свойствах линии?

> Nesmit
Тебе нужен угол в градусах/радианах относительно Х или именно уклон в процентах?

Re: Уклон в свойствах линии?

> Nesmit
Хочу Вас огорчить - в свойства стандартного примитива AutoCAD вписать еще одно дополнительное свойство нельзя. Можно лишь создать свой примитив (производный от линии) и добавить нужные свойства. Второй вариант своей lisp-функцией отображать отображать уклон. Т.е. запускашь фунцию, выбираешь линию, а функция печатает уклон.

Re: Уклон в свойствах линии?

> Александр Ривилис
Это ветка лисп, значит нужно сохранить вычисленные значения в примитиве...
Т.е. в расширенных данных можно записать угол, правда, в окне свойств он отображаться не будет...
Хотя упоминание калькулятора ставит мое предложение под большое сомнение...

> Nesmit
Поясните еще раз, что и в какой форме вам нужно.

Re: Уклон в свойствах линии?

> Евгений Елпанов
...Т.е. в расширенных данных можно записать угол, правда, в окне свойств он отображаться не будет...
Так и я об этом же. Какой тогда смысл их записывать в расширенные данные, если для отображения все равно нужно писать функцию. Так пусть она сразу и вычисляет уклон и печатает. Тем более, что линию могли повращать, а расширенные данные будут отражать неправильную информацию.

Re: Уклон в свойствах линии?

Если нельзя ничего добавлять в свойства, то вопрос отпадает. Отдельно функцию, я уже написал.
Спасибо за ответ.

Re: Уклон в свойствах линии?

Я в реакторах не разбираюсь но мне кажется для этого случая помогут именно они, как в примере в книге Н.Н. Полещука "Visul LISP и секреты...". И вообще тема интересная и вечно актуальная - всегда нехватает "самых нужных" свойств объекта для удобства и наглядности работы без промежуточных ручных вычислений.

Re: Уклон в свойствах линии?

> Runa
Никто не мешает сделать альтернативное окно свойств - для себя, с нужными только вам значениями...

Re: Уклон в свойствах линии?

> Евгений Елпанов
Но не у всех (в том числе и у меня) хватает умений, опыта и т.д. Да и как на лиспе можно сделать окно свойств подобное встроеному?

Re: Уклон в свойствах линии?

Вобще то в окне свойств для отрезка есть наклон. Однако, он учитывает еще и направление, потому не всегда покажет правильно. Кроме того, наклон можно получить по командн _.list, хотя там практически то же самое.
На Лиспе можно попросить пользователя выбрать отрезок, затем прграммно определить его начало и конец, по полученным данным вычислить угол и вывести его в командную строку или в окошко alert.

Re: Уклон в свойствах линии?

> Runa
Не обязательно делать сложное окно...
например нам нужно от отрезка только угол наклона и длинна с большой точностью.
Короче примерно так:

(defun c:test ( / x)
  (if (setq x (car (entsel "Выберите отрезок")))
(alert (strcat "Длинна отрезка "
(rtos (distance (cdr(assoc 10 (entget x))) (cdr(assoc 11 (entget x)))) 2 8)
"\n Угол наклона "
(rtos (* 180(/ (angle (cdr(assoc 10 (entget x))) (cdr(assoc 11 (entget x)))) pi)) 2 8)
"градусов"))))

Re: Уклон в свойствах линии?

Как всегда забыл указать...
после загрузки вызывать из командной строки командой
test
:^D

Re: Уклон в свойствах линии?

> Евгений Елпанов
Когда я увидел эту ветку мне пришла в голову одна идея: вот например одна моя функция которая вычисляет длину в плане и уклон в промиллях для точек с разными отметками Z

(defun c:rdd ( / runa01 runa02 runa03 runa04 runa05)
(setq runa01 (GETPOINT "\nSpecify first point: "))
  (if (null runa01) (setq runa01 (getvar "LASTPOINT")))
  (setq runa02 (GETPOINT runa01 "  Specify second point: "))
  (if (null runa02) (princ "\nCannot computer distance.")
    (PROGN
      (setq runa03 (- (last runa02) (last runa01))
        runa05 (distance runa01 runa02))
      (setq runa01 (list (car runa01) (cadr runa01))
        runa02 (list (car runa02) (cadr runa02)))
      (setq runa04 (distance runa01 runa02))
      (princ (STRCAT "\nDistance = " (RTOS runa04 2)
" м, Slope = " (rtos (* (/ runa03 runa04) 1000) 2 3) " %%, Delta Z = " (rtos runa03 2) " м."))
      (princ (STRCAT "\nDist by z: " (rtos runa05 2) " м, L(M 1:500)= " (rtos (/ runa04 0.5) 2) " мм, "
    "L(M 1:200)= " (rtos (/ runa04 0.2) 2) " мм"))
      );PROGN
    );if
  (princ)
  )

ведь можна наверное сделать реактор который бы сам запускал ее и вычислял нужные свойства для выделеной линии?

Re: Уклон в свойствах линии?

> Runa
Думаю интереснее сделать программу, которая делая вычисления добавляла их перезаписывая в гиперссылку...
Перезаписывала потому, что линии могут изменяться (перемещаться, вертеться)- это же чертеж...
Зато из плюсов - нажал кнопку обновить вычисления, и подводи курсор к любой линии, сразу выскакивает гиперссылка с нужными значениями!

Re: Уклон в свойствах линии?

Простой вопрос перерос в дискуссию.
Runa была права, это как раз то свойство линии которое (для геодезиста) хорошо бы добавить.
А писать отдельной программой неимеет смысла, т.к. формула уклона = превышение(dZ) / расстояние (L).
Такая вот тривиальная формула, а заставляет много раз повторять такое вычисление, и не обязательно ее отображать на чертеже.
PS: Я так понял, сам объект Line написан на ARX или на откомпилирован в лиспе и поэтому подправить/добавить ничего нельзя, только переписывать объект заново. Я правильно понимаю суть проблемы?

Re: Уклон в свойствах линии?

> Nesmit
Да, подправить ничего нельзя, но можно чего-нибудь добавить доступными средствами!

Re: Уклон в свойствах линии?

> Nesmit
вообщето я мужского рода, просто "runa" мне писать удобней :)
Ну отображать на чертеже такую информацию я и не собирался просто хотелось сделать все красивее - выделил нужную линию и получил уклон когда это нужно.
Линии обычные, автокадовские.

> Евгений
ну вообщето я тоже сначала подумал о гиперсылке но мне показалось что в принципе хранить эту информацию незачем да и линий многовато 1 - 2 тыс (в LDT) поэтому я решил что реакторы то что нужно, но не нашел нужного во первых во вторых я так понимаю что нужны будут еще другие реакторы которые будут добавлять нужный реактор к нужным линиям.
Похоже легче создать пару функций на всякий случай и пользоватся ими.

Re: Уклон в свойствах линии?

> Евгений Елпанов
Каким способом если не секрет?
Спасибо за програмку, очень интересная (rdd).

> Runa
Приношу свои извинения. :)

Re: Уклон в свойствах линии?

Вот наваял програмку добавления гиперссылок ко всем линиям, после запуска она перезаписывает гиперссылки заменяя новыми, т.е. если линии изменялись перед считыванием данных надо запустить программу...
Пользуясь гиперссылками можно посмотреть уклон не вызывая окно свойств или в окне свойств в графе гиперссылки.

(defun c:test (/ A2 A3 SSET)
  (if (setq sset (ssget "_x" '((0 . "LINE"))))
    (foreach a1
         (mapcar
           (function (lambda (a1)
               (list (cdr (assoc 10 a1))
                 (cdr (assoc 11 a1))
                 (vlax-ename->vla-object
                   (cdr (assoc -1 a1))
                 ) ;_  конец функции vlax-ename->vla-object
               ) ;_  конец функции list
             ) ;_  конец функции lambda
           ) ;_  конец функции function
           (mapcar
         (function entget)
         (vl-remove-if
           (function listp)
           (mapcar (function cadr) (ssnamex sset))
         ) ;_  конец функции vl-remove-if
           ) ;_  конец функции mapcar
         ) ;_  конец функции mapcar
      (if (vl-catch-all-error-p
        (setq a2
           (vl-catch-all-apply
             'vla-item
             (list
               (setq a3 (vla-get-Hyperlinks (caddr a1)))
               0
             ) ;_  конец функции list
           ) ;_  конец функции vl-catch-all-apply
        ) ;_  конец функции setq
      ) ;_  конец функции vl-catch-all-error-p
    (vla-add
      a3
      (strcat
        "уклон "
        (rtos
          (if (zerop
            (distance (list (caar a1) (cadar a1))
                  (list (caadr a1) (cadadr a1))
            ) ;_  конец функции distance
          ) ;_  конец функции zerop
        0.0
        (/ (distance (list 0. 0. (caddar a1))
                 (list 0. 0. (car (cddadr a1)))
           ) ;_  конец функции distance
           (distance (list (caar a1) (cadar a1))
                 (list (caadr a1) (cadadr a1))
           ) ;_  конец функции distance
        ) ;_  конец функции /
          ) ;_  конец функции if
          2
          8
        ) ;_  конец функции rtos
      ) ;_  конец функции strcat
    ) ;_  конец функции vla-add
    (progn
      (vla-delete a2)
      (vlax-release-object a2)
      (vla-add
        a3
        (strcat
          "уклон "
          (rtos
        (if
          (zerop
            (distance (list (caar a1) (cadar a1))
                  (list (caadr a1) (cadadr a1))
            ) ;_  конец функции distance
          ) ;_  конец функции zerop
           0.0
           (/ (distance    (list 0. 0. (caddar a1))
                (list 0. 0. (car (cddadr a1)))
              ) ;_  конец функции distance
              (distance    (list (caar a1) (cadar a1))
                (list (caadr a1) (cadadr a1))
              ) ;_  конец функции distance
           ) ;_  конец функции /
        ) ;_  конец функции if
        2
        12
          ) ;_  конец функции rtos
        ) ;_  конец функции strcat
      ) ;_  конец функции vla-add
    ) ;_  конец функции progn
      ) ;_  конец функции if
    ) ;_  конец функции foreach
  ) ;_  конец функции if
  (princ)
)

Вызывается программа командой
test из акада
PS. Посмотрел в окне предварительного просмотра - что-то длинновато получилось
:^D

Re: Уклон в свойствах линии?

> Nesmit
на здоровье, только RDD - моя программулина, первая кстати и она досих пор лидер по вызову. Без нее я как без рук.

> Евгений Елпанов
спасибо за программу. Ее можно будет приспособить для многих вещей. В том чиле для Nesmit но вот для уклонов придется еще что нибудь выдумывать поскольку очень важно знать не только уклон но и его направление.

Re: Уклон в свойствах линии?

> Runa
Нет ничего проще...
Напиши форму записи, которая была бы удобна, появится минутка - доделаю.
Например:
уклон=0.0254254% направление=56.025гр.
PS. Только, мне кажется, чем короче запись тем удобнее - в окне свойств не особо длинная строка...
:^D

Re: Уклон в свойствах линии?

> Евгений Елпанов
большое спасибо но не нужно, не люблю пудрить мозги но всегда так получается:).
Я имел ввиду что направление уклона будет указано в чертеже например крестик в нижней или верхней точке нарисованый например функцией (grdraw). Для всех линий рисовать их нет смысла, а вставлять точки не хочется.
У меня идей пока что нет, но оно мне и не горит... до следущей вертикалки.)

Re: Уклон в свойствах линии?

> Runa
Тогда посмотрим, что скажет  Nesmit, как человек измученный калькулятором...
:^D
PS. Надеюсь без обид.

Re: Уклон в свойствах линии?

> Евгений Елпанов
Как вариант:
удаляет предыдущие линки и записывает новый
(defun C:put-hyp-to-lines (/ acsp adoc an cnt
               desc hv hyp ukl util)
  (vl-load-com)
  (setq    adoc (vla-get-activedocument
           (vlax-get-acad-object)
         )
    acsp (vla-get-block (vla-get-activelayout adoc))
    util (vla-get-utility adoc)
  )
  (setq cnt 1)
  (vlax-for a acsp
    (if    (wcmatch (vla-get-objectname a) "AcDbLine")
      (progn
    (setq an  (vla-get-angle a)
          hv  (* (vla-get-length a) (sin an))
          ukl (/ hv (vla-get-length a))
    )
    (setq hyp (vla-get-hyperlinks a))
    (if (not (zerop (vla-get-count hyp)))
      (vlax-for i hyp
        (vla-delete i)
      )
    )
    (setq desc (vla-add hyp "Уклон"))
    (vla-put-urldescription
      desc
      (vl-princ-to-string
        (list (strcat "Линия ?" (itoa cnt)) ukl an)
      )
    )
    (setq cnt (1+ cnt))
      )
    )
  )
)
(C:put-hyp-to-lines)
;Test:
(setq ln (vlax-ename->vla-object(car (entsel))))
(vlax-for i (vla-get-hyperlinks ln)
(setq desc
(vla-get-urldescription i)))
~'0'~

Re: Уклон в свойствах линии?

> OLeg(jr.)
У вас ошибочка закралась...
(setq an  (vla-get-angle a))
Здесь вычисляется угол в проекции на XY т.е. далее копится ошибка.
:^((