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

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

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

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

Программа не коммерческая, поэтому нет проверок на введёные значения, на ошибки. Кому нужно добавляйте. Прога расставляет блоки с начала линии (не с конца). Надавно это обнаружил и долго не мог сообразить, в чём же дело, но реверс линии лень было добавлять.
Нумерует атрибут. Суффикс, префикс.
Редактируйте эти строки под свой стандарты
Масштаб (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.
Просмотров: 29963
 
Непрочитано 26.06.2010, 12:16
#2
Stierlitz

строительное проектирование
 
Регистрация: 01.05.2008
Новосибирск
Сообщений: 4,129


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


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


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

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


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

строительное проектирование
 
Регистрация: 01.05.2008
Новосибирск
Сообщений: 4,129


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

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


Цитата:
Сообщение от Valery Brelovsky Посмотреть сообщение
Так в чём тогда прикол.
ИМХО - как минимум в тренировке.
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей 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
Сейчас Московская область
Сообщений: 60


Есть еще такая команда "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
Бат-Ям
Сообщений: 293


Попробуй. Распакуй. Затащи в пространство модели. Если ставишь галочку в "By vertex" то дистанция игнорируется.
Вложения
Тип файла: zip b2l.zip (2.9 Кб, 780 просмотров)
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
Сейчас Московская область
Сообщений: 60


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

строительное проектирование
 
Регистрация: 01.05.2008
Новосибирск
Сообщений: 4,129


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

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


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

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


В 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
Бат-Ям
Сообщений: 293


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


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


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


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


Переделал. Кликайте сначала и с конца. В файле primer разные варианты работы программы, в зависимости от положения галочек - атрибут, блок.
Вложения
Тип файла: zip b2l.zip (2.9 Кб, 852 просмотров)
Тип файла: dwg
DWG 2000
primer.dwg (45.8 Кб, 8474 просмотров)
Victor вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Готовые программы > Расстановка блоков вдоль линии, полилинии, сплайна

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание нового типа линий Apelsinov AutoCAD 903 16.07.2019 16:20
Текст вдоль полилинии или сплайна (по кривой) Denioska AutoCAD 45 01.06.2018 13:01
Выдавливание вдоль линии (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