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

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Задание координаты Z у сплайна или полилинии при помощи команды????

Задание координаты Z у сплайна или полилинии при помощи команды????

Ответ
Поиск в этой теме
Непрочитано 02.03.2012, 13:43 #1
Задание координаты Z у сплайна или полилинии при помощи команды????
alex_msu
 
Регистрация: 02.03.2012
Сообщений: 3

Здравствуйте, помогите пожалуйста. Я написал код операций который сильно упрощает мою работу:
1. Он преобразует сплайн в полилинию.
2. Проставляет точки на полилинии с определенным шагом (для этого и приходится преобразовывать т.к. на сплайн команда не срабатывает)
3. Потом экспортирую координаты всех точек

НО! При этом на 1 или 2 шаге мне нужно присвоить определенные значения координаты Z линии (чтобы все точки при экспорте имели нужные мне значения z).
Как это сделать??

(можно, конечно, делать все пошагово, но линий много и хотелось бы чтобы при составлении макроса была команда, которая выдавала запрос на присвоение координаты Z линии)...

Спасибо за помощь.
Просмотров: 13936
 
Непрочитано 02.03.2012, 14:02
#2
onick


 
Регистрация: 27.10.2010
Калининград
Сообщений: 246


возможно _.elevation или сокращенно elev в английском автокаде...
onick вне форума  
 
Автор темы   Непрочитано 02.03.2012, 18:08
#3
alex_msu


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


Жаль, но эта команда подходит для рисования новых линий, а у меня уже линии существуют... т.е. сначала вводишь новое значение уровня, потом рисуешь, опять вводишь новое значение уровня, рисуешь и так далее все уровни линий задаются на тех отметках, которые ты перед этим ввел...

