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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Lisp. Cтранное поведение блока после vla-put-Thickness

Lisp. Cтранное поведение блока после vla-put-Thickness

Ответ
Поиск в этой теме
Непрочитано 19.03.2015, 14:37 #1
Lisp. Cтранное поведение блока после vla-put-Thickness
sdv79
 
Инженер ЭОМ
 
Москва
Регистрация: 05.03.2009
Сообщений: 215

После применения кода, изменение vla-put-Thickness на пример на 10.0 блок ЖЕСТОКО перекашивает. Причину выяснить не могу. После возвращения vla-put-Thickness на пример на 0.0 все становиться на свои места. Если изменить данный параметр руками через редактор блока, все хорошо. Но это не наш метод. В чем дело?
Код:
[Выделить все]
 
     (setq VLA-OBJECT (vlax-ename->vla-object
		         (entlast)
                        ) ;/ vlax-ename->vla-object
       ) ;/ setq

(setq adoc (vla-get-activedocument
              (vlax-get-acad-object)
             ) ;/ vla-get-activedocument
  ) ;/ setq
  (setq block_def (vla-item ; vla-óêàçàòåëü íà îïèñàíèå áëîêà, âèäà #<VLA-OBJECT IAcadBlock 000000003c8ca0d8>
                    (vla-get-blocks
                     adoc
		    ) ;/ vla-get-blocks
                    (vla-get-Effectivename VLA-OBJECT)
                  ) ;/ vla-item
  ) ;/ setq
  (setq *block_cont ( ; ïîëó÷èòü ñïèñîê âñåõ ïðèìèòèâîâ, âõîäÿùèõ â áëîê
		     (lambda (/ res)
                      (vlax-for sub block_def
                       (setq res (cons sub res))
                      ) ;/ vlax-for
                      (reverse res)
                    ) ;/  lambda
                   )
  ) ;/ setq
  (setq *result_ent (vl-remove-if-not ; îòôèëüòðîâàòü âñå ïðèìèòèâû, èç ñîñòàâà óêàçàííîãî áëîêà, êîòîðûå íå ÿâëÿþòñÿ áëîêîì
                      (function
                       (lambda (x)
			(or 
                         (= (vla-get-objectname x) "AcDbPolyline") ;  çäåñü ñòàâèì ôèëüòð, òîãî ÷òî íàì íàäî "AcDbBlockReference" "AcDb3dSolid"...
			 (= (vla-get-objectname x) "AcDbCircle") ; äëÿ êðóãëîãî
			) ;/ or 
                       ) ;/ lambda
                     ) ;/ function
                    *block_cont
                   ) ;/ vl-remove-if-not
  ) ;/ setq

 (vla-put-Thickness
   (car *result_ent)
   10.0
 ) ;/ vla-put-Thickness

(arxload "battman")
(acet-attsync (vla-get-Effectivename VLA-OBJECT))
(vl-cmdf "_AttSync" "Имя" (vla-get-Effectivename VLA-OBJECT))

Вложения
Тип файла: dwg
DWG 2007
Чертеж2.dwg (326.6 Кб, 1787 просмотров)


Последний раз редактировалось sdv79, 19.03.2015 в 15:20.
Просмотров: 4574
 
Непрочитано 19.03.2015, 14:39
#2
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


А что ожидалось? Зачем вообще блоку это свойство менять?
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
 
Автор темы   Непрочитано 19.03.2015, 14:47
#3
sdv79

Инженер ЭОМ
 
Регистрация: 05.03.2009
Москва
Сообщений: 215
Отправить сообщение для sdv79 с помощью Skype™


Вставляется блок в 3D нужную точку, далее придаем ширину длину и ВЫСОТУ в соответствии с паспортными данными.
sdv79 вне форума  
 
Непрочитано 19.03.2015, 14:55
#4
Кулик Алексей aka kpblc
Moderator

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


sdv79, высоту? блоку?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 19.03.2015, 14:58
#5
sdv79

Инженер ЭОМ
 
Регистрация: 05.03.2009
Москва
Сообщений: 215
Отправить сообщение для sdv79 с помощью Skype™


В в редакторе блока параметр фигурирует как толщина. Для наблюдателя как высота))
Миниатюры
Нажмите на изображение для увеличения
Название: Буфер обмена01.jpg
Просмотров: 33
Размер:	164.7 Кб
ID:	146048  

Последний раз редактировалось sdv79, 19.03.2015 в 15:04.
sdv79 вне форума  
 
Непрочитано 19.03.2015, 15:19
#6
Кулик Алексей aka kpblc
Moderator

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


sdv79, не путай теплое с мягким. Описание блока - это одно. Вхождение блока - совсем другое.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 19.03.2015, 15:34
#7
sdv79

Инженер ЭОМ
 
Регистрация: 05.03.2009
Москва
Сообщений: 215
Отправить сообщение для sdv79 с помощью Skype™


Как мне избавиться от греховного поведения блока?
sdv79 вне форума  
 
Непрочитано 19.03.2015, 15:42
#8
Кулик Алексей aka kpblc
Moderator

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


Для начала вспомнить, что свойства thickness у вхождения блока как бы нет. Попробовать поставить это свойство руками для вхождения блока. Приуныть.
Заодно вспомнить, что динамика и 3D не очень дружат.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 19.03.2015, 15:45
#9
sdv79

