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

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Расстановка номеров пикетов по трассе трубопровода.

Расстановка номеров пикетов по трассе трубопровода.

Ответ
Поиск в этой теме
Непрочитано 19.06.2009, 13:12 #1
Расстановка номеров пикетов по трассе трубопровода.
Jeriko
 
Регистрация: 18.06.2009
Сообщений: 118

Имеется план трассы трубопровода, необходимо каждые 100м проставить номер пикета (ПК00+00, ПК01+00...ПК99+00).

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

Отсюда вопрос: каким образом можно научить автокад, автоматически проставлять номера пикетов по возрастающей ПК00+00, ПК01+00 и тд?Есть ли возможность реализовать это с помощью динамического блока? Или с помощью команды _dataextraction, можно ли создать связь с экселем , таким образом чтобы при изменении значения в экселе менялось значение текста на самом чертеже?
Просмотров: 53704
 
Непрочитано 19.06.2009, 13:37
#2
sasha_lif

Дизайнер-конструктор
 
Регистрация: 29.05.2004
Kiev
Сообщений: 1,179
<phrase 1=


Первый способ:
tcount
это из express-ov автоматический текстовый нумератор, можно задавать префиксы, приращение...

второй способ:
создаешь блок с атрибутом , а потом с помощью xblocknum.lsp нумеруешь
Вложения
Тип файла: lsp xblocknum.lsp (2.0 Кб, 1089 просмотров)
__________________
Kiev, Ukraine
sasha_lif вне форума  
 
Автор темы   Непрочитано 22.06.2009, 13:04
#3
Jeriko


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


Express-ov к сожелению у меня нет...

По второму способу тоже не получается...создаю блок с атрибутом, расставляю его по трассе, затем загружаю этот лисп, пишу имя блока/префикс/суффикс/стартовый номер, выбираю все эти блоки и ничего не происходит. Что я не правильно делаю?
Вложения
Тип файла: dwg
DWG 2007
Measure.dwg (415.4 Кб, 7309 просмотров)
Jeriko вне форума  
 
Непрочитано 22.06.2009, 13:38
#4
sasha_lif

Дизайнер-конструктор
 
Регистрация: 29.05.2004
Kiev
Сообщений: 1,179
<phrase 1=


Да, что-то не так с коммандой measure?
Кто подскажет, почему, при пользовании measure , с применением блока с атрибутом , такое впечатление, что атрибут как-то проваливается, что его не видно (но внутри блока он лежит..)
См. файл: если я всавляю блок qwerty через insert , то я вижу его атрибут, при measure с блоком, атрибут уже не видно? Кто может подсказать, в чем причина???
(для вручную вставленных блоков lisp из №2 работает)
Вложения
Тип файла: dwg
DWG 2004
Measure_2004.dwg (138.7 Кб, 7170 просмотров)
__________________
Kiev, Ukraine
sasha_lif вне форума  
 
Автор темы   Непрочитано 22.06.2009, 15:07
#5
Jeriko


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


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

а вот на своем чертеже я почему то не могу заставить работать этот лисп...

и еще, как лисп выбирает с какого конца начинать нумерацию? он всегда нумерует снизу вверх?
Jeriko вне форума  
 
Непрочитано 23.06.2009, 10:56
#6
sasha_lif

Дизайнер-конструктор
 
Регистрация: 29.05.2004
Kiev
Сообщений: 1,179
<phrase 1=


Цитата:
Express-ov к сожелению у меня нет...
Скачай Express , на этом сайте есть, + как устанавливать рассписано.. и tcount позволяет задать как нумеровать (сортировка по x bли y)
Цитата:
нужно выбрать все блоки, которые получились после применения команды _measure и обновить их.
а как обновить блок?? и что, после этого ты видишь атрибуты этого блока, расставленного measure?
__________________
Kiev, Ukraine
sasha_lif вне форума  
 
Автор темы   Непрочитано 23.06.2009, 13:07
#7
Jeriko


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


_battman и атрибуты сразу появятся.

пойду тогда експресс искать и ставить, спасибо за помощь!
Jeriko вне форума  
 
Непрочитано 23.06.2009, 14:31
#8
sasha_lif

Дизайнер-конструктор
 
Регистрация: 29.05.2004
Kiev
Сообщений: 1,179
<phrase 1=


Цитата:
и еще, как лисп выбирает с какого конца начинать нумерацию? он всегда нумерует снизу вверх?
Вроде да, но если тебе необходимо наооборот сверху -вниз, то с помощью UCS можно попробовать заставить нумеровать и по другому (на крайний случай-Mirror развернуть линию)
Спасибо за _battman
__________________
Kiev, Ukraine
sasha_lif вне форума  
 
Непрочитано 23.06.2009, 17:15
#9
Victor


 
Регистрация: 14.06.2009
Бат-Ям
Сообщений: 295


