Перейти к содержимому


параметрические объекты СПДС


Сообщений в теме: 301

#281 Mитька

    Активист

  • Пользователи
  • PipPipPipPip
  • 217 сообщений
  • Пол:Мужчина
  • Город:Хабаровск

Отправлено 02 Октябрь 2017 - 03:48

А можно задавать параметрическому объекту количество и нумерацию ручек не конкретным числом, а как-то в общем виде..? плавающим, в зависимости от кол-ва циклов внутри объекта, к примеру..?

#282 doctorraz

    Активист

  • Пользователи
  • PipPipPipPip
  • 651 сообщений
  • Пол:Мужчина
  • Город:Волгоград
  • Интересы:всё понемногу

Отправлено 02 Октябрь 2017 - 08:48

думаю, что нет.
количество и расположение ручек задается один раз и изменить не получится
function SetGripPoint {	//ручки
NGrip=4;
pntGrip0=pntOrigin;
pntGrip1=pntOrigin-vecDirection*DNf/2;
pntGrip2=pntOrigin+vecPlane*DNf/2;
pntGrip3=pntAlfa;
}
но по условию можно изменять реакцию объекта на ручку
например
function OnMoveGripPoint {   //реакция на изменение ручек
if (NMovingGrip==1){
  vecXOld=vecDirection;
  vecDirection=-(pntGrip1-pntGrip0);
  restoreBasis(vecXOld,vecPlane,vecDirection);
} else if (NMovingGrip==2 && (lViewType == VBACK || lViewType == VFRONT)){ //если фронт или сзади, то зеркалируем
						  //относительно vecDirection
  vecPlane=-vecPlane ;	   //зеркалируем относительно vecDirection
} else if (NMovingGrip==2 && (lViewType != VBACK || lViewType != VFRONT)){ //просто крутим весь объект
  vecPlane=(pntGrip2-pntGrip0);
} else if (NMovingGrip==3 & (lViewType == VBACK || lViewType == VFRONT)){
  Alfa=anglePi(vecDirection, (pntGrip3-pntGrip0))+45; //меняем угол отвода
  AlfaChanged();
} else {
  pntOrigin=pntGrip0;
}
}

Прикрепленные файлы



#283 Mитька

    Активист

  • Пользователи
  • PipPipPipPip
  • 217 сообщений
  • Пол:Мужчина
  • Город:Хабаровск

Отправлено 02 Октябрь 2017 - 09:01

Интуитивно тоже догадываюсь, что нет, но душа просит чего-то типа:

function SetGripPoint { //ручки
NGrip=4+N; // где N - уже имеющаяся переменная, привязанная к циклу
pntGrip0=pntOrigin;
pntGrip1=pntOrigin-vecDirection*DNf/2;
pntGrip2=pntOrigin+vecPlane*DNf/2;
pntGrip3=pntAlfa;
pntGrip(3+cicle(уловно-всё-размеется-N))=блаблабла тож чё-то циклическое;
}
Если кол-во ручек в реальном времени подчиняется логическим условиям, то что по идее мешает ему подчиняться количественным значениям переменных? Механика-то примерно та же...Вопрос, могёт ли это программа... Ну, ждём авторитетного ответа.

#284 Mитька

    Активист

  • Пользователи
  • PipPipPipPip
  • 217 сообщений
  • Пол:Мужчина
  • Город:Хабаровск

Отправлено 02 Октябрь 2017 - 09:04

Хотя... при небольшом диапазоне цикла проще прописать условия для всех хотя бы теоретически возможных ручек да и не париться...
Так что вопрос остаётся, но становится чисто академическим.

Ред: Не диапазоне, а кол-ве повторений.

Сообщение отредактировал Mитька: 02 Октябрь 2017 - 09:17


#285 doctorraz

    Активист

  • Пользователи
  • PipPipPipPip
  • 651 сообщений
  • Пол:Мужчина
  • Город:Волгоград
  • Интересы:всё понемногу

Отправлено 02 Октябрь 2017 - 09:18

но одно маленькое НО
SetGripPoint вызывается каждый раз при изменении свойств объекта извне (от другого объекта, через панель свойств или форму объекта)
upd Не вызывается при перемещении и копировании средствами АК (как в нано незнаю)
при воздействии на ручки SetGripPoint то же вызывается, но после OnMoveGripPoint

