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

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

Расстановка блоков вдоль линии, полилинии, сплайна

Ответ
Поиск в этой теме
Непрочитано 26.06.2010, 11:27 2 | #1
Расстановка блоков вдоль линии, полилинии, сплайна
Victor
 
Бат-Ям
Регистрация: 14.06.2009
Сообщений: 295

Программа не коммерческая, поэтому нет проверок на введёные значения, на ошибки. Кому нужно добавляйте. Прога расставляет блоки с начала линии (не с конца). Надавно это обнаружил и долго не мог сообразить, в чём же дело, но реверс линии лень было добавлять.
Нумерует атрибут. Суффикс, префикс.
Редактируйте эти строки под свой стандарты
Масштаб (setq sc '("0.05" "0.10" "0.25" "0.50" "1.00" "2.50" "5.00"))
Имя блока (setq bl '("BL1" "BL2" "BL3" "BL4" "BL5"))
dcl файл сохранить как b2l.dcl
Код:
[Выделить все]
b2l  : dialog { label = "Block to polyline" ;				     		   
:spacer{height=1;}
: row {label = "";
   : column {label = "Scale";			      			
      : popup_list {			        
        value = "4"; key=b1;width=15;}				
        }		 
:spacer{width=1;}
   : column {			
      label = "Block";			
      : popup_list {				
        value = "0"; key=b2;width=15;}				
        }		
} 
:spacer{height=1;}
: row {label = "Dimensions";
: column {label = "";
:spacer{width=7;}
}
: edit_box  {label="Distance";edit_width=7;key="ds_s";}
: column {label = "";
:spacer{width=7;}
}
}

:toggle{label="Use atribute";key="att";value="1";}
:toggle{label="Alignment";key="aln";value="1";}

:spacer{height=1;}
: row {label = "";
   : column {label = "Numbers";
   : edit_box  {label="Start";edit_width=5;key="st_s";}
   : edit_box  {label="Step" ;edit_width=5;key="sp_s";}
}
:spacer{width=1;}
   : column {label = "Letters";
   : edit_box  {label="Prefix";edit_width=5;key="pf_s";}
   : edit_box  {label="Suffix";edit_width=5;key="sf_s";}
}
}      
:spacer{height=1;}
ok_cancel;
}
лисп файл
Код:
[Выделить все]
(vl-load-com)
(defun c:b2l ( / 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)
(command "_.undo" "_begin") 
(setq sc '("0.05" "0.10" "0.25" "0.50" "1.00" "2.50" "5.00"))
(setq bl '("BL1" "BL2" "BL3" "BL4" "BL5"))
(if(<(setq dcl_id(load_dialog"b2l"))0)(exit))
(if(not(new_dialog"b2l" dcl_id))(exit))
  (start_list "b1")				
  (mapcar 'add_list sc)				
  (end_list)
  (start_list "b2")				
  (mapcar 'add_list bl)				
  (end_list)
(action_tile"accept"						
     "(setq scl (atof (get_tile \"b1\")))	
      (setq blk (atof (get_tile \"b2\")))
      (setq dis (atof (get_tile \"ds_s\")))
      (setq strt (atoi(get_tile \"st_s\")))
      (setq stp  (atoi(get_tile \"sp_s\")))
      (setq atr  (atoi(get_tile \"att\")))
      (setq alg  (atoi(get_tile \"aln\")))
      (setq pref (get_tile \"pf_s\"))
      (setq suff (get_tile \"sf_s\"))
      (done_dialog)(setq userclick T))")		
(action_tile"cancel" "(done_dialog)(exit)")
(start_dialog)
(unload_dialog dcl_id)
(setq sc_s (nth (fix scl) sc))
(setq name_of_bl (nth (fix blk) bl))
(setq snp (getvar "Osmode"))
(setvar "Osmode" 0) 
(setq scl sc_s)
(if(not (tblsearch "layer"  name_of_bl))
(entmake(list '(0 . "LAYER" )'(100 . "AcDbSymbolTableRecord")
              '(100 . "AcDbLayerTableRecord")'(70 . 0)(cons 2 name_of_bl)'(62 . 7))))
(setvar "Clayer" name_of_bl)
(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))
 (if(= alg 1)
    (progn
    (setq proiz (vlax-curve-getFirstDeriv pln prm_pnt))
    (setq ugol_pl (angle '(0 0 0) proiz))
    (setq ugol_pl_gr (* ugol_pl 57.29747))
    ) ;progn
    (setq ugol_pl_gr 0.0)
 ) ;if
 (setvar "attreq" 0)
 (command "_.insert" name_of_bl krd scl scl ugol_pl_gr)
 (if(= atr 1)
    (progn
    (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
  ) ;if
 ) ;progn
)
(setvar "Osmode" snp)
(command "_.undo" "_end") 
)

Последний раз редактировалось Victor, 26.06.2010 в 14:11.
Просмотров: 62022
 
Непрочитано 26.06.2010, 12:16
#2
Stierlitz

В строительном проектировании с 05.10.2004
 
Регистрация: 01.05.2008
Новосибирск
Сообщений: 5,219


в автокаде есть команды:
divide
measure
с их помощью расставляются блоки вдоль линий, полилиний и сплайнов.
===
а эта программа как-то по особенному расставляет?
Stierlitz вне форума  
 
Автор темы   Непрочитано 26.06.2010, 12:34
#3
Victor


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


Да нет, расставляет также.
Victor вне форума  
 
Непрочитано 28.06.2010, 18:36
#4
Valery Brelovsky

Инженер дорожник
 
Регистрация: 22.10.2007
Израиль
Сообщений: 1,859


Так в чём тогда прикол.
Valery Brelovsky вне форума  
 
Непрочитано 28.06.2010, 18:42
#5
Stierlitz

В строительном проектировании с 05.10.2004
 
Регистрация: 01.05.2008
Новосибирск
Сообщений: 5,219


вот и я не понял
Stierlitz вне форума  
 
Непрочитано 28.06.2010, 20:42
#6
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от Valery Brelovsky Посмотреть сообщение
Так в чём тогда прикол.
ИМХО - как минимум в тренировке.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 26.02.2011, 10:30
#7
Shaft

отдел открытых горных работ
 
Регистрация: 06.05.2009
Новокузнецк
Сообщений: 124


Единственный минус этих комманд:
Цитата:
Сообщение от guliaevskij Посмотреть сообщение
в автокаде есть команды:
divide
measure
что они непозволяют вставлять блоки вдоль плиний, сплайнов и etc, использую вершины этих самых объектов.
Предлагаю сделать такую программу. Всем желающим потренироваться и нетолько... т.к. сам я с лиспом недружу - увы.

Последний раз редактировалось Shaft, 26.02.2011 в 10:51.
Shaft вне форума  
 
Непрочитано 31.03.2011, 00:39
#8
ronik710

Инженер-проектировщик искусственных сооружений
 
Регистрация: 24.12.2010
Сейчас Московская область
Сообщений: 65


Есть еще такая команда "me" в английской версии AutoCAD. Эта команда расстовляет блоки по полилинии(Линии точно нет, сплайны не пробовал, но помоему тоже нет) через определенное расстояние(шаг цоколей барьерного ограждения через 2 м по радиусу). Если кому интересно пишие в лику, сделаю пример поподробне(может даже видео при желании).
ronik710 вне форума  
 
Непрочитано 31.03.2011, 01:42
#9
Лиспер


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


Команды me не существует. Есть команда _.measure.
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Непрочитано 31.03.2011, 13:20
#10
Shaft

отдел открытых горных работ
 
Регистрация: 06.05.2009
Новокузнецк
Сообщений: 124


Цитата:
Сообщение от ronik710 Посмотреть сообщение
Есть еще такая команда "me" в английской версии AutoCAD. Эта команда расстовляет блоки по полилинии(Линии точно нет, сплайны не пробовал, но помоему тоже нет) через определенное расстояние.
А если надо чтобы блоки вставлялись в только в вершинах полилинии, а не через заданное расстояние? Кто-нибудь знает как такое можно реализовать...
Shaft вне форума  
 
Автор темы   Непрочитано 01.04.2011, 00:15
1 | #11
Victor


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


Попробуй. Распакуй. Затащи в пространство модели. Если ставишь галочку в "By vertex" то дистанция игнорируется.
Вложения
Тип файла: zip b2l.zip (2.9 Кб, 1118 просмотров)
Victor вне форума  
 
Непрочитано 01.04.2011, 06:28
#12
Shaft

отдел открытых горных работ
 
Регистрация: 06.05.2009
Новокузнецк
Сообщений: 124


Цитата:
Сообщение от Victor Посмотреть сообщение
Попробуй. Распакуй. Затащи в пространство модели. Если ставишь галочку в "By vertex" то дистанция игнорируется.
Большое спасибо!!! сейчас буду пробовать!

upd: Это то что нужно... НО...хотелось бы добавить немного конструктивной критики

Я так понял, что вместо bl1...bl5 нужно вставить имя того блока, который я хочу разместить вдоль линии. (Либо переименовать блоки в чертеже, что гораздо проще) Но оба этих способа несовсем удобны.

Отсюда такой вопрос: Можно ли докрутить к программе возможность выбора из спсиска тех блоков, которые находяться в файле чертежа? Вместо bl1...bl5.

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

Поэтому предлагаю довести шаг выбора нужного блока, до ума. И на мой взгляд самым весомым и важным отличием данной программы от автокадовских аналогов является пункт - by Vertex. Который для мне просто жизненно необходим ! Т.к. до этого подобную процедуру я выполнял вручную. А к хорошему как известно ОЧЕНЬ БЫСТРО ПРИВЫКАЕШЬ !!! И попробовав один раз, больше нехочеться это делать вручную!!!
Автору ОГРОМНЕЙШЕЕ СПАСИБО!!!


Последний раз редактировалось Shaft, 01.04.2011 в 07:28.
Shaft вне форума  
 
Непрочитано 01.04.2011, 12:47
#13
ronik710

Инженер-проектировщик искусственных сооружений
 
Регистрация: 24.12.2010
Сейчас Московская область
Сообщений: 65


Цитата:
Сообщение от Лиспер Посмотреть сообщение
Команды me не существует. Есть команда _.measure.
Совершенно верно. Я ввожу сокращение данной команды.
ronik710 вне форума  
 
Непрочитано 08.04.2011, 20:22
#14
Stierlitz

В строительном проектировании с 05.10.2004
 
Регистрация: 01.05.2008
Новосибирск
Сообщений: 5,219


Цитата:
Сообщение от ronik710 Посмотреть сообщение
Совершенно верно. Я ввожу сокращение данной команды.
это видимо чтобы всем было понятно
Stierlitz вне форума  
 
Непрочитано 14.04.2011, 09:34
#15
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 575


Если кому-то интересно, вот еще мой вариант расстановки блоков (и вообще любых выбранных объектов вдоль кривой) с возможность задания параметров вставки тынц
__________________
cadtools
TararykovDG вне форума  
 
Непрочитано 25.04.2011, 11:46
#16
angel-fear

инженер-электрик
 
Регистрация: 21.10.2010
Краснодар
Сообщений: 134


В AutoCAD 2012 ввели отдельную команду для расстановки объектов по траектории
angel-fear вне форума  
 
Непрочитано 03.05.2011, 13:33
#17
makcez

изыскатель
 
Регистрация: 03.05.2011
Москва
Сообщений: 19


Цитата:
Сообщение от angel-fear Посмотреть сообщение
В AutoCAD 2012 ввели отдельную команду для расстановки объектов по траектории
какую?
makcez вне форума  
 
Автор темы   Непрочитано 03.05.2011, 23:19
#18
Victor


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


Проблема в том что исходники в Израиле а я сейчас в Анголе.
Victor вне форума  
 
Автор темы   Непрочитано 08.05.2011, 11:31
#19
Victor


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


Нашёл похожий. Переделал, кажется. Хотя по-моему мнению это неправильно. Как правило нужных блоков в файле нет.
Вложения
Тип файла: lsp b2l.lsp (4.1 Кб, 793 просмотров)
Тип файла: rar b2l.rar (2.9 Кб, 415 просмотров)
Тип файла: rar b2l-dcl.rar (470 байт, 426 просмотров)
Victor вне форума  
 
Автор темы   Непрочитано 03.01.2012, 22:03
#20
Victor


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


Переделал. Кликайте сначала и с конца. В файле primer разные варианты работы программы, в зависимости от положения галочек - атрибут, блок.
Вложения
Тип файла: zip b2l.zip (2.9 Кб, 1235 просмотров)
Тип файла: dwg
DWG 2000
primer.dwg (45.8 Кб, 8844 просмотров)
Victor вне форума  
 
Непрочитано 11.04.2012, 02:31
#21
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,072


Цитата:
Сообщение от Victor Посмотреть сообщение
Переделал. Кликайте сначала и с конца. В файле primer разные варианты работы программы, в зависимости от положения галочек - атрибут, блок.
Загрузил b2l.VLX в 2008, в 2012, вызвал "b2l" - реакция отсутствует полностью.
Загрузил b2l.lsp из предыдущего сообщения - реакции тоже никакой. Что-то не так делаю?

В целом - программа под какие Автокады?

Последний раз редактировалось АлексЮстасу, 11.04.2012 в 23:08.
АлексЮстасу вне форума  
 
Непрочитано 23.08.2012, 12:41
#22
Джаз


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


Хотел создать новую тему, но в поиске нашёл подходящее общение здесь
На топосъёмках расставляем опоры ЛЭП с указанием связи/направления проводов на предыдущую/следующую опоры. Блок выглядит так O--->. Базовая точка в центре круга. Хочу выбирая точки (съёмочные пикеты) по порядку расставлять на них по 2 блока. Один будет направлен на предыдущую опору, другой на следующую. Т.е. вот так <---O--->. И пройдя по порядку по всем точкам отрисовать ЛЭП в условных знаках.
P.S. Сейчас копированием расставляем блоки по точкам. Потом эти блоки вручную вращаем ориентируя направление на предыдущую/следующую опоры. Не айс.
Джаз вне форума  
 
Автор темы   Непрочитано 23.08.2012, 13:53
1 | #23
Victor


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


Без проверок на наличие блока, полилинии, виндовса, прокладки между монитором и стулом. 15 минут у меня было.
Вложения
Тип файла: lsp l2p.lsp (1.1 Кб, 579 просмотров)
__________________
... а Автокад то - голый
Victor вне форума  
 
Непрочитано 23.08.2012, 15:33
#24
Джаз


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


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


А надо так.


Сам боюсь ваш код трогать. Скажите, пожалуйста, что подправить?
Миниатюры
Нажмите на изображение для увеличения
Название: Netak.jpg
Просмотров: 3027
Размер:	22.2 Кб
ID:	85926  Нажмите на изображение для увеличения
Название: Tak.jpg
Просмотров: 2997
Размер:	17.4 Кб
ID:	85927  
Джаз вне форума  
 
Непрочитано 23.08.2012, 15:43
#25
zenon

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


Джаз, Что мешает создать 2 зеркальных блока? Религия?
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 23.08.2012, 15:52
#26
Джаз


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


Потом 2 раза воспользоваться Лиспом, выбрать неправильно ориентированные пары блоков и удалить.
В принципе вариант.
Но я всё же подожду помощи Виктора.


Добавлено.
Разобрался. Понял как пишутся процедуры в Лиспе.
Код:
[Выделить все]
 (vl-load-com) 
(defun in_bl (name_of_bl pln krd j dir / ugol_pl ugol_pl_gr )
(setq prm_pnt (+ j (* dir 0.1)))
(setq proiz (vlax-curve-getFirstDeriv pln prm_pnt))
(setq ugol_pl (angle '(0 0 0) proiz))
(setq ugol_pl_gr (* ugol_pl 57.29747))
(command "_.insert" name_of_bl krd 1.0 1.0 ugol_pl_gr)
)
(vl-load-com) 
(defun in_bla (name_of_bl pln krd j dir / ugol_pl ugol_pl_gr )
(setq prm_pnt (+ j (* dir 0.1)))
(setq proiz (vlax-curve-getFirstDeriv pln prm_pnt))
(setq ugol_pl (angle '(0 0 0) proiz))
(setq ugol_pl_gr (+ (* ugol_pl 57.29747) 180))
(command "_.insert" name_of_bl krd 1.0 1.0 ugol_pl_gr)
)

(defun c:l2p ( / snp cmdh name_of_bl pln krd num j )
(command "_.undo" "_begin")
(setq snp (getvar "Osmode"))
(setq cmdh (getvar "CMDECHO"))
(setvar "Osmode" 0) 
(setvar "CMDECHO" 0)
(setq name_of_bl (getstring "\nName of blok?  "))
(setq pln (car (entsel)))
(setq krd (vlax-curve-getPointAtParam pln 0))
(in_bl name_of_bl pln krd 0.0 1.0)
(setq num (fix(-(vlax-curve-getEndParam pln) 1)))
(setq j 0)
(repeat num
   (setq j (1+ j))
   (setq krd (vlax-curve-getPointAtParam pln j))
   (in_bla name_of_bl pln krd j -1.0)
   (in_bl name_of_bl pln krd j 1.0)
)
(setq krd (vlax-curve-getPointAtParam pln (+ 1 num)))
(in_bla name_of_bl pln krd (+ 1 num) -1.0)
(setvar "Osmode"  snp) 
(setvar "CMDECHO" cmdh)
(command "_.undo" "_end")
)
    
Виктор, ещё раз спасибо.
Миниатюры
Нажмите на изображение для увеличения
Название: 2netak.jpg
Просмотров: 3099
Размер:	15.0 Кб
ID:	85931  

Последний раз редактировалось Джаз, 23.08.2012 в 17:31.
Джаз вне форума  
 
Непрочитано 06.12.2012, 11:13
#27
Иван Павлов


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


Может я что-то не так делаю, но прога не запускается:
Команда: B2L
; ошибка: завершить / выйти прервать

Лисп взял с 1 сообщения, Autocad 2012 rus, Win 7? 64bit.
Иван Павлов вне форума  
 
Непрочитано 15.12.2013, 23:39
#28
potrox


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


Подскажите пожалуйста, что нужно дописать чтоб при выборе можно было выбрать несколько полилиний?
potrox вне форума  
 
Непрочитано 21.12.2013, 16:18
#29
Джаз


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


Цитата:
Сообщение от potrox Посмотреть сообщение
Подскажите пожалуйста, что нужно дописать чтоб при выборе можно было выбрать несколько полилиний?
Здесь добрый человек выложил нужное вам, правда скомпилированное в .fas
http://geodesist.ru/forum/threads/%D...5/#post-330971
Джаз вне форума  
 
Непрочитано 21.12.2013, 18:23
#30
potrox


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


спасибо)
potrox вне форума  
 
Непрочитано 17.12.2014, 11:42
#31
Rassol11


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


Всем здравствуйте!
Нужно то же, что нужно было Джаз
Цитата:
Сообщение от Джаз Посмотреть сообщение
На топосъёмках расставляем опоры ЛЭП с указанием связи/направления проводов на предыдущую/следующую опоры. Блок выглядит так O--->. Базовая точка в центре круга. Хочу выбирая точки (съёмочные пикеты) по порядку расставлять на них по 2 блока. Один будет направлен на предыдущую опору, другой на следующую. Т.е. вот так <---O--->. И пройдя по порядку по всем точкам отрисовать ЛЭП в условных знаках.
P.S. Сейчас копированием расставляем блоки по точкам. Потом эти блоки вручную вращаем ориентируя направление на предыдущую/следующую опоры. Не айс.
, воспользовался его лиспом. Он расставляет блоки по вершинам полилинии, но стрелки от условного знака ЛЭП не смотрят каждая на предыдущую и на послледующую.
Может быть, у меня что-то с блоком моим не то? Прикладываю свой блок.
Подскажите, пожалуйста.
Вложения
Тип файла: dwg
DWG 2007
???_2009.dwg (167.0 Кб, 2215 просмотров)
Rassol11 вне форума  
 
Непрочитано 17.12.2014, 12:02
1 | #32
Джаз


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


Попробуйте этот блок.
Столб_ЛЭП
Вложения
Тип файла: dwg
DWG 2007
Столб_ЛЭП.dwg (68.3 Кб, 2291 просмотров)
Джаз вне форума  
 
Непрочитано 17.12.2014, 13:49
#33
Rassol11


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



Cпасибо большое! Вы спасли весь наш офис от долгих мучений!
Rassol11 вне форума  
 
Непрочитано 06.03.2015, 17:00
#34
boretskiy.a

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


Вообще-то проблема не в блоке, а в формате представления угловых данных, должны быть только не грады или радианы, а градусы или градусы минуты секунды.
boretskiy.a вне форума  
 
Непрочитано 01.10.2015, 12:29
#35
Air81


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


Лисп в шапке почему то не работает в русской версии Autocad 2015 (WIN 7, 64). Вот что выдает на команду b2l
"
Команда: B2L
_.undo Текущие настройки: Авто = Вкл, Управление = Все, Объединить = Есть, Слой = Есть
Количество отменяемых операций или [Авто/Управление/Начало/Конец/Метка/Обратно] <1>: _begin
Команда: ; ошибка: завершить / выйти прервать
"
Что не так делаю?

Последний раз редактировалось Air81, 01.10.2015 в 12:52.
Air81 вне форума  
 
Непрочитано 02.10.2015, 00:00
#36
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


видимо лисп не находит диалог и завершается выходом с обработкой ошибки... как вариант можно скомпилировать его или положить на видимое место диалог
gomer вне форума  
 
Непрочитано 03.11.2015, 15:11
#37
anyasl


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


Цитата:
Сообщение от Shaft Посмотреть сообщение
А если надо чтобы блоки вставлялись в только в вершинах полилинии, а не через заданное расстояние? Кто-нибудь знает как такое можно реализовать...
Здравствуйте.
У меня ровно такая же потребность - расставить блоки вдоль полилинии строго по ее вершинам. Пыталась я читать про лиспы, но пользоваться не умею и в сознании прочтенное не отложилось.
Помогите, объясните плиз?
anyasl вне форума  
 
Непрочитано 30.12.2015, 19:18
#38
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,072


Цитата:
Сообщение от Леонид Ильич Посмотреть сообщение
а если нужно расставить не по вершинам, а с определённой дистанцией?
Для этого есть штатная _MEASURE.
Цитата:
Сообщение от anyasl Посмотреть сообщение
Пыталась я читать про лиспы, но пользоваться не умею
Как использовать лисп.
__________________
количество моих сообщений не говорит о знании Автокада
АлексЮстасу вне форума  
 
Непрочитано 16.02.2016, 12:46
#39
boretskiy.a

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


Цитата:
anyasl расставить блоки вдоль полилинии строго по ее вершинам. Пыталась я читать про лиспы, но пользоваться не умею и в сознании прочтенное не отложилось.
Помогите, объясните плиз?
Код:
[Выделить все]
 (vl-load-com)
(defun in_bl (name_of_bl pln krd j dir / ugol_pl ugol_pl_gr )
(setq prm_pnt (+ j (* dir 0.1)))
(setq proiz (vlax-curve-getFirstDeriv pln prm_pnt))
(setq ugol_pl (angle '(0 0 0) proiz))
(setq ugol_pl_gr (* ugol_pl 57.29747))
(command "_.insert" name_of_bl krd 1.0 1.0 ugol_pl_gr)
)
(vl-load-com)
(defun in_bla (name_of_bl pln krd j dir / ugol_pl ugol_pl_gr )
(setq prm_pnt (+ j (* dir 0.1)))
(setq proiz (vlax-curve-getFirstDeriv pln prm_pnt))
(setq ugol_pl (angle '(0 0 0) proiz))
(setq ugol_pl_gr (+ (* ugol_pl 57.29747) 180))
(command "_.insert" name_of_bl krd 1.0 1.0 ugol_pl_gr)
)
 
(defun c:l1p ( / snp cmdh name_of_bl pln krd num j )
(command "_.undo" "_begin")
(setq snp (getvar "Osmode"))
(setq cmdh (getvar "CMDECHO"))
(setvar "Osmode" 0)
(setvar "CMDECHO" 0)
(setq name_of_bl "bl1.dwg")
(setq pln (car (entsel)))
(setq krd (vlax-curve-getPointAtParam pln 0))
(in_bl name_of_bl pln krd 0.0 1.0)
(setq num (fix(-(vlax-curve-getEndParam pln) 1)))
(setq j 0)
(repeat num
   (setq j (1+ j))
   (setq krd (vlax-curve-getPointAtParam pln j))
   (in_bla name_of_bl pln krd j -1.0)
   (in_bl name_of_bl pln krd j 1.0)
)
(setq krd (vlax-curve-getPointAtParam pln (+ 1 num)))
(in_bla name_of_bl pln krd (+ 1 num) -1.0)
(setvar "Osmode"  snp)
(setvar "CMDECHO" cmdh)
(command "_.undo" "_end")
)
Макрос на кнопку
^C^C^P(if (tblsearch "layer" "НАДЗЕМКА")(command "_layer" "_set" "НАДЗЕМКА" "")(command "_layer" "_make" "НАДЗЕМКА" "") );^Pl1p;
Проводиш полилинию и жмем кнопочку, все расставлено.
LSP код и вложенный файл блока должны бить в папке доступа.
Удачи!

bl1.dwg
boretskiy.a вне форума  
 
Непрочитано 28.10.2019, 01:09
#40
ivankashuba


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


Цитата:
Сообщение от Victor Посмотреть сообщение
Без проверок на наличие блока, полилинии, виндовса, прокладки между монитором и стулом. 15 минут у меня было.
добрый день. не разбираюсь в кодах. не могли бы вы подкорректировать данный лисп, только чтобы расставленные блоки не дублировались, а вставлялись по 1 шт на вершину? очень надо!!!
заранее, спасибо !!
ivankashuba вне форума  
 
Автор темы   Непрочитано 29.10.2019, 13:34
#41
Victor


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


нашёл какой-то
Вложения
Тип файла: zip b2l.zip (2.9 Кб, 196 просмотров)
__________________
... а Автокад то - голый
Victor вне форума  
 
Непрочитано 08.01.2020, 17:09 Разместить блоки вдоль линии, полилинии через определенное не одинаковое расстояние
#42
otsva


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


Может есть lisp или команда расстановки блоков вдоль линии, полилинии с возможность задания длины для каждого блока.
Нужно разместить блоки вдоль линии, полилинии через определенное не одинаковое расстояние.
Спасибо!
otsva вне форума  
 
Непрочитано 28.04.2023, 10:52
#43
kegorovsc


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


Цитата:
Сообщение от Victor Посмотреть сообщение
Без проверок на наличие блока, полилинии, виндовса, прокладки между монитором и стулом. 15 минут у меня было.
Отличная команда, но у меня почему то вставляет два блока в точку - один поверх другого. Проверил может точки рядом были в полилинии, но нет - все нормально
kegorovsc вне форума  
 
Непрочитано 02.05.2023, 13:42
#44
VVA

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


Цитата:
Сообщение от kegorovsc Посмотреть сообщение
тличная команда, но у меня почему то вставляет два блока в точку - один поверх другого.
привязка грабли №1
Найди строку
Цитата:
(command "_.insert" name_of_bl krd scl scl ugol_pl_gr)
Замени
Цитата:
(command "_.insert" name_of_bl "_non" krd scl scl ugol_pl_gr)
Без проверки но должно работать
Что такое "_non"
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 24.04.2024, 10:32
#45
n0str0m0

геолог
 
Регистрация: 02.09.2009
Тында, Дальний Восток
Сообщений: 413
<phrase 1=


Приветствую. Скажите, получается, что b2l.lsp расставляет только блоки с атрибутами?
А если блок без атрибутов, то он ставит этот блок только в начальную точку полилинии и на этом заканчивает работу.
1Можно ли сделать так, чтобы любые блоки вставлялись в узлы полилинии?
2 Можно ли сделать так, чтобы блоки на ломаной/криволинейной полилинии расставлялись без наклона, перпендикулярному сегменту полилинии?
n0str0m0 вне форума  
 
Непрочитано 26.04.2024, 05:35 Расстановка блоков по вершинам полилинии: непонятные моменты
#46
n0str0m0

геолог
 
Регистрация: 02.09.2009
Тында, Дальний Восток
Сообщений: 413
<phrase 1=


Установил себе и вот что получается, см. во вложенном файле:
В первом случае лисп расставляет блок только в первую вершину полилини, в остальные никак (у меня единственное объяснение: у блока нет атрибутов)
Во втором случае блоки расставляет по одному, для каждой последующей вставки необходим клик ЛКМ в любом месте. Причем атрибуты во всех вершинах расположены горизонтально.
В третьем случае блок автоматом расставляется по всем вершинам полилинии, но уже с разворотом
Подскажите, в чем принципиальная разница между этими тремя блоками, что лисп b2l по разному их обрабатывает?
Особенно интересна разница между вторым и третьим случаем.
Вложения
Тип файла: dwg
DWG 2013
111.dwg (281.5 Кб, 18 просмотров)

Последний раз редактировалось n0str0m0, 27.04.2024 в 01:12.
n0str0m0 вне форума  
 
Непрочитано 26.04.2024, 21:30
#47
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,072


Цитата:
Сообщение от n0str0m0 Посмотреть сообщение
Возникла необходимость расставить блоки в вершинах полилинии не вручную, а автоматически.
Попробуйте перенести все на положительные координаты - может быть в этом дело?
Еще можно удалить прокси - они есть. Есть следы СПДС.
-----
Про координаты и пр. предположения, скорее мистические.
Например, в этом файле Purge-Очистить не предлагает вычистить блоки, хотя их описаний в файле много. Т.е. описания блоков в файле как бы есть, но их как бы и нет.
__________________
количество моих сообщений не говорит о знании Автокада

Последний раз редактировалось АлексЮстасу, 26.04.2024 в 21:47. Причина: не уверен в совете
АлексЮстасу вне форума  
 
Непрочитано 27.04.2024, 08:47
#48
n0str0m0

геолог
 
Регистрация: 02.09.2009
Тында, Дальний Восток
Сообщений: 413
<phrase 1=


Насчет описаний блоков в файле: не знаю даже, где это искать.
В другом файле, где координаты положительные, всё то же самое.
К тому же совершенно не пойму, почему блоки 2 и 3 ведут себя совершенно по разному при прочих равных
n0str0m0 вне форума  
 
Непрочитано 14.03.2025, 22:32
#49
berstrider

инженер-проектировщик автомобильных дорог
 
Регистрация: 30.08.2017
Йошкар-Ола
Сообщений: 78


Не с первого раза, но смог запустить Лисп из топикстартера.
Такой вопрос: А как можно обработать предварительно выбранную группу полилиний или отрезков?

Задача такая, приходит файл контуров, надо по определённым группам полилиний расставить соответствующие блоки бортовых камней.
berstrider вне форума  
 
Непрочитано 18.03.2025, 07:53
#50
name02


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


Можешь вот это попробовать:
Код:
[Выделить все]
 (vl-load-com)
(defun c:b2l (/		sc	  bl	    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
	     )
  (command "_.undo" "_begin")
  (setq sc '("0.05" "0.10" "0.25" "0.50" "1.00" "2.50" "5.00"))
  (setq bl '("BL1" "BL2" "BL3" "BL4" "BL5"))
  (if (< (setq dcl_id (load_dialog "b2l")) 0)
    (exit)
  ) ;_ end of if
  (if (not (new_dialog "b2l" dcl_id))
    (exit)
  ) ;_ end of if
  (start_list "b1")
  (mapcar 'add_list sc)
  (end_list)
  (start_list "b2")
  (mapcar 'add_list bl)
  (end_list)
  (action_tile
    "accept"
    "(setq scl (atof (get_tile \"b1\")))	
      (setq blk (atof (get_tile \"b2\")))
      (setq dis (atof (get_tile \"ds_s\")))
      (setq strt (atoi(get_tile \"st_s\")))
      (setq stp  (atoi(get_tile \"sp_s\")))
      (setq atr  (atoi(get_tile \"att\")))
      (setq alg  (atoi(get_tile \"aln\")))
      (setq pref (get_tile \"pf_s\"))
      (setq suff (get_tile \"sf_s\"))
      (done_dialog)(setq userclick T))"
  ) ;_ end of action_tile
  (action_tile "cancel" "(done_dialog)(exit)")
  (start_dialog)
  (unload_dialog dcl_id)
  (setq sc_s (nth (fix scl) sc))
  (setq name_of_bl (nth (fix blk) bl))
  (setq snp (getvar "Osmode"))
  (setvar "Osmode" 0)
  (setq scl sc_s)
  (if (not (tblsearch "layer" name_of_bl))
    (entmake (list '(0 . "LAYER")
		   '(100 . "AcDbSymbolTableRecord")
		   '(100 . "AcDbLayerTableRecord")
		   '(70 . 0)
		   (cons 2 name_of_bl)
		   '(62 . 7)
	     ) ;_ end of list
    ) ;_ end of entmake
  ) ;_ end of if
  (setvar "Clayer" name_of_bl)

  ;; Предварительно выбранный набор объектов
  (setq ss (cadr (ssgetfirst)))

  (cond
    ;; Если предварительного набора нет
    ((null ss)
     (princ "\Выберите отрезки или полилинии: ")
     (setq ss (ssget '((0 . "*LINE"))))
     (setq lst (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))
    )
    ;; Если есть предварительно выбранные объекты
    (T
     (setq lst (vl-remove-if-not
		 '(lambda (x)
		    (wcmatch (cdr (assoc 0 (entget x))) "*LINE")
		  ) ;_ end lambda
		 (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
	       ) ;_ end vl-remove-if
     ) ;_ end setq
    )
  ) ;_ end cond

  ;;Проходим список объектов и размещаем блоки
  (foreach pln lst
    ;;;(setq pln (car (entsel)))
    (setq dis_pl (vlax-curve-getDistAtParam pln (vlax-curve-getEndParam pln)))
    (setq dis_run (- 0.0 dis)
	  i	  (- strt stp)
    ) ;_ end of setq
    (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))
	(if (= alg 1)
	  (progn
	    (setq proiz (vlax-curve-getFirstDeriv pln prm_pnt))
	    (setq ugol_pl (angle '(0 0 0) proiz))
	    (setq ugol_pl_gr (* ugol_pl 57.29747))
	  ) ;_ end of progn
	  (setq ugol_pl_gr 0.0)
	) ;_ end of if
	(setvar "attreq" 0)
	(command "_.insert" name_of_bl "_non" krd scl scl ugol_pl_gr) ;_ end of command
	(if (= atr 1)
	  (progn
	    (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)))
	  ) ;_ end of progn
	) ;_ end of if
      ) ;_ end of progn
    ) ;_ end of while

  ) ;_ end of foreach
  (setvar "Osmode" snp)
  (command "_.undo" "_end")
) ;_ end of defun
name02 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Готовые программы > Расстановка блоков вдоль линии, полилинии, сплайна



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Текст вдоль полилинии или сплайна (по кривой) Denioska AutoCAD 48 10.09.2022 21:55
Создание нового типа линий Apelsinov AutoCAD 915 08.07.2022 12:36
Выдавливание вдоль линии (VBA) Markiza-2010 Программирование 4 29.03.2010 02:36
Как при помощи лиспа нарисовать цепочку окружностей вдоль воображаемой линии Serge_BN LISP 8 18.03.2010 20:32
Как пустить текст вдоль изогнутой линии? Shaft AutoCAD 47 01.06.2009 16:13