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.
Просмотров: 4593
 
Непрочитано 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,411


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,411


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,411


Для начала вспомнить, что свойства 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,411


Ок, еще раз перечитай что я написал и сделай два вхождения блока: для одного 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,411


Вот екылымыны... Как можно программно установить свойства, если их нет? Повторяю:
Цитата:
Сообщение от Кулик Алексей 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,411


Во-первых: 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,411


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

----- добавлено через 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,411


А теперь, внимание, задачка на внимательность! Скрин снят с 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$ вне форума  
 
Автор темы   Непрочитано 19.03.2015, 17:26
#21
sdv79

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


Do$, изначально вопрос был почему не работает код, и как его поправить, о чем изложил в шапке, а дальше пошла вода.
Алексей, на прямую толщину конечно же изменить нельзя, т.к это свойство полилилинии, которая находится в блоке.
Есть блок, со своими потрохами, есть код. С круглым блоком код работает, с прямоугольным нет.
Помогите мне с кодом, или блоком. Необходимо воздействовать только на полилинию в блоке, и ВСЕ! КАК?
sdv79 вне форума  
 
Непрочитано 19.03.2015, 17:41
#22
Кулик Алексей aka kpblc
Moderator

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


В ACAD2015 ничего не "перекашивает"
Вложения
Тип файла: lsp change-block-definition.lsp (2.3 Кб, 9 просмотров)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 19.03.2015, 18:21
#23
gomer

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


Цитата:
Сообщение от sdv79 Посмотреть сообщение
Помогите мне с кодом
для начала скопируйте свой код из блокнота, а не из vlide
gomer вне форума  
 
Непрочитано 19.03.2015, 18:59
#24
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от gomer Посмотреть сообщение
для начала скопируйте свой код из блокнота, а не из vlide
Или как минимум переключившись на русскую раскладку клавиатуры перед копированием.
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 20.03.2015, 09:27
#25
sdv79

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


Код получился сложный для восприятия. НЕ РАБОТАЕТ.

Последний раз редактировалось sdv79, 20.03.2015 в 09:44.
sdv79 вне форума  
 
Непрочитано 20.03.2015, 10:26
#26
Do$

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


Цитата:
Сообщение от sdv79 Посмотреть сообщение
НЕ РАБОТАЕТ.
Работает как миленький. http://autode.sk/1I3x52L

P.S. http://bash.im/quote/268537 (осторожно, мат)
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
 
Автор темы   Непрочитано 20.03.2015, 10:53
#27
sdv79

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


Код представленный Алексеем НЕ РАБОТАЕТ в связке с блоком из 1 поста. Он его перекашивает. Эффект тот же, что код в шапке.
Do$ попробуйте сами.
Александр, учту, не знал.
sdv79 вне форума  
 
Непрочитано 20.03.2015, 12:32
#28
Do$

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


Цитата:
Сообщение от sdv79 Посмотреть сообщение
Код представленный Алексеем НЕ РАБОТАЕТ в связке с блоком из 1 поста. Он его перекашивает.
Еще раз повторяю - код работает отлично: http://autode.sk/1Fclbp6
Если что-то не устраивает, то не надо КАПСОМ кричать. Попробуйте лучше БОЛЬШИМ КОЛИЧЕСТВОМ СЛОВ ПОДРОБНО ОПИСАТЬ ПРОБЛЕМУ! А то полпоста пытаемся понять что нужно, еще полпоста препираемся о работоспособности кода...
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
 
Автор темы   Непрочитано 20.03.2015, 12:47
#29
sdv79

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


Do$ а теперь попробуйте изменить длину или ширину за ручки. Не похож на прямоугольник))
Миниатюры
Нажмите на изображение для увеличения
Название: Буфер обмена01.jpg
Просмотров: 17
Размер:	82.6 Кб
ID:	146114  
sdv79 вне форума  
 
Непрочитано 20.03.2015, 16:32
#30
Do$

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


Ну наконец-то, к 30 сообщению выяснили в чем проблема...
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (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