а у меня линии уже есть(((....

p.s. я подумал, что можно задать скриптом их копирование на новый слой с предварительным изменением уровня... т.е. :
1. в новом слое задается уровень
2. Выбирается линия, копируется в новый слой (с его новым уровнем)
3. Преобразуется по моей программе
НО! как это корректно написать на макросе я не представляю (да еще и прыгать из слоя в слой на уровне макроса) и во вторых чтобы линии переносились в новый слой с одинаковыми координатам x,y...

Пожалуйста подскажите еще варианты или лисп....
alex_msu вне форума  
 
Непрочитано 02.03.2012, 18:59
#4
onick


 
Регистрация: 27.10.2010
Калининград
Сообщений: 246


Можно тогда подвинуть каждую линию на расстояние @0,0,Z
onick вне форума  
 
Непрочитано 02.03.2012, 19:00
#5
VVA

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


Цитата:
Сообщение от alex_msu Посмотреть сообщение
была команда, которая выдавала запрос на присвоение координаты Z линии)
Пример
Код:
[Выделить все]
(defun C:PLZ ()
(and
  (setq pl (car(entsel "\nВыбери полилинию: ")))
  (eq "LWPOLYLINE" (cdr(assoc 0 (entget pl))))
  (progn
    (vl-load-com)
    (initget 1)
    (setq Z (getreal "\nВведи координату Z: "))
    (vla-put-elevation (vlax-ename->vla-object pl) Z)
    )
  )
)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 02.03.2012, 19:44
#6
alex_msu


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


Спасибо огромное!!! Очень помогло!! Огромное человеческое спасибо!!!!!!
alex_msu вне форума  
 
Непрочитано 29.03.2013, 14:47
#7
PsixVK


 
Регистрация: 19.10.2012
Киев
Сообщений: 749


привет народ
ищу на форуме лисп который гамузом переводил вертикалку сделанную в одной плоскости на те те отметки которые написаны возле горизонталей
гдето встречал кажись на форуме такой лисп, после больничного не могу найти (
http://forum.dwg.ru/showpost.php?p=885380&postcount=5 этот хороший если линий мало

в прикрепленном файле на слое "красн гор" набор примитивов как бы лучше их разнести на соответствующие отметки?
по моему мнению там есть одна загвоздка нормально подписаны целые горизонтали, а дробные только дробная часть
придумал решение дописать префикс с помощью лиспа - прикреплен
а вот как разнести горизонтали по вертикали - проблема с поиском

может кто уже скачал или точно помнит где есть лисп
на форум.dwg

Add Prefix Suffix.LSP

для чего все это мне нада есть одна прога она делает цифровую модель рельефа (ЦМР) потом при построении профиля она сама определяет отметки, а чтоб она сделала цмр вертикалка должна быть корректной не в одной плоскости

Последний раз редактировалось PsixVK, 29.03.2013 в 18:16.
PsixVK вне форума  
 
Непрочитано 29.03.2013, 15:21
#8
sertor

Геодезист
 
Регистрация: 23.05.2012
Ухта
Сообщений: 1,374


Цитата:
Сообщение от PsixVK Посмотреть сообщение
ищу на форуме лисп который гамузом переводил вертикалку сделанную в одной плоскости на те те отметки которые написаны возле горизонталей
А Вы ничего не путаете? Может быть Вы встречали лисп, поднимающий точку на высоту стоящего рядом текста?
__________________
Как-то так.
sertor вне форума  
 
Непрочитано 29.03.2013, 15:24
#9
PsixVK


 
Регистрация: 19.10.2012
Киев
Сообщений: 749


Цитата:
Сообщение от sertor Посмотреть сообщение
А Вы ничего не путаете? Может быть Вы встречали лисп, поднимающий точку на высоту стоящего рядом текста?
честно говоря может и путаю прошло много времи (больничного - операцию делали) но вот такое чувство что видел именно лисп который подымает полилинии на отметку написанную рядом
с уверенность в том что видел тут 50%
PsixVK вне форума  
 
Непрочитано 29.03.2013, 16:34
#10
Владимир.

Проектирую
 
Регистрация: 10.01.2005
Сообщений: 3,736


Цитата:
Сообщение от PsixVK Посмотреть сообщение
такое чувство что видел именно лисп который подымает полилинии на отметку написанную рядом
Тогда нужно удалить остальной текст, чтобы остались только отметки. Иначе лисп поднимет горизонталь на отметку, равную номеру скважины или на координату.
А ваши генпланисты в Геониксе не работают? У них нет поверхностей?
В примере линий немного. Можно и вручную

Последний раз редактировалось Владимир., 29.03.2013 в 16:42.
Владимир. вне форума  
 
Непрочитано 29.03.2013, 18:08
#11
PsixVK


 
Регистрация: 19.10.2012
Киев
Сообщений: 749


Цитата:
Сообщение от Владимир. Посмотреть сообщение
Тогда нужно удалить остальной текст, чтобы остались только отметки. Иначе лисп поднимет горизонталь на отметку, равную номеру скважины или на координату.
А ваши генпланисты в Геониксе не работают? У них нет поверхностей?
В примере линий немного. Можно и вручную
ну слой изолировать можно (команда в експрес тулз есть или в кадах версии 2007 вроде и выше) зачем удалять
оп оп а что за лисп? у вас он есть? или ссылочку на него если можно
есть такая каста которым и так все хорошо их пересадили с кульманов на компы, а привычки то остались. их хлебом не корми дай линии текстом выполнить, а текст линиями.
Спрашивал пользуют ли какие полезные проги может там цивил 3Д (он вроде тоже чето там помогает)
их ответ "нет. так быстрее" ....
да можно и вручную но.... хочется постоянно упростить работу
PsixVK вне форума  
 
Непрочитано 29.03.2013, 21:51
1 | #12
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,091


Эх, тряхнем стариной (4 года не писал на лиспе)
Сразу говорю - код для тестирования работоспособности, поэтому сырой, написан низким штилем, свистелки и дуделки отстутствуют никакого удобства для пользователя и защиты от ошибок.
Перед использованием желательно пообъединять соприкасающиеся, но разорзненные полилинии (например, с помощью pltools)
Потом ввести команду kp_elev и смотреть, что будет

Код:
[Выделить все]
 (defun c:kp_elev (/ P1 P2 P3 P4 PL_LIST P_LIST SS_PL SS_TEXT TEXT_LIST TH T_PL
		 )
(vl-cmdf "_zoom" "_all")
(setq ss_text (ssget "_X" '((0 . "TEXT") (8 . "красн гор"))))
(setq text_list (ssnamex ss_text))
(setq ss_text nil)
(setq text_list (mapcar 'cadr text_list))
(foreach x text_list
  (vl-cmdf "_UCS" "_n" "_ob" x)
  (setq th (cdr (assoc 40 (entget x))))
  (setq p1 (list (* -0.5 th) (- th) 0) p2 (list (* 1.5 th) (* 1.5 th) 0) p3 (list (* -0.5 th) (* 1.5 th) 0) p4 (list (* 1.5 th) (- th) 0))
  (setq p_list (list (trans p1 1 0) (trans p3 1 0) (trans p2 1 0) (trans p4 1 0)))

  (setq t_pl  (subst
		(append (list 10) (trans (list 0 0 (atof (cdr (assoc 1 (entget x))))) 1 0))
		(assoc 10 (entget x))
                (entget x)
	      )
  )
  (entmod t_pl)
  
  
  (vl-cmdf "_UCS" "_w")

  (setq ss_pl (ssget "_CP" p_list '((0 . "*OLYLINE") (8 . "красн гор"))))
(if ss_pl
  (progn
  (setq pl_list (ssnamex ss_pl))
  (setq ss_pl nil)
  (setq pl_list (mapcar 'cadr pl_list))
  (setq pl_list (vl-remove-if-not '(lambda (k) (eq (type k) 'ENAME)) pl_list))
  (setq pl_list (mapcar 'vlax-ename->vla-object pl_list))
  (FOREACH y pl_list
    (vla-put-elevation y (atof (cdr (assoc 1 (entget x)))))
  )


  
	      
  )
  )
)  
)
  

Последний раз редактировалось kp+, 29.03.2013 в 22:03.
kp+ вне форума  
 
Непрочитано 31.03.2013, 14:04
#13
PsixVK


 
Регистрация: 19.10.2012
Киев
Сообщений: 749


подгрузил
выдает ошибку (
Цитата:
Команда: _appload горизонтали подъем.LSP успешно загружено.


Команда: ; ошибка: синтаксическая ошибка

Команда:
Команда: <Координаты откл>
Команда: kp_elev
Неизвестная команда "KP_ELEV". Для вызова справки нажмите F1.
PsixVK вне форума  
 
Непрочитано 02.04.2013, 10:26
1 | #14
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,091


Эээ... попробуйте самом начале добавить (vl-load-com)?
kp+ вне форума  
 
Непрочитано 02.04.2013, 10:45
#15
PsixVK


 
Регистрация: 19.10.2012
Киев
Сообщений: 749


я надесь верно сделал

Код:
[Выделить все]
 (vl-load-com)
(defun c:kp_elev (/ P1 P2 P3 P4 PL_LIST P_LIST SS_PL SS_TEXT TEXT_LIST TH T_PL
             )
    (vl-cmdf "_zoom" "_all")
    (setq ss_text (ssget "_X" '((0 . "TEXT") (8 . "красн гор"))))
    (setq text_list (ssnamex ss_text))
    (setq ss_text nil)
    (setq text_list (mapcar 'cadr text_list))
    (foreach x text_list
      (vl-cmdf "_UCS" "_n" "_ob" x)
      (setq th (cdr (assoc 40 (entget x))))
      (setq p1 (list (* -0.5 th) (- th) 0) p2 (list (* 1.5 th) (* 1.5 th) 0) p3 (list (* -0.5 th) (* 1.5 th) 0) p4 (list (* 1.5 th) (- th) 0))
      (setq p_list (list (trans p1 1 0) (trans p3 1 0) (trans p2 1 0) (trans p4 1 0)))
     
      (setq t_pl  (subst
            (append (list 10) (trans (list 0 0 (atof (cdr (assoc 1 (entget x))))) 1 0))
            (assoc 10 (entget x))
                    (entget x)
              )
      )
      (entmod t_pl)
       
       
      (vl-cmdf "_UCS" "_w")
     
      (setq ss_pl (ssget "_CP" p_list '((0 . "*OLYLINE") (8 . "красн гор"))))
    (if ss_pl
      (progn
      (setq pl_list (ssnamex ss_pl))
      (setq ss_pl nil)
      (setq pl_list (mapcar 'cadr pl_list))
      (setq pl_list (vl-remove-if-not '(lambda (k) (eq (type k) 'ENAME)) pl_list))
      (setq pl_list (mapcar 'vlax-ename->vla-object pl_list))
      (FOREACH y pl_list
        (vla-put-elevation y (atof (cdr (assoc 1 (entget x)))))
      )
     
     
       
               
      )
      )
    ) 
    )
после того как добавил рекомендованное лисп заработал )))
огромное спасибо
еще такой вопрос:
а могли бы вы его немножко переделать чтобы он был универсальным тоесть работал не с одним слоем "красн гор" а с любым в котором нарисованы горизонтали чтобы не переименовывать слой
хотя и так супер )
еще маленькое дополнение с моей стороны
для более корректной работы перед выполнением команды сделать несколько действий
выполнить команда PL-JOIN из дополнения http://dwg.ru/dnl/607
и к дробным горизонталям (числам) добавить целые в виде префикса командой
Код:
[Выделить все]
 ;Add Prefix Suffix
(defun c:AddPS (/ aDoc oldPref oldSuf count)
(vl-load-com)

(setq aDoc(vla-get-ActiveDocument(vlax-get-acad-object)))
(vla-StartUndoMark aDoc)
(if(not rnm:Pref)(setq rnm:Pref ""))(if(not rnm:Suf)(setq rnm:Suf ""))
(setq oldPref rnm:Pref oldSuf rnm:Suf); end setq
(setq rnm:Pref (getstring T
         (strcat "\nType prefix:(If you want to delete prefix type ' ' (press SPACE key on keyboard) <" rnm:Pref "> :")))
(if(= "" rnm:Pref)(setq rnm:Pref oldPref))(if(= " " rnm:Pref)(setq rnm:Pref ""))
(setq rnm:Suf (getstring T
                (strcat "\nType suffix:(If you want to delete prefix type ' ' (press SPACE key on keyboard) <"rnm:Suf"> :")))
(if(= "" rnm:Suf)(setq rnm:Suf oldSuf))(if(= " " rnm:Suf)(setq rnm:Suf ""))
(princ "\nSelect text")(setq count 0)  
(if  (setq ss (ssget "_:L" '((0 . "*TEXT"))))
 (foreach item (mapcar 'vlax-ename->vla-object(vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))
   (setq count (1+ count))
   (vla-put-textstring item (strcat rnm:Pref (vla-get-textstring item) rnm:Suf))
   )
  )
(princ (strcat "\n" (itoa count) " texts are processed "))
(vla-EndUndoMark aDoc)(princ))
(princ "\nType AddPS to run")

Последний раз редактировалось PsixVK, 02.04.2013 в 11:41.
PsixVK вне форума  
 
Непрочитано 02.04.2013, 12:26
#16
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,091


Цитата:
Сообщение от PsixVK Посмотреть сообщение
с любым в котором нарисованы горизонтали
а как определить, что это горизонтали, а не что-нибудь еще? Для этого прога должна "читать чертеж" по смыслу, т.е. обладать недюжинным искусственным интеллектом. Я такого уровня программирования вряд ли достигну
Могу добавить ВЫБОР ПОЛЬЗОВАТЕЛЕМ слоя с горизонталями, это нетрудно.

Как прога работает с очень часто расположенными горизонталями? В местах, где и человеку без бутылки не разобраться, к какой линии какое число относится? Сомнения возникли, а досконально проверять некогда... Есть ли какой-то стандарт, где должно быть число - сверху или снизу от линии? Я просто ни разу не геодезист....

Последний раз редактировалось kp+, 02.04.2013 в 12:32.
kp+ вне форума  
 
Непрочитано 02.04.2013, 12:35
#17
PsixVK


 
Регистрация: 19.10.2012
Киев
Сообщений: 749


ну проверял работоспособность вроде нет проблем все отлично!
есть нюансы которые нужно вручную править - но с этим никакая программа никак не справится
так как культуру исполнения чертежа программа не исправит
какраз проверял часто расположенные горизонтали - вроде работает
ВЫБОР ПОЛЬЗОВАТЕЛЕМ слоя с горизонталями -если не трудно )
даже в таком состоянии программа супер

Цитата:
Есть ли какой-то стандарт, где должно быть число - сверху или снизу от линии?
по всем правилам, основание чисел должно указывать направление снижения рельефа. но так как генпланисты сильно упрощают себе работу - пишут числа как им вздумается....

меня порвало на 1000 довольных хомячков - от лиспа)))

Последний раз редактировалось PsixVK, 02.04.2013 в 12:42.
PsixVK вне форума  
 
Непрочитано 02.04.2013, 15:42
1 | #18
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,091


Вот. Добавил запрос слоя. И еще: проблемные горизонтали выделяются ядовитым зеленым цветом. Соответствующий слой просьба в этот цвет не красить.
Код:
[Выделить все]
  (defun c:kp_elev (/ P1 P2 P3 P4 PL_LIST P_LIST SS_PL SS_TEXT TEXT_LIST TH T_PL layer_mark
		 )
(vl-load-com)
(setq layer_mark (vla-get-layer (vlax-ename->vla-object (car (nentsel "щелкните по слою с горизонталями")))))
(vl-cmdf "_zoom" "_all")   
(setq ss_text (ssget "_X" (list (cons 0 "TEXT") (cons 8 layer_mark))))
(setq text_list (ssnamex ss_text))
(setq ss_text nil)
(setq text_list (mapcar 'cadr text_list))
(foreach x text_list
  (vl-cmdf "_UCS" "_n" "_ob" x)
  (setq th (cdr (assoc 40 (entget x))))
  (setq p1 (list (* -0.5 th) (- th) 0) p2 (list (* 1.5 th) (* 1.5 th) 0) p3 (list (* -0.5 th) (* 1.5 th) 0) p4 (list (* 1.5 th) (- th) 0))
  (setq p_list (list (trans p1 1 0) (trans p3 1 0) (trans p2 1 0) (trans p4 1 0)))

  (setq t_pl  (subst
		(append (list 10) (trans (list 0 0 (atof (cdr (assoc 1 (entget x))))) 1 0))
		(assoc 10 (entget x))
                (entget x)
	      )
  )
  (entmod t_pl)
  
  
  (vl-cmdf "_UCS" "_w")

  (setq ss_pl (ssget "_CP" p_list (list (cons 0  "*OLYLINE") (cons 8 layer_mark))))
(if ss_pl
  (progn
  (setq pl_list (ssnamex ss_pl))
  (setq ss_pl nil)
  (setq pl_list (mapcar 'cadr pl_list))
  (setq pl_list (vl-remove-if-not '(lambda (k) (eq (type k) 'ENAME)) pl_list))
  (setq pl_list (mapcar 'vlax-ename->vla-object pl_list))
  (FOREACH y pl_list
    (progn
    (vla-put-elevation y (atof (cdr (assoc 1 (entget x)))))
    (if (> (length pl_list) 3)
      (vla-put-color y 3)
    )
    )
  )


  
	      
  )
  )
)  
)
  
kp+ вне форума  
 
Непрочитано 02.04.2013, 15:46
#19
PsixVK


 
Регистрация: 19.10.2012
Киев
Сообщений: 749


Цитата:
Сообщение от kp+ Посмотреть сообщение
проблемные горизонтали выделяются ядовитым зеленым цветом
вы читаете мои мысли )

Offtop: будете в Киеве пишите с меня пиво) если поеду в Днепр отпишу и поставлю пиво
PsixVK вне форума  
 
Непрочитано 02.04.2013, 15:52
#20
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,091


kp+ вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Задание координаты Z у сплайна или полилинии при помощи команды????

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Новые команды для работы с полилинией VVA Программирование 647 18.09.2023 11:16
Текст вдоль полилинии или сплайна (по кривой) Denioska AutoCAD 48 10.09.2022 21:55
Координаты точки, лежащей на полилинии Al_Taron Программирование 1 27.11.2006 09:45
Создание surface из сплайна или полилинии WinDer AutoCAD 2 02.02.2006 10:17
Как пересчитать координаты полилинии выбранной nentsel в МСК kp+ Программирование 1 29.07.2005 20:49