Сообщество программистов Autodesk в СНГ

ADN Club => AutoLisp / VisualLISP и DCL => Тема начата: 1958 от 03-11-2021, 13:59:34

Название: Подпись горизонталей (разворот текста)
Отправлено: 1958 от 03-11-2021, 13:59:34
Как я уже ранее говорил, я не не большой спец по программированию. Но, в связи со спецификой моей работы, приходится облегчать себе работу. Что-то получается, что-то нет. Написал лисп для подписи горизонталей (линии рельефа на топографических планах). В чем суть: 1.имеется предварительно созданный чертеж, содержащий горизонтали (полилинии на различных уровнях); поверхность из 3dFace. Необходимо в указываемом месте на горизонтали подписать её уровень. Подпись должна быть соориентирована верхом в сторону повышения рельефа. Алгоритм работы написанного лиспа: 1.Указываем точку на горизонтали, в этой точке вдоль горизонтали вставляется текст (уровень выбранной линии), далее перпендикулярно к выбранной горизонтали определяются две точки слева и справа, если отметка (уровень) второй точки больше отметки первой точки, то надпись разворачивается на 180°. Но это не всегда срабатывает. Не могу понять  в чём загвоздка. Прошу помощи. У меня AC2007.
Название: Re: Подпись горизонталей (разворот текста)
Отправлено: Александр Ривилис от 03-11-2021, 14:12:13
Но это не всегда срабатывает.
Что именно не всегда срабатывает?
Название: Re: Подпись горизонталей (разворот текста)
Отправлено: 1958 от 03-11-2021, 14:24:20
Не срабатывает разворот текста в нужную сторону, хотя отметки точек определяются правильно. Т.е. я определяю две точки (на чертеже они обозначены окружностями, точка слева от горизонтали кружком  диаметром 1мм, точка справа - кружком 2мм), далее определяются их отметки и, если отметка точки справа больше, текст подписи разворачивается на 180°. Вот этот разворот не всегда срабатывает.
Название: Re: Подпись горизонталей (разворот текста)
Отправлено: trir от 03-11-2021, 15:15:18
в Civil'е это всё реализовано...
Название: Re: Подпись горизонталей (разворот текста)
Отправлено: 1958 от 03-11-2021, 15:18:36
Ну, велосипед почему-то до сих пор изобретают.
Название: Re: Подпись горизонталей (разворот текста)
Отправлено: Александр Ривилис от 03-11-2021, 17:08:04
У меня AC2007.
Увы, но в такой древней версии я проверить не могу, а в последних версиях код не работает вообще.
Название: Re: Подпись горизонталей (разворот текста)
Отправлено: 1958 от 03-11-2021, 17:32:06
Увы, но в такой древней версии я проверить не могу, а в последних версиях код не работает вообще.
Странно. У меня в AC2018 этот лисп запускается.
Название: Re: Подпись горизонталей (разворот текста)
Отправлено: Александр Ривилис от 04-11-2021, 01:12:29
Вот такой протокол в AutoCAD 2021:

Код - INI [Выбрать]
  1. Command: LLL
  2. _.lweight
  3. Current lineweight: BYLAYER
  4. Enter default lineweight for new objects or [?]: bylayer
  5. Command: LLL
  6. Unknown command "LLL".  Press F1 for help.
  7. Command: _.-layer
  8. Current layer:  "0"
  9. Enter an option [?/Make/Set/New/Rename/ON/OFF/Color/Ltype/LWeight/TRansparency/MATerial/Plot/Freeze/Thaw/LOck/Unlock/stAte/Description/rEconcile/Xref]: _OFF
  10. Enter name list of layer(s) to turn off or <select objects>: ИИ_ТРИАНГУЛЯЦИЯ_025 Enter an option [?/Make/Set/New/Rename/ON/OFF/Color/Ltype/LWeight/TRansparency/MATerial/Plot/Freeze/Thaw/LOck/Unlock/stAte/Description/rEconcile/Xref]:
  11. Command: _osnap Enter list of object snap modes: _none
  12. Command: Укажите горизонталь >_-LAYER
  13. Current layer:  "0"
  14. Enter an option [?/Make/Set/New/Rename/ON/OFF/Color/Ltype/LWeight/TRansparency/MATerial/Plot/Freeze/Thaw/LOck/Unlock/stAte/Description/rEconcile/Xref]: _ON
  15. Enter name list of layer(s) to turn on: ИИ_ТРИАНГУЛЯЦИЯ_025 Enter an option [?/Make/Set/New/Rename/ON/OFF/Color/Ltype/LWeight/TRansparency/MATerial/Plot/Freeze/Thaw/LOck/Unlock/stAte/Description/rEconcile/Xref]: _Y
  16. Invalid option keyword.
  17. Enter an option [?/Make/Set/New/Rename/ON/OFF/Color/Ltype/LWeight/TRansparency/MATerial/Plot/Freeze/Thaw/LOck/Unlock/stAte/Description/rEconcile/Xref]: _.zoom
  18. Invalid option keyword.
  19. Enter an option [?/Make/Set/New/Rename/ON/OFF/Color/Ltype/LWeight/TRansparency/MATerial/Plot/Freeze/Thaw/LOck/Unlock/stAte/Description/rEconcile/Xref]: _-LAYER
  20. Invalid option keyword.
  21. Enter an option [?/Make/Set/New/Rename/ON/OFF/Color/Ltype/LWeight/TRansparency/MATerial/Plot/Freeze/Thaw/LOck/Unlock/stAte/Description/rEconcile/Xref]: _.zoom
  22. Invalid option keyword.
  23. Enter an option [?/Make/Set/New/Rename/ON/OFF/Color/Ltype/LWeight/TRansparency/MATerial/Plot/Freeze/Thaw/LOck/Unlock/stAte/Description/rEconcile/Xref]: _-LAYER
  24. Invalid option keyword.
  25. Enter an option [?/Make/Set/New/Rename/ON/OFF/Color/Ltype/LWeight/TRansparency/MATerial/Plot/Freeze/Thaw/LOck/Unlock/stAte/Description/rEconcile/Xref]: _.zoom
  26. Invalid option keyword.
  27. Enter an option [?/Make/Set/New/Rename/ON/OFF/Color/Ltype/LWeight/TRansparency/MATerial/Plot/Freeze/Thaw/LOck/Unlock/stAte/Description/rEconcile/Xref]: _-LAYER
  28. Invalid option keyword.
  29. Enter an option [?/Make/Set/New/Rename/ON/OFF/Color/Ltype/LWeight/TRansparency/MATerial/Plot/Freeze/Thaw/LOck/Unlock/stAte/Description/rEconcile/Xref]: _.zoom
  30. Invalid option keyword.
  31. Enter an option [?/Make/Set/New/Rename/ON/OFF/Color/Ltype/LWeight/TRansparency/MATerial/Plot/Freeze/Thaw/LOck/Unlock/stAte/Description/rEconcile/Xref]: _line
  32. Invalid option keyword.
  33. Application ERROR: Invalid type sent as command input
  34. Application ERROR: Invalid type sent as command input
  35. Application ERROR: Invalid type sent as command input
  36. Укажите горизонталь >
  37. Укажите горизонталь >*Cancel*
  38. ; error: Function cancelled
  39. Enter an option [?/Make/Set/New/Rename/ON/OFF/Color/Ltype/LWeight/TRansparency/MATerial/Plot/Freeze/Thaw/LOck/Unlock/stAte/Description/rEconcile/Xref]: *Cancel*
  40.  
Название: Re: Подпись горизонталей (разворот текста)
Отправлено: 1958 от 05-11-2021, 11:06:22
Вот такой протокол в AutoCAD 2021:
Я не знаю, почему у вас не запускается на AC2021, я проверял на 2007, 2016, 2018.
А проблему я решил. Не надо было делать сравнение двух точек, достаточно сравнить отметку доп.точки с одной стороны горизонтали с уровнем самой горизонтали и всё получилось!
Название: Re: Подпись горизонталей (разворот текста)
Отправлено: 1958 от 05-11-2021, 12:21:59
я проверял на 2007, 2016, 2018.
Только что проверил оба лиспа (lll.lsp и 2L.lsp) на AC2021. Оба запускаются, правильно работает 2L.lsp. Естественно неправильный выход по клавише esc, но это не важно, у меня этот лисп будет фрагментом большого кода, где эта ситуация решается.
Название: Re: Подпись горизонталей (разворот текста)
Отправлено: Александр Ривилис от 05-11-2021, 16:42:54
В обеих программах в первых же строках ошибка. Вместо 
Код - Auto/Visual Lisp [Выбрать]
  1. (vl-cmdf "_.lweight" "bylayer" "")
должно быть:
Код - Auto/Visual Lisp [Выбрать]
  1. (vl-cmdf "_.lweight" "_bylayer")
Да и вообще это системная переменная - её нужно устанавливать при помощи функции (setvar)
Код - Auto/Visual Lisp [Выбрать]
  1. (setvar "CELWEIGHT" -1)
Название: Re: Подпись горизонталей (разворот текста)
Отправлено: 1958 от 05-11-2021, 18:04:45
обеих программах в первых же строках ошибка. Вместо 
Спасибо!