проверить легко
достаточно в соответствующие секции запихнуть ShowValue ("SetGripPoint ",); и ShowValue ("OnMoveGripPoint ",); и посмотреть в IDM, что за чем и когда отрабатывает.
------------------------------
логично было предположить, что если в SetGripPoint запихнуть условие от чего-то (или цикл), то можно было бы изменять количество и расположение ручек (по условию), но не забывать, в OnMoveGripPoint учитывать, что количество ручек изменилось.
не проверял, но коль метод вызывается каждый раз, должно сработать )))))
чессно говоря не люблю я этих виртуальных коней обсуждать, как подсказывает мой скромный опыт, если у юзера возникает нужда так извращаться, то либо человеческие бизнесспроцессы пытается в код запихнуть, либо использует не то и не по назначению.
и когда конь превращается в реального, выясняется, что все можно было сделать намного проще штатными методами.

Сообщение отредактировал doctorraz: 02 Октябрь 2017 - 09:36


#286 doctorraz

    Активист

  • Пользователи
  • PipPipPipPip
  • 651 сообщений
  • Пол:Мужчина
  • Город:Волгоград
  • Интересы:всё понемногу

Отправлено 02 Октябрь 2017 - 10:03

проверил, меняет положение ручки в зависимости от lViewType
количество ручек то же можно изменять :) :) академически :)
function SetGripPoint {    //ручки
NGrip=4;
ShowValue ("SetGripPoint ",);
if (lViewType != VFRONT){
pntGrip0=pntOrigin-vecDirection*500;
} else {
pntGrip0=pntOrigin;
}
pntGrip1=pntOrigin-vecDirection*DNf/2;
pntGrip2=pntOrigin+vecPlane*DNf/2;
pntGrip3=pntAlfa;
}


#287 MCAD

    Активист

  • Пользователи
  • PipPipPipPip
  • 862 сообщений
  • Пол:Мужчина

Отправлено 04 Октябрь 2017 - 18:15

Вопрос из личной переписки, думаю многим будет тоже полезно:
Как скрыть линии в объекте?

Цитата

Line(node2,node0,TypeLine,HideLine);




#288 doctorraz

    Активист

  • Пользователи
  • PipPipPipPip
  • 651 сообщений
  • Пол:Мужчина
  • Город:Волгоград
  • Интересы:всё понемногу

Отправлено 04 Октябрь 2017 - 22:02

TypeLine принимает значения
1 Сплошная толстая основная линия Сплошная
2 Сплошная тонкая линия Сплошная
3 Волнистая линия ГОСТ 2.303 3
4 Штрихпунктирная тонкая(осевая) линия ГОСТ 2.303 5
5 Штриховая линия ГОСТ 2.303 4
6 Штрихпунктирная утолщенная линия ГОСТ 2.303 6
7 Разомкнутая линия Сплошная
8 Сплошная тонкая с изломами линия ГОСТ 2.303 8
9 Штрихпунктирная с двумя точками тонкая линия ГОСТ 2.303 9
0- по объекту, т.е. тип толщина и цвет по слою или из свойств
-----------------
HideLine-0 (невидима) или 1 (видима)

Сообщение отредактировал doctorraz: 04 Октябрь 2017 - 22:03


#289 Mитька

    Активист

  • Пользователи
  • PipPipPipPip
  • 217 сообщений
  • Пол:Мужчина
  • Город:Хабаровск

Отправлено 21 Ноябрь 2017 - 19:03

Мож, конечно, детсадовский вопрос, но можно ли к конкретному объекту из базы привязать команду-кнопку-менюшку..?
А то приходится искать их в дереве базы долго, да и в на "Предыдущую" они не реагируют... А было б удобно...
Нана6, если что.

#290 dromandon

    Участник

  • Пользователи
  • PipPipPip
  • 70 сообщений
  • Пол:Мужчина
  • Город:Калининград

Отправлено 21 Ноябрь 2017 - 19:07

Просмотр сообщенияMитька (21 Ноябрь 2017 - 19:03) писал:

Мож, конечно, детсадовский вопрос, но можно ли к конкретному объекту из базы привязать команду-кнопку-менюшку..?
А то приходится искать их в дереве базы долго, да и в на "Предыдущую" они не реагируют... А было б удобно...
Нана6, если что.

Поддерживаю. Сам искал способ, вроде нашёл как в АК с помощью простого макроса сделать можно было, но вот способа для нано СПДС 6.0 так и не нашёл

