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

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

Помогите! Рисование осевых...

Ответ
Поиск в этой теме
Непрочитано 28.02.2007, 14:45 #1
Помогите! Рисование осевых...
striderghost
 
BSUIR
Регистрация: 28.02.2007
Сообщений: 5

Помогите плиз!
Кароче смысл... На лиспе написать прожку, чтоб выбирать, допустим окружность - и само рисовало осевые линии... Я в силу своей тупости единтсвенное что смог придумать так это (пишу на автокаде руском):

(defun osi ()
(setq ss (ssget))
(setq cir (entget (ssname ss i)))
(setq radius (cdr (assoc 40 cir)))
(command "_.dimcen" (+ radius 4))
(command "_.linetype" "у" "center" "")
(command "_.dimcenter" cir)
(command "_.linetype" "у" "bylayer" "")
)
Все конечно хорошо - но есть ошибки... Приходится в строчке (command "_.dimcenter" cir) вместо cir вводить самому окружности - не принимает он видите ли этот тип записи.
Не могли бы вы помочь и объяснить - по какой причине если выделяешь окружности с помощью ssget то их нельзя использовать так же, как и при entsel... Или я что то недопонимаю...
И еще - можно ли как т улучшить прожку эту? Допустим самому опписать каким то образом свойства линии center, или создать новый тип линии со свойствами осевой по ГОСТ 2,303 (длина штриха 5..30 расстояние между штрихами 3..5 Выступ осевых за объект 3..5мм{поэтому прибавлял 4})
Ив итоге как то забиндидь эту процедуру под какую то кнопку (что то типа ^c^c(osi))
Кароче жду помощи!
Просмотров: 3874
 
Непрочитано 28.02.2007, 15:19
#2
Кулик Алексей aka kpblc
Moderator

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


http://my.opera.com/kpblc/blog/show.dml/299368
И внутри страницы поиск по слову "осев"
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 01.03.2007, 08:56
#3
v_alex


 
Регистрация: 24.10.2005
Новокузнецк
Сообщений: 1,124
<phrase 1=


я динамическим блоком сделал и особо не парюсь... можно изменять диаметр кружка номер, выносить на нужную длину осевую, смещать номер в сторону, поворачивать на любой угол и как бонус можно выбирать маркер оси существующий или нет...
v_alex вне форума  
 
Непрочитано 01.03.2007, 09:13
#4
Кулик Алексей aka kpblc
Moderator

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


Дин.блок только для версий от 2006 и выше. А версия у автора неизвестна.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 01.03.2007, 09:36
#5
Геннадий aka PG

Машиностроение, Проектирование
 
Регистрация: 15.09.2003
Москва
Сообщений: 1,113
<phrase 1=


Цитата:
Сообщение от Кулик Алексей aka kpblc
http://my.opera.com/kpblc/blog/show.dml/299368
И внутри страницы поиск по слову "осев"
А Разве такое слово есть?
__________________
С уважением,
Геннадий aka PG
Геннадий aka PG вне форума  
 
Непрочитано 01.03.2007, 09:48
#6
Кулик Алексей aka kpblc
Moderator

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


Слова нет, а поиск есть
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 01.03.2007, 10:16
#7
Bull

Конструктор по сути (машиностроитель)
 
Регистрация: 10.10.2005
Набережные Челны (это где КамАЗ)
Сообщений: 11,391


крыс, потрясающе! Я и не знал что столько всего есть у тя. Да ещё и буржуев учишь тоже. Жаль времени нет совсем, а то бы всё скачал и настроил у ся. Была бы тут репутация, пунктов на 10 бы поднял...
__________________
Век живи, век учись - ...
Bull вне форума  
 
Непрочитано 01.03.2007, 10:36
#8
Кулик Алексей aka kpblc
Moderator

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


Я еще и на машинке могу, и крестиком (с)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 01.03.2007, 12:18
#9
striderghost


 
Регистрация: 28.02.2007
BSUIR
Сообщений: 5
<phrase 1=


Не судите предвзято... Я в лиспе как обезьяна) :roll: Просто решил в меру своих возможностей как то справиться с этой проблемкой)
А вот в строчке (setq cir (entget (ssname ss i))) ошибся - вместо i у меня был 0 - просто чтобы не париться сюда выкладывал только основу проги (удалил счетчик - а i поменять забыл) Но все же спасибо "Кулик Алексей aka kpblc" за данное решение. Выручил! :P А сам пишел к выводу, что надо учить лисп)))
striderghost вне форума  
 