Инженер ЭОМ
 
Регистрация: 05.03.2009
Москва
Сообщений: 215
Отправить сообщение для sdv79 с помощью Skype™


Руками может каждый. Как программно это сделать?
sdv79 вне форума  
 
Непрочитано 19.03.2015, 15:54
#10
Кулик Алексей aka kpblc
Moderator

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


Ок, еще раз перечитай что я написал и сделай два вхождения блока: для одного thikness равна 10, для другого - 100. Результат - в студию.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 19.03.2015, 16:12
#11
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


Цитата:
Сообщение от sdv79 Посмотреть сообщение
Руками может каждый. Как программно это сделать?
Руками thikness блоку не задать.
Цитата:
В в редакторе блока параметр фигурирует как толщина.
Так ведь выбрана-то полилиния. Это для нее задается толщина.
Миниатюры
Нажмите на изображение для увеличения
Название: blkThik.png
Просмотров: 21
Размер:	28.5 Кб
ID:	146064  
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
 
Автор темы   Непрочитано 19.03.2015, 16:20
#12
sdv79

Инженер ЭОМ
 
Регистрация: 05.03.2009
Москва
Сообщений: 215
Отправить сообщение для sdv79 с помощью Skype™


Да, для полилинии задается толщина. Этого достаточно, что бы придать 3D вид.
Алексей, вы советуете сложные вещи))
Почему код не работает?
Вложения
Тип файла: dwg
DWG 2007
Чертеж2.dwg (191.7 Кб, 908 просмотров)
sdv79 вне форума  
 
Непрочитано 19.03.2015, 16:22
#13
Кулик Алексей aka kpblc
Moderator

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


Вот екылымыны... Как можно программно установить свойства, если их нет? Повторяю:
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
сделай два вхождения блока: для одного thikness равна 10, для другого - 100. Результат - в студию.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 19.03.2015, 16:24
#14
sdv79

Инженер ЭОМ
 
Регистрация: 05.03.2009
Москва
Сообщений: 215
Отправить сообщение для sdv79 с помощью Skype™


А я говорю МОЖНО! Невозможное возможно если верить в чудеса.
Вот вам пример, маленького чуда.
Код из первого поста
Вложения
Тип файла: dwg
DWG 2007
Чертеж7.dwg (215.4 Кб, 898 просмотров)
sdv79 вне форума  
 
Непрочитано 19.03.2015, 16:40
#15
Кулик Алексей aka kpblc
Moderator

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


Во-первых: http://autolisp.ru/2012/03/16/howto-provide-dwg/
Во-вторых. Я два раза сказал, могу и третий повторить:
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
сделай два вхождения блока: для одного thikness равна 10, для другого - 100. Результат - в студию.
Два!
Вхождения!
С разными thikness.
Уточняю: thikness должны быть установлены независимо на разные вхождения блоков.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 19.03.2015, 16:59
#16
sdv79

Инженер ЭОМ
 
Регистрация: 05.03.2009
Москва
Сообщений: 215
Отправить сообщение для sdv79 с помощью Skype™


Чем не устраивают два блока из 12 поста у одного блока thikness=10 у другого 100

Последний раз редактировалось sdv79, 19.03.2015 в 17:05.
sdv79 вне форума  
 
Непрочитано 19.03.2015, 17:12
#17
Кулик Алексей aka kpblc
Moderator

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


Ага, а тот факт, что блоки разные - не смущает?

----- добавлено через 32 сек. -----
Уточняю: у них имена разные.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 19.03.2015, 17:15
#18
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


Ой... Ну надо же так описывать свои проблемы, что потом на целую страницу идет разбор...
Как я наконец-то понял, толщина задается не блоку, а объекту внутри блока.
Невозможно двум блокам с одинаковым именем (одинаковым определением) задать разную толщину объектов внутри. Об этом и говорит Алексей. А в чертеже из #12 два блока с разными именами (разные определения блока), поэтому там все получилось.
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
 
Непрочитано 19.03.2015, 17:15
#19
Кулик Алексей aka kpblc
Moderator

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


А теперь, внимание, задачка на внимательность! Скрин снят с ACAD2009 (можно посмотреть в любой версии - вплоть до 2015; картина принципиально не меняется). Найти в панели свойств при выделенных блоках свойство Thickness
Миниатюры
Нажмите на изображение для увеличения
Название: Blocks.png
Просмотров: 20
Размер:	51.1 Кб
ID:	146071  
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 19.03.2015, 17:20
#20
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


Да ему нужно объектам внутри блока выставлять ее. В коде из первого поста, вроде как, так и делается - получается коллекция объектов из блока, отсеивается все кроме полилиний и отрезков и им уже задается это свойство.
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Lisp. Cтранное поведение блока после vla-put-Thickness



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как перенести в чертеж блок из файла библиотеки блоков Main Urod Программирование 8 03.02.2010 14:15
Слои после взрывания блока mmax AutoCAD 15 16.06.2006 11:12
Поведение AutoCAD 2005 после установки 2006 Кулик Алексей aka kpblc AutoCAD 12 10.08.2005 08:49