#291 MCAD

    Активист

  • Пользователи
  • PipPipPipPip
  • 862 сообщений
  • Пол:Мужчина

Отправлено 21 Ноябрь 2017 - 19:33

Вариант:


#292 Mитька

    Активист

  • Пользователи
  • PipPipPipPip
  • 217 сообщений
  • Пол:Мужчина
  • Город:Хабаровск

Отправлено 22 Ноябрь 2017 - 04:33

Просмотр сообщенияMCAD (21 Ноябрь 2017 - 19:33) писал:

Вариант:


А можно чуть больше информации, если не трудно..? Я смотрю, и нифига не понимаю, что и зачем вы делаете..? Возможно, дело в том, что пример дан по Нане 8, в НанеСПДС6 (блин, забыл указать, что это СПДС :unsure: ) у таблиц нет переменной "Командная строка" и команду "^C^C_stdselected" командная строка тоже не понимает.

Что я уяснил, так это про наличие идентификатора у каждого из объектов (который присваивается раз и навсегда, так ведь?), за который для наших целей можно зацепиться. Вопрос в том, КАК это сделать..?

Т.е. на выходе хочется следующее: вбить в командной строке свою формулировку ("хочуобъект", а не "^C^C_stdselected ИДЕНТИФИКАТОР", а то это непродуктивно...) и получить вставку завязанного на эту команду объекта.

Примерный способ описан тут: https://www.nanocad....ticles/4644588/

<?xml version="1.0" encoding="utf-8"?>
<package>
<command name="BlueCar" weight="30" cmdtype="1">
<script lang="VBS"><![CDATA[
Dim ms
Dim ut
Dim ptInsert
Set ms = ThisDrawing.ModelSpace
Set ut = ThisDrawing.Utility
ptInsert = ut.GetPoint("0,0,0", "Укажите точку вставки")
ms.InsertBlock ptInsert,"C:\MyBlocks\BlueCar.dwg",1,1,1,0
]]></script>
</command>
<command name="GreenCar" weight="30" cmdtype="1">
<script lang="VBS"><![CDATA[
Dim ms
Dim ut
Dim ptInsert
Set ms = ThisDrawing.ModelSpace
Set ut = ThisDrawing.Utility
ptInsert = ut.GetPoint("0,0,0", "Укажите точку вставки")
ms.InsertBlock ptInsert,"C:\MyBlocks\GreenCar.dwg",1,1,1,0
]]></script>
</command>
</package>

Механика: скрипт на каждую команду --- приложение в автозагрузку. Это было бы технически удобно, т.к. позволило бы быстро и организованно обновлять список таких команд на всех компах.
У этого способа есть большие минусы: необходимость сохранять отдельными двг-файлами каждый объект, обновлять их потом и прочая ненужная возня + непонятно, как будут вести себя объекты при вставке (с блоками-то всё просто, а у объектов есть как минимум OnConnect).
Т.е. было бы классно из такого скрипта обратиться прямо к базе, вытащить объект по идентификатору и вставить. Вопрос в том, как?

Сообщение отредактировал Mитька: 22 Ноябрь 2017 - 04:36


#293 MCAD

    Активист

  • Пользователи
  • PipPipPipPip
  • 862 сообщений
  • Пол:Мужчина

Отправлено 22 Ноябрь 2017 - 07:46

Просмотр сообщенияMитька (22 Ноябрь 2017 - 04:33) писал:

А можно чуть больше информации, если не трудно..?
Поздно было, ограничился мультиком

Просмотр сообщенияMитька (22 Ноябрь 2017 - 04:33) писал:

Нане СПДС6
В шестом нано СПДС нет палитр инструментов. Так сделать не получится

Просмотр сообщенияMитька (22 Ноябрь 2017 - 04:33) писал:

Т.е. было бы классно из такого скрипта обратиться прямо к базе, вытащить объект по идентификатору и вставить. Вопрос в том, как?
группы не помогут частично решить проблему? Я понимаю, что там все наоборот. Объект коннектится к уже вставленному объекту

#294 Mитька

    Активист

  • Пользователи
  • PipPipPipPip
  • 217 сообщений
  • Пол:Мужчина
  • Город:Хабаровск

Отправлено 22 Ноябрь 2017 - 07:54

Просмотр сообщенияMCAD (22 Ноябрь 2017 - 07:46) писал:

группы не помогут частично решить проблему? Я понимаю, что там все наоборот. Объект коннектится к уже вставленному объекту

Да основная хотелка-то как раз в командной строке, чтоб их с клавиатуры вызывать.

Сообщение отредактировал Mитька: 22 Ноябрь 2017 - 07:54


#295 doctorraz

    Активист

  • Пользователи
  • PipPipPipPip
  • 651 сообщений
  • Пол:Мужчина
  • Город:Волгоград
  • Интересы:всё понемногу

Отправлено 22 Ноябрь 2017 - 08:34

1. для ком строки пользуем лисп
(defun C:т100 ()
  (command "spStdSelected" "4E2FDA62C44D46D6")
  (princ); труба по ГОСТ 8734-75
)  
ID можно посмотреть в мастере объектов или в ком строке после вызова объекта.
по ентер или пробелу можно повторить вставку
-----
2. кнопка или пункт меню
цепляем такой код для той же трубы
^C^CspStdSelected 4E2FDA62C44D46D6
----------
3. из броузера объектов
3.1. создаем в нем каталог с подкаталогами
3.2. в броузере копируем интересующие объекты и вставляем в созданные подкаталоги (это будут не объекты , а ссылки на них)
3.3 по ПКМ на каталоге "добавить закладку-броузер".
-------------
4.средствами VBS or VBA or VB
цепляемся к McCOM
создаем объект
подгружаем его из базы по ID
вставляем на чертеж
PS не проверял будет ли работать OnConnect
-----------------
PPS понятия не имею будут ли п.п. 1, 2 работать в нанеСПДС6 (они зависят от возможностей платформы)
п.п. 3,4 от платформы не зависят, используется только функционал СПДС

Сообщение отредактировал doctorraz: 22 Ноябрь 2017 - 08:45


#296 Mитька

    Активист

  • Пользователи
  • PipPipPipPip
  • 217 сообщений
  • Пол:Мужчина
  • Город:Хабаровск

Отправлено 22 Ноябрь 2017 - 09:03

Просмотр сообщенияdoctorraz (22 Ноябрь 2017 - 08:34) писал:


Грасиас вам!

#297 dromandon

    Участник

  • Пользователи
  • PipPipPip
  • 70 сообщений
  • Пол:Мужчина
  • Город:Калининград

Отправлено 22 Ноябрь 2017 - 10:41

Просмотр сообщенияdoctorraz (22 Ноябрь 2017 - 08:34) писал:

PPS понятия не имею будут ли п.п. 1, 2 работать в нанеСПДС6 (они зависят от возможностей платформы)
п.п. 3,4 от платформы не зависят, используется только функционал СПДС

1-ый работает =)
2-ой - вроде на нано СПДС 6 нету способа добавить кнопку со своим макросом. Хотя опять же, может я просто плохо искал) Есть что-то похожее на данную функцию, но оно выглядит как заготовка на будущую версию :D

Прикрепленные файлы



#298 Mитька

    Активист

  • Пользователи
  • PipPipPipPip
  • 217 сообщений
  • Пол:Мужчина
  • Город:Хабаровск

Отправлено 22 Ноябрь 2017 - 11:16

Просмотр сообщенияdromandon (22 Ноябрь 2017 - 10:41) писал:

но оно выглядит как заготовка на будущую версию :D

оно так уже 5 лет выглядит...

#299 doctorraz

    Активист

  • Пользователи
  • PipPipPipPip
  • 651 сообщений
  • Пол:Мужчина
  • Город:Волгоград
  • Интересы:всё понемногу

Отправлено 22 Ноябрь 2017 - 11:27

теперь так )))
Скрытый текст


#300 MCAD

    Активист

  • Пользователи
  • PipPipPipPip
  • 862 сообщений
  • Пол:Мужчина

Отправлено 22 Ноябрь 2017 - 14:51

Просмотр сообщенияMитька (22 Ноябрь 2017 - 11:16) писал:

Просмотр сообщенияdromandon (22 Ноябрь 2017 - 10:41) писал:

но оно выглядит как заготовка на будущую версию :D
оно так уже 5 лет выглядит...
Ну а чего не так. Давно же работает?


Только добавить (если объект БД)

Просмотр сообщенияdoctorraz (22 Ноябрь 2017 - 08:34) писал:

2. кнопка или пункт меню
цепляем такой код для той же трубы
^C^CspStdSelected 4E2FDA62C44D46D6






Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 скрытых пользователей