Непрочитано 01.03.2007, 13:25
#10
Кулик Алексей aka kpblc
Moderator

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


Я когда по ПМ отвечал, я не проверял командные режимы. Поэтому я не был готов к тому, что "_.dimcenter" в лисповом режиме "некорректно" работает. Возможно, что это особенность наподобие "_.-block", но от этого не легче. Говорю сразу - создавал временный набор, подсвечивал его - по фигу. Не работает. Замена (command) на (vl-cmdf) тоже успеха не принесла.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 01.03.2007, 14:07
#11
striderghost


 
Регистрация: 28.02.2007
BSUIR
Сообщений: 5
<phrase 1=


А может попробовать выделять объект (окружность) с помощью entsel а потом каким то образом оттуда выдирать (из свойств объекта) радиус... Тогда должен будет работать command "_.dimcen" Я пробовал по разному - но не получается радиус найти, строчка (cdr(assoc 40 entget(от выбранного объекта))) выдает ошибку...

(defun a ()
(setq ss (entsel "/nViberite krug"))
(command "_.dimcenter" 160)
(command "_.linetype" "_s" "center" "")
(command "_.dimcen" ss)
(command "_.linetype" "_s" "bylayer" "")
)

Кароче надо как то из переменной krug вычислить радиус и заменить 160 на этот радиус +4... Предлагаем решения... :roll:
striderghost вне форума  
 
Автор темы   Непрочитано 02.03.2007, 15:46
#12
striderghost


 
Регистрация: 28.02.2007
BSUIR
Сообщений: 5
<phrase 1=


ТА-ДА!!! :P
Придумал немного измененный вариант решения. Смысл как и раньше не менялся. Просто фигуру изначальную выбирал через точку окружности, которую вычислял из радиуса и координат центра... Вроде попроще чем те, которые выложены на http://my.opera.com/kpblc/blog/show.dml/299368
Код:
(defun new ()
(setq ss (ssget))
(setq cir (entget (ssname ss 0)))
(setq radius (cdr (assoc 40 cir)))
(setq x (car(cdr (assoc 10 cir))))
(setq y (car(cdr(cdr (assoc 10 cir)))))
(setq z (car(cdr(cdr(cdr (assoc 10 cir))))))
(setq to4ka (list (+ x radius) y z))
(command "_.dimcen" (+ radius 4))
(command "_.linetype" "у" "center" "")
(command "_.dimcenter" to4ka)
(command "_.linetype" "у" "bylayer" "")
)
striderghost вне форума  
 
Автор темы   Непрочитано 02.03.2007, 16:24
#13
striderghost


 
Регистрация: 28.02.2007
BSUIR
Сообщений: 5
<phrase 1=


То же самое но только для нескольких объектов...
(defun osi ()
(setq ss (ssget))
(setq i 0
l (sslength ss)
sum 0
)
(while (< i l)
(setq cir (entget (ssname ss i)))
(setq radius (cdr (assoc 40 cir)))
(setq x (car(cdr (assoc 10 cir))))
(setq y (car(cdr(cdr (assoc 10 cir)))))
(setq z (car(cdr(cdr(cdr (assoc 10 cir))))))
(setq to4ka (list (+ x radius) y z))
(command "_.dimcen" (+ radius 4))
(command "_.linetype" "ó" "center" "")
(command "_.dimcenter" to4ka)
(command "_.linetype" "ó" "bylayer" "")
(setq i (+ i 1))
)
)

А может кто подскажет как в самом тексте программы настраивать свойства линии (в данном случае CENTER). Предлагаем решения
striderghost вне форума  
 
Непрочитано 02.03.2007, 20:16
#14
Никита В.

CAD Operator
 
Регистрация: 01.11.2005
Samara-Gorodok
Сообщений: 389


Цитата:
Сообщение от striderghost
А может кто подскажет как в самом тексте программы настраивать свойства линии (в данном случае CENTER). Предлагаем решения
А в чем проблема? через entlast выбираем созданную линию, а через chprop меняем тип линии. Конечно подобный механизм не работает в случае создания нескольких примитивов, но у тебя там вроде как циклов нет. А лучше всего создать слой типа "оси" или "сетка_осей" с нужными свойствами и затем в нале выполнения проги делать его текущим а в конце восстанавливать значение списка слоев.
__________________
АвтоКАД это не только электронный кульман,
Но и великий ГЕМОР
Никита В. вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Помогите! Рисование осевых...