попробуйте
Код:
[Выделить все]
(defun c:b2p ( / name_of_bl dis pln dis_pl dis_run i krd prm_pnt
                 proiz ugol_pl ugol_pl_gr my_blok my_att spis_att
                 att_old att_new spis_att strt stp snp)
(setq snp (getvar "Osmode"))
(setvar "Osmode" 0)
(setq name_of_bl (getstring "Name of blok?  "))
(setq dis (getreal "Distance?  "))
(setq strt (getint "\nStart number?  "))
(setq stp  (getint "\nStep?  ")) 
(setq pln (car (entsel)))
(setq dis_pl (vlax-curve-getDistAtParam pln (vlax-curve-getEndParam pln)))
(setq dis_run (- 0.0 dis) i (- strt stp))
(while(< (+ dis_run dis) dis_pl)
(progn
(setq i (+ i stp))
(setq dis_run (+ dis_run dis))
(setq krd (vlax-curve-getPointAtDist pln dis_run))
(setq prm_pnt  (vlax-curve-getParamAtPoint pln krd))
(setq proiz (vlax-curve-getFirstDeriv pln prm_pnt))
(setq ugol_pl (angle '(0 0 0) proiz))
(setq ugol_pl_gr (* ugol_pl 57.29747))
(setvar "attreq" 0)
(command "_.insert" name_of_bl krd 1.0 1.0 ugol_pl_gr)
(setq my_blok (entlast))
(setq my_att (entnext my_blok))
(setq spis_att (entget my_att)) ;spisok 
(setq att_old (assoc 1 spis_att)) ;name
(setq att_new (cons 1 (itoa i))) ;
(setq spis_att (subst att_new att_old spis_att)); zamena
(entmod spis_att)
(entupd  (cdr (assoc -1 spis_att)))
) ;progn
)
(setvar "Osmode" snp)
)

Последний раз редактировалось Victor, 23.06.2009 в 17:21.
Victor вне форума  
 
Непрочитано 23.06.2009, 22:21
#10
Sergiy

Проектировщик, гидротехник
 
Регистрация: 23.03.2006
Киев
Сообщений: 59


Пользуюсь ToolPac'ом: команда polyline -> Station (пикет), но блок "Polysta" переделал по-своему
Sergiy вне форума  
 
Автор темы   Непрочитано 24.06.2009, 08:55
#11
Jeriko


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


Victor, в качестве объекта что выбирать надо? полилинию? у меня автокад потом ругается:
Код:
[Выделить все]
Выберите объект: ; ошибка: no function definition: VLAX-CURVE-GETENDPARAM
И еще, Ваш лисп только номера проставляет? Префиксы он не проставляет?
Jeriko вне форума  
 
Непрочитано 24.06.2009, 09:15
#12
Victor


 
Регистрация: 14.06.2009
Бат-Ям
Сообщений: 295


Добавьте вначале (vl-load-com). Выбирать надо полилинию.
Прога и так перегружена вопросами. Префиксы надо в отдельную программу сделать.
Victor вне форума  
 
Автор темы   Непрочитано 24.06.2009, 09:39
#13
Jeriko


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


Victor, заработало, спасибо. лисп отличный и полилинию разбивает и номера проставляет. еще бы его совместить с лиспом, который выкладывал sasha_lif, чтобы преффиксы и суффиксы проставлял, ему бы вообще цены не было.
Jeriko вне форума  
 
Непрочитано 24.06.2009, 10:05
#14
Victor


 
Регистрация: 14.06.2009
Бат-Ям
Сообщений: 295


Раз вам так хочется плюс ещё 2 вопроса. На первый если не хотим жмём ENTER. Если хотим жмём S или P .Тогда спросит чего изволите. Тестируйте
Код:
[Выделить все]
(vl-load-com)
(defun c:b2p ( / name_of_bl dis pln dis_pl dis_run i krd prm_pnt
proiz ugol_pl ugol_pl_gr my_blok my_att spis_att
att_old att_new spis_att strt stp)
(setq snp (getvar "Osmode"))
(setvar "Osmode" 0) 
(setq name_of_bl (getstring "Name of blok? "))
(setq dis (getreal "Distance? "))
(setq strt (getint "\nStart number? "))
(setq stp (getint "\nStep? ")) 
(setq flag (getstring "\nS/P? "))
(if(/= "" flag)(setq suf_prf (getstring "\nSuffiks/Prefiks? ")))
(setq pln (car (entsel)))
(setq dis_pl (vlax-curve-getDistAtParam pln (vlax-curve-getEndParam pln)))
(setq dis_run (- 0.0 dis) i (- strt stp))
(while(< (+ dis_run dis) dis_pl)
(progn
(setq i (+ i stp))
(setq dis_run (+ dis_run dis))
(setq krd (vlax-curve-getPointAtDist pln dis_run))
(setq prm_pnt (vlax-curve-getParamAtPoint pln krd))
(setq proiz (vlax-curve-getFirstDeriv pln prm_pnt))
(setq ugol_pl (angle '(0 0 0) proiz))
(setq ugol_pl_gr (* ugol_pl 57.29747))
(setvar "attreq" 0)
(command "_.insert" name_of_bl krd 1.0 1.0 ugol_pl_gr)
(setq my_blok (entlast))
(setq my_att (entnext my_blok))
(setq spis_att (entget my_att)) ;spisok 
(setq att_old (assoc 1 spis_att)) ;name
(setq num_new (itoa i))
(if(or (= flag "s")(= flag "S"))(setq num_new (strcat num_new suf_prf))) 
(if(or (= flag "p")(= flag "P"))(setq num_new (strcat suf_prf num_new))) 
(setq att_new (cons 1 num_new)) ;
(setq spis_att (subst att_new att_old spis_att)); zamena
(entmod spis_att)
(entupd (cdr (assoc -1 spis_att)))
) ;progn
)
(setvar "Osmode" snp)
)
Victor вне форума  
 
Автор темы   Непрочитано 24.06.2009, 14:00
#15
Jeriko


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


А если всего и сразу хочется? Всмысле и префикс, и суффикс поставить?
Jeriko вне форума  
 
Непрочитано 24.06.2009, 14:14
#16
Victor


 
Регистрация: 14.06.2009
Бат-Ям
Сообщений: 295


Ну вы блин даёте. Завтра, если придумаю.
Victor вне форума  
 
Непрочитано 24.06.2009, 20:43
#17
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450


Цитата:
Сообщение от Jeriko Посмотреть сообщение
А если всего и сразу хочется? Всмысле и префикс, и суффикс поставить?
А если поискать?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 24.06.2009, 21:06
#18
Jeriko


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


Кулик Алексей aka kpblc, ничего подобного мне найти не удалось...есть лиспы просто нумерации блоков, которые выкладывались уже сдесь, а этот и проставляет блоки по трассе, и сразу нумерует их.
Jeriko вне форума  
 
Непрочитано 24.06.2009, 21:21
#19
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450


Jeriko, сорри.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 25.06.2009, 08:06
#20
Victor


 
Регистрация: 14.06.2009
Бат-Ям
Сообщений: 295


Дело двух минут как оказалось.
Код:
[Выделить все]
(vl-load-com) 
(defun c:b2p ( / name_of_bl dis pln dis_pl dis_run i krd prm_pnt
proiz ugol_pl ugol_pl_gr my_blok my_att spis_att
att_old att_new spis_att strt stp)
(setq snp (getvar "Osmode"))
(setvar "Osmode" 0) 
(setq name_of_bl (getstring "Name of blok? "))
(setq dis (getreal "Distance? "))
(setq strt (getint "\nStart number? "))
(setq stp (getint "\nStep? ")) 
(setq pref (getstring "\nPrefiks? "))
(setq suff (getstring "\nSuffiks? "))
(setq pln (car (entsel)))
(setq dis_pl (vlax-curve-getDistAtParam pln (vlax-curve-getEndParam pln)))
(setq dis_run (- 0.0 dis) i (- strt stp))
(while(< (+ dis_run dis) dis_pl)
(progn
(setq i (+ i stp))
(setq dis_run (+ dis_run dis))
(setq krd (vlax-curve-getPointAtDist pln dis_run))
(setq prm_pnt (vlax-curve-getParamAtPoint pln krd))
(setq proiz (vlax-curve-getFirstDeriv pln prm_pnt))
(setq ugol_pl (angle '(0 0 0) proiz))
(setq ugol_pl_gr (* ugol_pl 57.29747))
(setvar "attreq" 0)
(command "_.insert" name_of_bl krd 1.0 1.0 ugol_pl_gr)
(setq my_blok (entlast))
(setq my_att (entnext my_blok))
(setq spis_att (entget my_att)) ;spisok 
(setq att_old (assoc 1 spis_att)) ;name
(setq num_new (itoa i))
(setq num_new (strcat pref num_new suff))) 
(setq att_new (cons 1 num_new)) ;
(setq spis_att (subst att_new att_old spis_att)); zamena
(entmod spis_att)
(entupd (cdr (assoc -1 spis_att)))
) ;progn
)
(setvar "Osmode" snp)
)
Сейчас обнаружил что работает и с 3D линиями и сплайнами если не сильно изогнутые

Последний раз редактировалось Victor, 25.06.2009 в 08:43. Причина: ochepjatka
Victor вне форума  
 
Автор темы   Непрочитано 25.06.2009, 08:54
#21
Jeriko


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


То, что нужно! Шикарно работает, теперь работа которая раньше занимала часа 4 делается за 1 минуту! Виктор, спасибо Вам огромное!
Jeriko вне форума  
 
Непрочитано 25.06.2009, 10:40
#22
skif58

Наше дело труба
 
Регистрация: 19.11.2006
Томск_Комсомольск-на-Амуре
Сообщений: 1,736
<phrase 1= Отправить сообщение для skif58 с помощью Yahoo Отправить сообщение для skif58 с помощью Skype™


Jeriko, а вот теперь я упустил здесь ход мысли... Поясните коротенько плиз, как это должно правильно работать, - мне тоже пригодится.
У меня получается с этим лиспом, что для каждого пикета нужен щелчок ПКМ или ввод.
Так должно быть или должно быть автоматом - сразу все пикеты по всей выбраной полилинии?
__________________
*...И Случай, бог изобретатель. *
skif58 вне форума  
 
Автор темы   Непрочитано 25.06.2009, 10:59
#23
Jeriko


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


Все автоматом делается, лисп сразу проставляет блоки по трассе с заданным шагом и нумерует их.

Алгоритм такой: создаете блок с атрибутом / далее запукаете лисп (_b2p) / пишете название блока, который необходимо рассавить по трассе / указываете шаг расстановки / число с которого начнется нумерация блока / шаг нумерации / пишите префикс (если он не нужен жмете пробел) / пишите суффикс (если он не нужен жмете пробел) / выбираете объект по которому необходимо раставить блоки и вуаля, все готово
Jeriko вне форума  
 
Непрочитано 25.06.2009, 11:44
#24
skif58

Наше дело труба
 
Регистрация: 19.11.2006
Томск_Комсомольск-на-Амуре
Сообщений: 1,736
<phrase 1= Отправить сообщение для skif58 с помощью Yahoo Отправить сообщение для skif58 с помощью Skype™


Ну вроде все так и делаю... - блок точка с атрибутом по умолчанию хх
запускаю лисп и далее по тексту...
После выбора полилинии ставит в ее начале блок - хх и точка и все Если щелкать дальше то ставит пикеты... с таким логом:
Команда: b2p
Name of blok? 1
Distance? 100
Start number? 0
Step? 1
Prefiks? ПК
Suffiks?
Выберите объект: 63.694577
63.694577
63.694577
63.694577
63.694577

и.т.д.
__________________
*...И Случай, бог изобретатель. *
skif58 вне форума  
 
Автор темы   Непрочитано 25.06.2009, 12:29
#25
Jeriko


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


А что вы в качестве объекта выбираете? Нужно линию по которой необходимо раставить пикеты выбирать.

Вот на этом чертеже все работает. Сравните.
Вложения
Тип файла: dwg
DWG 2007
Measure.dwg (189.5 Кб, 3330 просмотров)

Последний раз редактировалось Jeriko, 25.06.2009 в 12:37. Причина: добавление
Jeriko вне форума  
 
Непрочитано 25.06.2009, 12:37
#26
sasha_lif

Дизайнер-конструктор
 
Регистрация: 29.05.2004
Kiev
Сообщений: 1,179
<phrase 1=


skif58, скорее всего писалось для одной версии акада, а вы работаете в другой, и в какой-то комманде лиспа, изменилось формула приглашения, или добавилась какая нибудь опция
__________________
Kiev, Ukraine
sasha_lif вне форума  
 
Непрочитано 25.06.2009, 12:44
#27
skif58

Наше дело труба
 
Регистрация: 19.11.2006
Томск_Комсомольск-на-Амуре
Сообщений: 1,736
<phrase 1= Отправить сообщение для skif58 с помощью Yahoo Отправить сообщение для skif58 с помощью Skype™


Цитата:
Сообщение от Jeriko Посмотреть сообщение
А что вы в качестве объекта выбираете? Нужно линию по которой необходимо раставить пикеты выбирать.
Ну да. Вот картинка.
Похоже sasha_lif прав... - у меня 2008-ой русский...
Ну да ладно... - если нажать и держать ввод, то все получается автоматом...
Миниатюры
Нажмите на изображение для увеличения
Название: Пикетаж.gif
Просмотров: 377
Размер:	292.0 Кб
ID:	22842  
__________________
*...И Случай, бог изобретатель. *

Последний раз редактировалось skif58, 25.06.2009 в 12:50.
skif58 вне форума  
 
Автор темы   Непрочитано 25.06.2009, 12:50
#28
Jeriko


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


skif58, у меня тоже автокад 2008 русский стоит, так что думаю не в этом дело.

Последний раз редактировалось Jeriko, 25.06.2009 в 12:52. Причина: опечатка
Jeriko вне форума  
 
Непрочитано 25.06.2009, 12:52
#29
skif58

Наше дело труба
 
Регистрация: 19.11.2006
Томск_Комсомольск-на-Амуре
Сообщений: 1,736
<phrase 1= Отправить сообщение для skif58 с помощью Yahoo Отправить сообщение для skif58 с помощью Skype™


Цитата:
Сообщение от Jeriko Посмотреть сообщение
skif58, у меня тока автокад 2008 русский стоит, так что думаю не в этом дело.
Тогда странно...
__________________
*...И Случай, бог изобретатель. *
skif58 вне форума  
 
Автор темы   Непрочитано 25.06.2009, 12:54
#30
Jeriko


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


Попробуйте в моем файле этот лисп применить.
Jeriko вне форума  
 
Непрочитано 25.06.2009, 14:15
#31
skif58

Наше дело труба
 
Регистрация: 19.11.2006
Томск_Комсомольск-на-Амуре
Сообщений: 1,736
<phrase 1= Отправить сообщение для skif58 с помощью Yahoo Отправить сообщение для skif58 с помощью Skype™


Цитата:
Сообщение от Jeriko Посмотреть сообщение
Попробуйте в моем файле этот лисп применить.
С Вашим блоком работает, с моим нет.
И ориентация блока не та. Сравните плиз с моим блоком 2, может я блок как-то не так делаю?
Вложения
Тип файла: dwg
DWG 2007
Measure_Re.dwg (191.3 Кб, 3092 просмотров)
__________________
*...И Случай, бог изобретатель. *

Последний раз редактировалось skif58, 25.06.2009 в 14:28.
skif58 вне форума  
 
Непрочитано 25.06.2009, 14:43
#32
Hohotun


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


а можно ли как нибудь сделать что бы пикеты были горизонтально а не выравнивались в зависимости от трассы?
Hohotun вне форума  
 
Непрочитано 25.06.2009, 14:56
#33
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,925
<phrase 1=


Victor, может еще пару запросов пусть обрабатывает??
  1. А если надо расстановку не с определенным шагом, а каждый раз разное?? Думаю надо добавить, что-то типа команд _divide и _measure
  2. Также Hohotun правильно указал нужен запрос на разрешение поворота блока, опять же по типу выше указанных команд
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 25.06.2009, 15:14
#34
Hohotun


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


Цитата:
Сообщение от zenon Посмотреть сообщение
Также Hohotun правильно указал нужен запрос на разрешение поворота блока, опять же по типу выше указанных команд
я имел ввиду не столько всего блока а именно текста, тоесть засечки рапологаются перепендикулярно трассе а текст горизонтально.
Hohotun вне форума  
 
Непрочитано 25.06.2009, 15:22
#35
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,925
<phrase 1=


Цитата:
Сообщение от Hohotun Посмотреть сообщение
я имел ввиду не столько всего блока а именно текста, тоесть засечки рапологаются перепендикулярно трассе а текст горизонтально.
гдето мелькала прога по изменению свойств аттрибутов блока, поищи.
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 25.06.2009, 15:25
#36
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450


Ну тогда, как вариант:
Код:
[Выделить все]
(vl-load-com)

(defun test (/                    *error*              blk_name             blk_def              blk_ref
             dist                 prefix               suffix               curve                curve_len
             space                att                  _kpblc-conv-vla-to-list                   _kpblc-conv-ent-to-vla
             _kpblc-conv-ent-to-ename                  fun_conv-list-to-string
             fun_get-attr-by-blockref
             )

  (defun *error* (msg)
    (vla-endundomark adoc)
    (princ msg)
    (princ)
    ) ;_ end of defun

  (defun fun_get-attr-by-blockref (ent)
    (apply (function append)
           (mapcar (function _kpblc-conv-vla-to-list)
                   (list (vla-getattributes ent) (vla-getconstantattributes ent))
                   ) ;_ end of mapcar
           ) ;_ end of apply
    ) ;_ end of defun

  (defun fun_conv-list-to-string (lst sep)
    (cond
      ((listp lst)
       (strcat (vl-princ-to-string (car lst))
               (apply (function strcat)
                      (mapcar
                        (function
                          (lambda (x)
                            (strcat sep (vl-princ-to-string x))
                            ) ;_ end of lambda
                          ) ;_ end of function
                        (cdr lst)
                        ) ;_ end of mapcar
                      ) ;_ end of apply
               ) ;_ end of strcat
       )
      (t
       (vl-princ-to-string lst)
       )
      ) ;_ end of cond
    ) ;_ end of defun

  (defun _kpblc-conv-vla-to-list (value / res)
                                 ;|
*    Преобразовывает vlax-variant или vlax-safearray в список.
|;
    (cond
      ((listp value)
       (mapcar '_kpblc-conv-vla-to-list value)
       )
      ((= (type value) 'variant)
       (_kpblc-conv-vla-to-list (vlax-variant-value value))
       )
      ((= (type value) 'safearray)
       (if (>= (vlax-safearray-get-u-bound value 1) 0)
         (_kpblc-conv-vla-to-list (vlax-safearray->list value))
         ) ;_ end of if
       )
      ((and (member (type value) (list 'ename 'str 'vla-object))
            (setq value (_kpblc-conv-ent-to-vla value))
            (and (= (type value) 'vla-object)
                 (vlax-property-available-p value 'count)
                 ) ;_ end of and
            ) ;_ end of and
       (vlax-for sub (_kpblc-conv-ent-to-vla value)
         (setq res (cons sub res))
         ) ;_ end of vlax-for
       )
      (t value)
      ) ;_ end of cond
    ) ;_ end of defun

  (defun _kpblc-conv-ent-to-vla (ent_value / res)
                                ;|
*    Функция преобразования полученного значения в vla-указатель.
*    Параметры вызова:
*	ent_value	значение, которое надо преобразовать в указатель. Может
*			быть именем примитива, vla-указателем или просто
*			списком.
*			Если не принадлежит ни одному из указанных типов,
*			возвращается nil
*    Примеры вызова:
(_kpblc-conv-ent-to-vla (entlast))
(_kpblc-conv-ent-to-vla (vlax-ename->vla-object (entlast)))
|;
    (cond
      ((= (type ent_value) 'vla-object) ent_value)
      ((= (type ent_value) 'ename) (vlax-ename->vla-object ent_value))
      ((setq res (_kpblc-conv-ent-to-ename ent_value))
       (vlax-ename->vla-object res)
       )
      ) ;_ end of cond
    ) ;_ end of defun

  (defun _kpblc-conv-ent-to-ename (ent_value /)
                                  ;|
*    Функция преобразования полученного значения в ename
*    Параметры вызова:
*	ent_value	значение, которое надо преобразовать в примитив. Может
*			быть именем примитива, vla-указателем или просто
*			списком.
*			Если не принадлежит ни одному из указанных типов,
*			возвращается nil
*    Примеры вызова:
(_kpblc-conv-ent-to-ename (entlast))
(_kpblc-conv-ent-to-ename (vlax-ename->vla-object (entlast)))
|;
    (cond
      ((= (type ent_value) 'vla-object)
       (vlax-vla-object->ename ent_value)
       )
      ((= (type ent_value) 'ename) ent_value)
      ((= (type ent_value) 'str) (handent ent_value))
      ((= (type ent_value) 'list) (cdr (assoc -1 ent_value)))
      (t nil)
      ) ;_ end of cond
    ) ;_ end of defun

  (vla-startundomark (setq adoc (vla-get-activedocument (vlax-get-acad-object))))
  (if
    (and (= (type
              (setq blk_name (vl-catch-all-apply
                               (function (lambda (/ res)
                                           (cond
                                             ((and (setq res (getstring "\nИмя блока <Указать> : "))
                                                   (/= res "")
                                                   ) ;_ end of and
                                              res
                                              )
                                             (t (cdr (assoc 2 (entget (car (entsel))))))
                                             ) ;_ end of cond
                                           ) ;_ end of lambda
                                         ) ;_ end of function
                               ) ;_ end of vl-catch-all-apply
                    ) ;_ end of setq
              ) ;_ end of type
            'str
            ) ;_ end of =
         (= (type
              (setq blk_def
                     (vl-catch-all-apply
                       (function
                         (lambda () (vla-item (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) blk_name))
                         ) ;_ end of function
                       ) ;_ end of vl-catch-all-apply
                    ) ;_ end of setq
              ) ;_ end of type
            'vla-object
            ) ;_ end of =
         (= (type (setq dist (vl-catch-all-apply (function (lambda () (getdist "\nРасстояние <Отмена> : "))))))
            'real
            ) ;_ end of =
         (= (type (setq prefix (vl-catch-all-apply (function (lambda () (getstring "\nПрефикс <\"\"> : "))))))
            'str
            ) ;_ end of =
         (= (type (setq suffix (vl-catch-all-apply (function (lambda () (getstring "\nСуффикс <\"\"> : "))))))
            'str
            ) ;_ end of =
         (= (type
              (setq start (vl-catch-all-apply (function (lambda () (getint "\nСтартовый номер <Отмена> : ")))))
              ) ;_ end of type
            'int
            ) ;_ end of =
         (= (type (setq curve (vl-catch-all-apply
                                (function (lambda ()
                                            (princ "\nКривая для обработки : ")
                                            (vlax-ename->vla-object (ssname (ssget "_:E:S" '((0 . "*LINE"))) 0))
                                            ) ;_ end of lambda
                                          ) ;_ end of function
                                ) ;_ end of vl-catch-all-apply
                        ) ;_ end of setq
                  ) ;_ end of type
            'vla-object
            ) ;_ end of =
         (=
           (type
             (setq
               att (vl-catch-all-apply
                     (function
                       (lambda (/ lst)
                         (vlax-for item blk_def
                           (if (wcmatch (strcase (vla-get-objectname item)) "*ATT*")
                             (setq lst (cons item lst))
                             ) ;_ end of if
                           ) ;_ end of vlax-for
                         (cond
                           ((= (length lst) 0)
                            (alert "В выбранном блоке нет атрибутов!")
                            (vla-endundomark adoc)
                            (princ)
                            (exit)
                            )
                           ((= (length lst) 1)
                            (vla-get-tagstring (car lst))
                            )
                           (t
                            (setq lst (mapcar (function vla-get-tagstring) (reverse lst)))
                            (initget (fun_conv-list-to-string lst " "))
                            (getkword
                              (strcat "\nАтрибут для автоназначения [" (fun_conv-list-to-string lst "/") "] <Отмена> : ")
                              ) ;_ end of getkword
                            )
                           ) ;_ end of cond
                         ) ;_ end of lambda
                       ) ;_ end of function
                     ) ;_ end of vl-catch-all-apply
               ) ;_ end of setq
             ) ;_ end of type
           'str
           ) ;_ end of =
         (/= att "")
         ) ;_ end of and
     (progn
       (setq curve_len (vlax-curve-getdistatpoint curve (vlax-curve-getendpoint curve))
             space     (vla-objectidtoobject adoc (vla-get-ownerid curve))
             cur_dist  0.
             ) ;_ end of setq
       (while (<= cur_dist curve_len)
         (setq blk_ref (vla-insertblock
                         space
                         (vlax-3d-point
                           (vlax-curve-getpointatdist curve cur_dist)
                           ) ;_ end of vlax-3d-point
                         blk_name
                         1.
                         1.
                         1.
                         (angle '(0. 0. 0.)
                                (vlax-curve-getfirstderiv
                                  curve
                                  (vlax-curve-getparamatdist curve cur_dist)
                                  ) ;_ end of vlax-curve-getFirstDeriv
                                ) ;_ end of angle
                         ) ;_ end of vla-InsertBlock
               ) ;_ end of setq
         ((lambda (/ att_ref)
            (setq att_ref (car (vl-remove-if-not
                                 (function
                                   (lambda (x)
                                     (wcmatch (strcase (vla-get-tagstring x)) (strcase att))
                                     ) ;_ end of lambda
                                   ) ;_ end of function
                                 (fun_get-attr-by-blockref blk_ref)
                                 ) ;_ end of vl-remove-if-not
                               ) ;_ end of car
                  ) ;_ end of setq
            (vla-put-textstring att_ref (strcat prefix (vl-princ-to-string start) suffix))
            (vla-put-rotation att_ref 0.)
            ) ;_ end of lambda
          )
         (setq start    (1+ start)
               cur_dist (+ cur_dist dist)
               ) ;_ end of setq
         ) ;_ end of while
       ) ;_ end of progn
     ) ;_ end of if
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 25.06.2009, 15:42
#37
Jeriko


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


skif58, найди 10 отличий...искал, искал... не нашел, наши блоки идентичны, видимо проблемма в самом лиспе. причем попробовал команды _measure и _divide с вашим блоком все работает как надо, то есть ориентация у блоков получается перпендикулярно трассе, по чему лиспом они не расставляются я не знаю. С лиспом, который выложил Кулик Алексей aka kpblc, все работает, значит проблемма в самом лиспе.

Кулик Алексей aka kpblc, вопрос по лиспу: можно ли там какнибудь изменить ориентацию текста? тоесть добавить опцию выбора, размещать его горизонтально или же в соответствии с планом трассе.

Последний раз редактировалось Jeriko, 25.06.2009 в 15:53. Причина: добавление
Jeriko вне форума  
 
Непрочитано 25.06.2009, 15:49
#38
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,925
<phrase 1=


Кулик Алексей aka kpblc, критику немного наведу
1. запрос на приращение??
2. запрос на то, каким образом расставлять блоки
а) по указанной длине,
б) указание каждого последующего пикета
в) либо разбить на равное количество участков
3. запрос на поворот блока и его атрибута.
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 25.06.2009, 15:54
#39
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450


zenon, у меня времени на написание лиспа было около 15 минут... По идее (если делать нормальную команду) надо прописывать вообще диалог, в котором все и указывать. Вариант dcl-а я могу накидать, но на этом я и закончусь Делать?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 25.06.2009, 16:04
#40
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,925
<phrase 1=


Конечно делать!!!!!!
А исправлять ошибки будешь??? или
Цитата:
на этом я и закончусь
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 25.06.2009, 16:19
#41
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450


Сильно опасаюсь, что "закончусь". В любом варианте сегодня заняться уже не получается Работы накидали...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 25.06.2009, 16:21
#42
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,925
<phrase 1=


А никто и не торопит
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 25.06.2009, 17:04
#43
skif58

Наше дело труба
 
Регистрация: 19.11.2006
Томск_Комсомольск-на-Амуре
Сообщений: 1,736
<phrase 1= Отправить сообщение для skif58 с помощью Yahoo Отправить сообщение для skif58 с помощью Skype™


Цитата:
Сообщение от Jeriko Посмотреть сообщение
skif58...попробовал команды _measure и _divide с вашим блоком все работает как надо, то есть ориентация у блоков получается перпендикулярно трассе, по чему лиспом они не расставляются я не знаю. С лиспом, который выложил Кулик Алексей aka kpblc, все работает...
Аналогично. Загадка...
Спасибо Алексей. - работает. С запросом поворота текста был бы полный ажур.
__________________
*...И Случай, бог изобретатель. *
skif58 вне форума  
 
Непрочитано 26.06.2009, 07:57
#44
Hohotun


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


как вариант расставить пикеты а потом с помощью express tools преобразовать атрибут блока в текст, ну и потом ручками немного подправить.
Hohotun вне форума  
 
Непрочитано 26.06.2009, 14:05
#45
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,925
<phrase 1=


Алексей, собсно интересуюсь, есть-ли какие подвижки???
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 26.06.2009, 16:20
#46
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450


Пока вариант dcl (скажите, устраивает или нет)
Код:
[Выделить все]
dlg : dialog{label="dwg.ru : Установка блоков по кривой";
	:column{label="Выбор блока и атрибута";
		:popup_list{label="Блок";key="blk_list";}
		:popup_list{label="Атрибут";key="attr_list";}
		}
		spacer_1;
	:column{label="Заполнение атрибута";
		:row{
			:column{
				:radio_button{label="Использовать автонумерацию";key="attr_renum";}
				:edit_box{label="Префикс";key="attr_prefix";}
				:edit_box{label="Суффикс";key="attr_suffix";}
				:edit_box{label="Начальный номер";key="attr_start";}
				:edit_box{label="Приращение";key="attr_plus";}
				}
			:column{label="Фиксир.значение";
				:radio_button{label="Назначить";key="attr_fixed";}
				:edit_box{label="Значение";key="attr_value";}
				}
			}
		}
	:radio_column{label="Расстановка блоков по кривой";
		:row{
			:radio_button{label="Через указанное расстояние";key="is_dist";}
			:edit_box{key="place_dist";}
			:button{key="btn_dist";label="...";}
			}
		:radio_button{label="Вручную указывать каждый элемент";key="is_manual";}
		:row{
			:radio_button{label="Разбить кривую на несколько участков";key="is_range";}
			:edit_box{key="place_range";}
			}
		}
	:column{label="Поворот";
		:row{
			:radio_column{label="Поворот блока";
				:radio_button{label="По касательной к кривой";key="blk_is_rotate_deriv";}
				:radio_button{label="На определенный угол";key="blk_is_rotate_angle";}
				:row{
					:edit_box{label="Укажите угол";key="blk_rotate_angle";}
					:button{label="...";key="btn_get_blk_angle";}
					}
				}
			:radio_column{label="Поворот атрибута";
				:radio_button{label="По касательной к кривой";key="attr_is_rotate_deriv";}
				:radio_button{label="На определенный угол";key="attr_is_rotate_angle";}
				:row{
					:edit_box{label="Укажите угол";key="attr_rotate_angle";}
					:button{label="...";key="btn_get_attr_angle";}
					}
				}
			}
		}
	ok_cancel;
	}
Проблема в том, что в ближайшие сутки сесть не получается
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 26.06.2009, 16:42
#47
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,925
<phrase 1=


Кулик Алексей aka kpblc, а вот ещеб подсказал как сие запустить??
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 26.06.2009, 16:57
#48
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450


vlide -> новый файл -> вставить содержимое -> Tools -> Interface tools -> Preview DCL In Editor
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 26.06.2009, 17:08
#49
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,925
<phrase 1=


Кулик Алексей aka kpblc, может что-то не то делаю, но у меня пункт "Preview DCL In Editor" неактивный???
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 26.06.2009, 17:15
#50
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


zenon, Сделай окно с открытым файлом dcl активным. По моему его надо сохранить как dcl. Вот наткнулся на еще один автонумератор. Может быть кое-что в плане dcl позаимствовать
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 26.06.2009, 17:15
#51
skif58

Наше дело труба
 
Регистрация: 19.11.2006
Томск_Комсомольск-на-Амуре
Сообщений: 1,736
<phrase 1= Отправить сообщение для skif58 с помощью Yahoo Отправить сообщение для skif58 с помощью Skype™


Цитата:
Сообщение от zenon
пункт "Preview DCL In Editor" неактивный???
И у меня.
__________________
*...И Случай, бог изобретатель. *
skif58 вне форума  
 
Непрочитано 26.06.2009, 17:24
#52
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


zenon, skif58, Проверил. После копирования из буфера сохраните файл как, например, test.dcl
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 26.06.2009, 18:31
#53
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,925
<phrase 1=


Кулик Алексей aka kpblc, самое оно
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 26.06.2009, 19:04
#54
Рyslan


 
Регистрация: 25.07.2007
Сообщений: 2,518


пикеты это все фигня, а слабо весь подвал автоматом заполнить? а то я запарилс уже профиля строить. уйма выкидных линий от 23 скважин...а еще 70 скважин ожидается.....а еще переходы под дорогами.....
Рyslan на форуме  
 
Непрочитано 29.06.2009, 11:51
#55
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,925
<phrase 1=


Рyslan, а что спецсофта нету??
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 29.06.2009, 19:41
#56
Рyslan


 
Регистрация: 25.07.2007
Сообщений: 2,518


может и есть. только не в курсе. а какой спецсофт может строить профиля? подскажи
Рyslan на форуме  
 
Непрочитано 30.06.2009, 17:58
#57
Olga_@@@


 
Регистрация: 14.03.2008
Екатеринбург
Сообщений: 678
<phrase 1= Отправить сообщение для Olga_@@@ с помощью Skype™


Рyslan, если есть поверхность, то Civil или Land
Olga_@@@ вне форума  
 
Автор темы   Непрочитано 03.07.2009, 14:59
#58
Jeriko


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


Кулик Алексей aka kpblc, так это окончательная версия программы? а то у меня получается вызвать диалоговое окно, но там ни имя блока не задать и никаких операций выполнить не получается.
Jeriko вне форума  
 
Непрочитано 03.07.2009, 15:00
#59
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450


Нет, не окончательная. У меня тут на работе серьезная запарка, сесть за код не получается. Даже диалог до конца еще не прописал
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 10.07.2009, 15:00
#60
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,925
<phrase 1=


Кулик Алексей aka kpblc, как дела с кодом?
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 10.07.2009, 15:10
#61
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450


Да хреново Некогда
Обработчик диалога переписываю уже в 4 раз
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 23.07.2009, 11:26
#62
Bart


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


Я тут воспользовался xblocknum (в самом первом сообщении есть ссылка), немного поправил под себя, но я не знаю как реализовать один момент, чтобы программа меняла номера не одного атрибута, а и второго тоже, который в этом же блоке и с тем же значением. Даже название этого атрибута может быть тем же.
У меня есть клемма, на клемме две циферки (номер клеммы) сверху и снизу, вот их то мне и нужно менять.
И как еще выбирать tag нужного атрибута кликом на него, а не задавая в программе? Или такое не выйдет?

Последний раз редактировалось Bart, 23.07.2009 в 14:43.
Bart вне форума  
 
Непрочитано 01.12.2011, 21:49
1 | #63
La Persona

Чайник
 
Регистрация: 01.12.2011
Сообщений: 27


Кулик Алексей aka kpblc, Здравствуйте!
Приходится поднимать старую тему, но рассчитываю на вашу (а может еще кого из знающих людей) помощь.
Лисп изучаю без году неделю, но пытаюсь вникнуть..

В одном из предыдущих сообщений есть код лиспа:

Код:
[Выделить все]
 (vl-load-com) 
(defun c:b2p ( / name_of_bl dis pln dis_pl dis_run i krd prm_pnt
proiz ugol_pl ugol_pl_gr my_blok my_att spis_att
att_old att_new spis_att strt stp)
(setq snp (getvar "Osmode"))
(setvar "Osmode" 0) 
(setq name_of_bl (getstring "Name of blok? "))
(setq dis (getreal "Distance? "))
(setq strt (getint "\nStart number? "))
(setq stp (getint "\nStep? ")) 
(setq pref (getstring "\nPrefiks? "))
(setq suff (getstring "\nSuffiks? "))
(setq pln (car (entsel)))
(setq dis_pl (vlax-curve-getDistAtParam pln (vlax-curve-getEndParam pln)))
(setq dis_run (- 0.0 dis) i (- strt stp))
(while(< (+ dis_run dis) dis_pl)
(progn
(setq i (+ i stp))
(setq dis_run (+ dis_run dis))
(setq krd (vlax-curve-getPointAtDist pln dis_run))
(setq prm_pnt (vlax-curve-getParamAtPoint pln krd))
(setq proiz (vlax-curve-getFirstDeriv pln prm_pnt))
(setq ugol_pl (angle '(0 0 0) proiz))
(setq ugol_pl_gr (* ugol_pl 57.29747))
(setvar "attreq" 0)
(command "_.insert" name_of_bl krd 1.0 1.0 ugol_pl_gr)
(setq my_blok (entlast))
(setq my_att (entnext my_blok))
(setq spis_att (entget my_att)) ;spisok 
(setq att_old (assoc 1 spis_att)) ;name
(setq num_new (itoa i))
(setq num_new (strcat pref num_new suff))) 
(setq att_new (cons 1 num_new)) ;
(setq spis_att (subst att_new att_old spis_att)); zamena
(entmod spis_att)
(entupd (cdr (assoc -1 spis_att)))
) ;progn
)
(setvar "Osmode" snp)
)
Но вот этот кусок кода я никак понять не могу:
Код:
[Выделить все]
 
(setq my_blok (entlast))
(setq my_att (entnext my_blok))
(setq spis_att (entget my_att)) ;spisok 
(setq att_old (assoc 1 spis_att)) ;name
(setq num_new (itoa i))
(setq num_new (strcat pref num_new suff))) 
(setq att_new (cons 1 num_new)) ;
(setq spis_att (subst att_new att_old spis_att)); zamena
(entmod spis_att)
(entupd (cdr (assoc -1 spis_att)))
Можно как-то разжевать этот фрагмент?
La Persona вне форума  
 
Непрочитано 02.12.2011, 19:26
#64
Victor


 
Регистрация: 14.06.2009
Бат-Ям
Сообщений: 295


(setq my_blok (entlast)) получаем имя блока
(setq my_att (entnext my_blok)) получаем имя атрибута
(setq spis_att (entget my_att)) ;spisok список
(setq att_old (assoc 1 spis_att)) ;name содержимое атрибута
(setq num_new (itoa i)) номер в строку
(setq num_new (strcat pref num_new suff))) добавляем суффикс и префикс
(setq att_new (cons 1 num_new)) ;создаём пару
(setq spis_att (subst att_new att_old spis_att)); zamena замена старой ппары на новую
(entmod spis_att) обновляем
(entupd (cdr (assoc -1 spis_att))) и апдейтим
сколько лет , сколько зим
Victor вне форума  
 
Непрочитано 02.12.2011, 19:53
#65
La Persona

Чайник
 
Регистрация: 01.12.2011
Сообщений: 27


Благодарю, теперь все встало на свои места )
La Persona вне форума  
 
Непрочитано 27.12.2011, 09:44
#66
serg2452


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


to Victor: программа P2B - то, что надо, только есть 2 краеугольных препятствия к ее использованию:1-как сделать так, что бы выбирать нумерацию, с хвоста или головы полилинии? (у полилинии есть вершины и по умолчанию нумрация в программе, идет от 1ой. Если многокилометровая линия нарисована геодезистами не в том направлении, то мне, как проектировщику, не остается никаких шансов, на ее пикетаж, с помощью B2P. )
Помогите пожалуйста!
Допишите код...
и второе - не такое существенное, как сделать так, что бы текст пикетажа("ПК") был относилельно чертежа либо горизонтально, либо вертикально. Т.е. палочка пикетажа - так и осталась перпендикулярно полилинии, а текст, ориентированный в чертеже занимал положение, либо горизонт, либо вертикаль.
Если не сложно, помогите хотя бы с первым!
Заранее спасибо...
serg2452 вне форума  
 
Непрочитано 27.12.2011, 12:28
#67
Хмурый


 
Регистрация: 29.10.2004
СПб
Сообщений: 16,373


serg2452, команду _reverse к полилинии не судьба применить?
Хмурый вне форума  
 
Непрочитано 27.12.2011, 14:04
#68
serg2452


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


Спасибо добрый человек, нубоват Я малость
serg2452 вне форума  
 
Непрочитано 27.12.2011, 16:29
#69
Victor


 
Регистрация: 14.06.2009
Бат-Ям
Сообщений: 295


http://forum.dwg.ru/showthread.php?p=857562#post857562

Последний раз редактировалось Victor, 03.01.2012 в 22:04.
Victor вне форума  
 
Непрочитано 21.05.2012, 22:50
#70
Alex II


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Ну тогда, как вариант:
Код:
[Выделить все]
(vl-load-com)

(defun test (/                    *error*              blk_name             blk_def              blk_ref
             dist                 prefix               suffix               curve                curve_len
             space                att                  _kpblc-conv-vla-to-list                   _kpblc-conv-ent-to-vla
             _kpblc-conv-ent-to-ename                  fun_conv-list-to-string
             fun_get-attr-by-blockref
             )

  (defun *error* (msg)
    (vla-endundomark adoc)
    (princ msg)
    (princ)
    ) ;_ end of defun

  (defun fun_get-attr-by-blockref (ent)
    (apply (function append)
           (mapcar (function _kpblc-conv-vla-to-list)
                   (list (vla-getattributes ent) (vla-getconstantattributes ent))
                   ) ;_ end of mapcar
           ) ;_ end of apply
    ) ;_ end of defun

  (defun fun_conv-list-to-string (lst sep)
    (cond
      ((listp lst)
       (strcat (vl-princ-to-string (car lst))
               (apply (function strcat)
                      (mapcar
                        (function
                          (lambda (x)
                            (strcat sep (vl-princ-to-string x))
                            ) ;_ end of lambda
                          ) ;_ end of function
                        (cdr lst)
                        ) ;_ end of mapcar
                      ) ;_ end of apply
               ) ;_ end of strcat
       )
      (t
       (vl-princ-to-string lst)
       )
      ) ;_ end of cond
    ) ;_ end of defun

  (defun _kpblc-conv-vla-to-list (value / res)
                                 ;|
*    Преобразовывает vlax-variant или vlax-safearray в список.
|;
    (cond
      ((listp value)
       (mapcar '_kpblc-conv-vla-to-list value)
       )
      ((= (type value) 'variant)
       (_kpblc-conv-vla-to-list (vlax-variant-value value))
       )
      ((= (type value) 'safearray)
       (if (>= (vlax-safearray-get-u-bound value 1) 0)
         (_kpblc-conv-vla-to-list (vlax-safearray->list value))
         ) ;_ end of if
       )
      ((and (member (type value) (list 'ename 'str 'vla-object))
            (setq value (_kpblc-conv-ent-to-vla value))
            (and (= (type value) 'vla-object)
                 (vlax-property-available-p value 'count)
                 ) ;_ end of and
            ) ;_ end of and
       (vlax-for sub (_kpblc-conv-ent-to-vla value)
         (setq res (cons sub res))
         ) ;_ end of vlax-for
       )
      (t value)
      ) ;_ end of cond
    ) ;_ end of defun

  (defun _kpblc-conv-ent-to-vla (ent_value / res)
                                ;|
*    Функция преобразования полученного значения в vla-указатель.
*    Параметры вызова:
*	ent_value	значение, которое надо преобразовать в указатель. Может
*			быть именем примитива, vla-указателем или просто
*			списком.
*			Если не принадлежит ни одному из указанных типов,
*			возвращается nil
*    Примеры вызова:
(_kpblc-conv-ent-to-vla (entlast))
(_kpblc-conv-ent-to-vla (vlax-ename->vla-object (entlast)))
|;
    (cond
      ((= (type ent_value) 'vla-object) ent_value)
      ((= (type ent_value) 'ename) (vlax-ename->vla-object ent_value))
      ((setq res (_kpblc-conv-ent-to-ename ent_value))
       (vlax-ename->vla-object res)
       )
      ) ;_ end of cond
    ) ;_ end of defun

  (defun _kpblc-conv-ent-to-ename (ent_value /)
                                  ;|
*    Функция преобразования полученного значения в ename
*    Параметры вызова:
*	ent_value	значение, которое надо преобразовать в примитив. Может
*			быть именем примитива, vla-указателем или просто
*			списком.
*			Если не принадлежит ни одному из указанных типов,
*			возвращается nil
*    Примеры вызова:
(_kpblc-conv-ent-to-ename (entlast))
(_kpblc-conv-ent-to-ename (vlax-ename->vla-object (entlast)))
|;
    (cond
      ((= (type ent_value) 'vla-object)
       (vlax-vla-object->ename ent_value)
       )
      ((= (type ent_value) 'ename) ent_value)
      ((= (type ent_value) 'str) (handent ent_value))
      ((= (type ent_value) 'list) (cdr (assoc -1 ent_value)))
      (t nil)
      ) ;_ end of cond
    ) ;_ end of defun

  (vla-startundomark (setq adoc (vla-get-activedocument (vlax-get-acad-object))))
  (if
    (and (= (type
              (setq blk_name (vl-catch-all-apply
                               (function (lambda (/ res)
                                           (cond
                                             ((and (setq res (getstring "\nИмя блока <Указать> : "))
                                                   (/= res "")
                                                   ) ;_ end of and
                                              res
                                              )
                                             (t (cdr (assoc 2 (entget (car (entsel))))))
                                             ) ;_ end of cond
                                           ) ;_ end of lambda
                                         ) ;_ end of function
                               ) ;_ end of vl-catch-all-apply
                    ) ;_ end of setq
              ) ;_ end of type
            'str
            ) ;_ end of =
         (= (type
              (setq blk_def
                     (vl-catch-all-apply
                       (function
                         (lambda () (vla-item (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) blk_name))
                         ) ;_ end of function
                       ) ;_ end of vl-catch-all-apply
                    ) ;_ end of setq
              ) ;_ end of type
            'vla-object
            ) ;_ end of =
         (= (type (setq dist (vl-catch-all-apply (function (lambda () (getdist "\nРасстояние <Отмена> : "))))))
            'real
            ) ;_ end of =
         (= (type (setq prefix (vl-catch-all-apply (function (lambda () (getstring "\nПрефикс <\"\"> : "))))))
            'str
            ) ;_ end of =
         (= (type (setq suffix (vl-catch-all-apply (function (lambda () (getstring "\nСуффикс <\"\"> : "))))))
            'str
            ) ;_ end of =
         (= (type
              (setq start (vl-catch-all-apply (function (lambda () (getint "\nСтартовый номер <Отмена> : ")))))
              ) ;_ end of type
            'int
            ) ;_ end of =
         (= (type (setq curve (vl-catch-all-apply
                                (function (lambda ()
                                            (princ "\nКривая для обработки : ")
                                            (vlax-ename->vla-object (ssname (ssget "_:E:S" '((0 . "*LINE"))) 0))
                                            ) ;_ end of lambda
                                          ) ;_ end of function
                                ) ;_ end of vl-catch-all-apply
                        ) ;_ end of setq
                  ) ;_ end of type
            'vla-object
            ) ;_ end of =
         (=
           (type
             (setq
               att (vl-catch-all-apply
                     (function
                       (lambda (/ lst)
                         (vlax-for item blk_def
                           (if (wcmatch (strcase (vla-get-objectname item)) "*ATT*")
                             (setq lst (cons item lst))
                             ) ;_ end of if
                           ) ;_ end of vlax-for
                         (cond
                           ((= (length lst) 0)
                            (alert "В выбранном блоке нет атрибутов!")
                            (vla-endundomark adoc)
                            (princ)
                            (exit)
                            )
                           ((= (length lst) 1)
                            (vla-get-tagstring (car lst))
                            )
                           (t
                            (setq lst (mapcar (function vla-get-tagstring) (reverse lst)))
                            (initget (fun_conv-list-to-string lst " "))
                            (getkword
                              (strcat "\nАтрибут для автоназначения [" (fun_conv-list-to-string lst "/") "] <Отмена> : ")
                              ) ;_ end of getkword
                            )
                           ) ;_ end of cond
                         ) ;_ end of lambda
                       ) ;_ end of function
                     ) ;_ end of vl-catch-all-apply
               ) ;_ end of setq
             ) ;_ end of type
           'str
           ) ;_ end of =
         (/= att "")
         ) ;_ end of and
     (progn
       (setq curve_len (vlax-curve-getdistatpoint curve (vlax-curve-getendpoint curve))
             space     (vla-objectidtoobject adoc (vla-get-ownerid curve))
             cur_dist  0.
             ) ;_ end of setq
       (while (<= cur_dist curve_len)
         (setq blk_ref (vla-insertblock
                         space
                         (vlax-3d-point
                           (vlax-curve-getpointatdist curve cur_dist)
                           ) ;_ end of vlax-3d-point
                         blk_name
                         1.
                         1.
                         1.
                         (angle '(0. 0. 0.)
                                (vlax-curve-getfirstderiv
                                  curve
                                  (vlax-curve-getparamatdist curve cur_dist)
                                  ) ;_ end of vlax-curve-getFirstDeriv
                                ) ;_ end of angle
                         ) ;_ end of vla-InsertBlock
               ) ;_ end of setq
         ((lambda (/ att_ref)
            (setq att_ref (car (vl-remove-if-not
                                 (function
                                   (lambda (x)
                                     (wcmatch (strcase (vla-get-tagstring x)) (strcase att))
                                     ) ;_ end of lambda
                                   ) ;_ end of function
                                 (fun_get-attr-by-blockref blk_ref)
                                 ) ;_ end of vl-remove-if-not
                               ) ;_ end of car
                  ) ;_ end of setq
            (vla-put-textstring att_ref (strcat prefix (vl-princ-to-string start) suffix))
            (vla-put-rotation att_ref 0.)
            ) ;_ end of lambda
          )
         (setq start    (1+ start)
               cur_dist (+ cur_dist dist)
               ) ;_ end of setq
         ) ;_ end of while
       ) ;_ end of progn
     ) ;_ end of if
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
Уважаемый Алексей!
У меня работает только Ваш лисп (лиспы Виктора почему-то выдают ошибку). Не могли бы Вы подправить свой вышеприведенный лисп, чтобы текст был не горизонтально, а выравнивался бы по линии.

Премного благодарен
Alex II вне форума  
 
Непрочитано 01.05.2013, 12:20
#71
Магадан


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


Цитата:
Сообщение от Victor Посмотреть сообщение
Раз вам так хочется плюс ещё 2 вопроса. На первый если не хотим жмём ENTER. Если хотим жмём S или P .Тогда спросит чего изволите. Тестируйте
Код:
[Выделить все]
(vl-load-com)
(defun c:b2p ( / name_of_bl dis pln dis_pl dis_run i krd prm_pnt
proiz ugol_pl ugol_pl_gr my_blok my_att spis_att
att_old att_new spis_att strt stp)
(setq snp (getvar "Osmode"))
(setvar "Osmode" 0) 
(setq name_of_bl (getstring "Name of blok? "))
(setq dis (getreal "Distance? "))
(setq strt (getint "\nStart number? "))
(setq stp (getint "\nStep? ")) 
(setq flag (getstring "\nS/P? "))
(if(/= "" flag)(setq suf_prf (getstring "\nSuffiks/Prefiks? ")))
(setq pln (car (entsel)))
(setq dis_pl (vlax-curve-getDistAtParam pln (vlax-curve-getEndParam pln)))
(setq dis_run (- 0.0 dis) i (- strt stp))
(while(< (+ dis_run dis) dis_pl)
(progn
(setq i (+ i stp))
(setq dis_run (+ dis_run dis))
(setq krd (vlax-curve-getPointAtDist pln dis_run))
(setq prm_pnt (vlax-curve-getParamAtPoint pln krd))
(setq proiz (vlax-curve-getFirstDeriv pln prm_pnt))
(setq ugol_pl (angle '(0 0 0) proiz))
(setq ugol_pl_gr (* ugol_pl 57.29747))
(setvar "attreq" 0)
(command "_.insert" name_of_bl krd 1.0 1.0 ugol_pl_gr)
(setq my_blok (entlast))
(setq my_att (entnext my_blok))
(setq spis_att (entget my_att)) ;spisok 
(setq att_old (assoc 1 spis_att)) ;name
(setq num_new (itoa i))
(if(or (= flag "s")(= flag "S"))(setq num_new (strcat num_new suf_prf))) 
(if(or (= flag "p")(= flag "P"))(setq num_new (strcat suf_prf num_new))) 
(setq att_new (cons 1 num_new)) ;
(setq spis_att (subst att_new att_old spis_att)); zamena
(entmod spis_att)
(entupd (cdr (assoc -1 spis_att)))
) ;progn
)
(setvar "Osmode" snp)
)
Прошу прощения Уважаемые коллеги, подскажите пожалуйста потемку не как не могу разобрать вообще как это работает..может я что не так делаю...
Прошу яблоками не кидать в меня сразу..
и как работают команды я не программист...только учусь..
Заранее благодарен..
Магадан вне форума  
 
Непрочитано 01.05.2013, 12:28
#72
sertor

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


Цитата:
Уважаемые коллеги, подскажите пожалуйста потемку не как не могу разобрать вообще как это работает
Как использовать лисп, опубликованный на форуме
__________________
Как-то так.

Последний раз редактировалось sertor, 01.05.2013 в 12:39.
sertor вне форума  
 
Непрочитано 01.05.2013, 13:04
#73
Магадан


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


Спасибо коллега..
прога заработала..
ток после выбора объекта говорит
ошибка: неверное значение аргумента: AcDbCurve 2129677848
что это значит?
Магадан вне форума  
 
Непрочитано 04.06.2015, 14:01
#74
GazRust


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


Доброго всем времени суток Озаботился и я данной проблемой - простановкой пикетов на трассе. Юзаю стандартный кадовский разметчик с блокам для простановки и ставлю отметки через заданный интервал на полилинии. Но по работе часто бывают ситуации когда трассу прокладки приходится менять, переносить и т.д. в результате приходится переставлять занаво эти отметки, что сильно утомляет.
В каде можно сделать динамический блок, в виде линии и отметки с писаниной, которая появляется через заданный интервал, но таким блоком можно сделать только прямолинейный отрезок. В связи с этим вопрос: а нельзя ли запилить такую полилинию, которая сама, динамически проставляла бы заранее заданные отметки с атрибутами через определенный интервал? И чтоб в случае перемещения трассы эти отметки так же динамически смещались?
GazRust вне форума  
 
Непрочитано 04.06.2015, 14:51
#75
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450


В чистом ACAD замучаешься такое делать. Переходи на Civil / Map3D
Цитата:
Сообщение от GazRust Посмотреть сообщение
стандартный кадовский разметчик с блокам для простановки и ставлю отметки через заданный интервал на полилинии
это _.measure, что ли?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 04.06.2015, 15:21
#76
sertor

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


GazRust, попробуйте, может устроит этот вариант. Трасса должна быть в виде 3d полилинии (без динамики).
Вложения
Тип файла: zip DR-PK-ROAD_1_2.zip (7.7 Кб, 312 просмотров)
__________________
Как-то так.
sertor вне форума  
 
Непрочитано 04.06.2015, 15:45
#77
GazRust


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


Цитата:
Сообщение от sertor Посмотреть сообщение
GazRust, попробуйте, может устроит этот вариант. Трасса должна быть в виде 3d полилинии (без динамики).
Это.. Это.. ОХРЕНИТЕЛЬНО!!!!!! РАБОТАЕТ!! То что нужно!! Проставил все пикеты! Тогда уж понаглею: а как задать высоту текста (он берется из какого-то стиля?) И размер пикетных плашек?
GazRust вне форума  
 
Непрочитано 04.06.2015, 15:55
#78
sertor

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


Цитата:
Сообщение от GazRust Посмотреть сообщение
а как задать высоту текста (он берется из какого-то стиля?) И размер пикетных плашек?
Зависит от масштаба, который нужно указать при запросе.
__________________
Как-то так.
sertor вне форума  
 
Непрочитано 22.07.2015, 15:32
#79
Skind4


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



Ребята а можно ли как нибудь эту программу подредактировать так что бы привязку палочки пикета можно было другую делать ( в смысле что бы у нее привязка была не посередине а с краю), и аналогично текст что бы привязывался к краю? хотя я понимаю что это можно вручную сделать)
Skind4 вне форума  
 
Непрочитано 23.07.2015, 13:18
#80
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Цитата:
Сообщение от Skind4 Посмотреть сообщение
Ребята а можно ли как нибудь эту программу подредактировать
Какую именно? В теме беглым взглядом обнаружил с десяток лиспов.
skkkk вне форума  
 
Непрочитано 27.07.2015, 14:11
#81
Skind4


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


Цитата:
Сообщение от skkkk Посмотреть сообщение
Какую именно? В теме беглым взглядом обнаружил с десяток лиспов.
DR-PK-ROAD_1_2.zip которая пикеты расставляет.
Skind4 вне форума  
 
Непрочитано 27.07.2015, 21:04
#82
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Skind4, раз уж ссылку указать лень или невдомек, хоть бы номер поста (в правом верхнем углу каждого сообщения он указан) или уж хотя бы номер страницы (при условии, что на странице один такой лисп)
skkkk вне форума  
 
Непрочитано 25.02.2025, 10:18
#83
Рyslan


 
Регистрация: 25.07.2007
Сообщений: 2,518


Всем привет. Не подскажете lisp для расстановки пикетов?
Рyslan на форуме  
 
Непрочитано 25.02.2025, 10:37
#84
elovkov

ПОС наше всё
 
Регистрация: 06.08.2009
Симферополь
Сообщений: 287


Рyslan, а в сообщении 81 чем не устраивает?
__________________
Умное лицо это еще не признак ума. Все глупости на земле делаются именно с этим выражением лица
elovkov вне форума  
 
Непрочитано 25.02.2025, 10:45
#85
Рyslan


 
Регистрация: 25.07.2007
Сообщений: 2,518


Что-то не понял как запустить ее
Рyslan на форуме  
 
Непрочитано 25.02.2025, 12:27
#86
AlexCondor

инженер
 
Регистрация: 03.08.2007
Сообщений: 1,418


Цитата:
Сообщение от Рyslan Посмотреть сообщение
Что-то не понял как запустить ее
Там вроде явно пишет: "Запуск: _DRPK"
AlexCondor вне форума  
 
Непрочитано 25.02.2025, 12:59
#87
Рyslan


 
Регистрация: 25.07.2007
Сообщений: 2,518


спасибо!
Рyslan на форуме  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Расстановка номеров пикетов по трассе трубопровода.