Jump to content

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


Recommended Posts

На хитрых болтах - есть!

Есть конечно, я не спорю же.

И вообще, я уже не про толщину текста. Просто используя разные инструменты, в том числе "Универсальный маркер" можно более гибко настраивать среду под себя.

 

Маркер может управлять типоразмером стандартной детали с помощью той же таблицы параметров, которая заложена в самом объекте, но более гибко добавлять свои параметры, в том числе вычисляемые, которые закладывать в сам объект нет никакого смысла.

:

http://www.youtube.com/watch?v=98hx7lANoNs&list=PL1MQqrS2qjWOBqoetoe8hgJauZdVT-9sK

на

  • Like 2
Link to comment
Share on other sites

Ну я с иронией же :) Конечно, графике - графиково, аннотации - текстово :)

 

И я тож тогда поиронизирую. :) Используя пресловутую (разумеется, некорректную :)) автомобильную параллель: "хотите слушать музыку в машине - возите с собой музыкальный центр. Магнитола в салоне - это так, тестовая штука, проверять, правильно ли антенна ловит радио". :)

  • Like 2
Link to comment
Share on other sites

Ну а вообще, работает - и чУдно.

А если вдруг можно быстро и недорого добавить возможность назначать тексту тип линии и чуть открорректировать его работу в дальнейших версиях - было б здорово. А нет - ну извернёмся как-нить. Не в первый раз. ^_^

  • Like 1
Link to comment
Share on other sites

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

Link to comment
Share on other sites

думаю, что нет.

количество и расположение ручек задается один раз и изменить не получится

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;
}
}

Отвод ГОСТ 17375-2001.zip

  • Like 1
Link to comment
Share on other sites

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

 

function SetGripPoint { //ручки

NGrip=4+N; // где N - уже имеющаяся переменная, привязанная к циклу

pntGrip0=pntOrigin;

pntGrip1=pntOrigin-vecDirection*DNf/2;

pntGrip2=pntOrigin+vecPlane*DNf/2;

pntGrip3=pntAlfa;

pntGrip(3+cicle(уловно-всё-размеется-N))=блаблабла тож чё-то циклическое;

}

Если кол-во ручек в реальном времени подчиняется логическим условиям, то что по идее мешает ему подчиняться количественным значениям переменных? Механика-то примерно та же...Вопрос, могёт ли это программа... Ну, ждём авторитетного ответа.

Link to comment
Share on other sites

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

Так что вопрос остаётся, но становится чисто академическим.

 

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

Edited by Mитька
Link to comment
Share on other sites

но одно маленькое НО

SetGripPoint вызывается каждый раз при изменении свойств объекта извне (от другого объекта, через панель свойств или форму объекта)

upd Не вызывается при перемещении и копировании средствами АК (как в нано незнаю)

при воздействии на ручки SetGripPoint то же вызывается, но после OnMoveGripPoint

 

проверить легко

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

------------------------------

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

не проверял, но коль метод вызывается каждый раз, должно сработать )))))

чессно говоря не люблю я этих виртуальных коней обсуждать, как подсказывает мой скромный опыт, если у юзера возникает нужда так извращаться, то либо человеческие бизнесспроцессы пытается в код запихнуть, либо использует не то и не по назначению.

и когда конь превращается в реального, выясняется, что все можно было сделать намного проще штатными методами.

Edited by doctorraz
  • Like 2
Link to comment
Share on other sites

проверил, меняет положение ручки в зависимости от 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;
}

  • Like 2
Link to comment
Share on other sites

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 (видима)

Edited by doctorraz
  • Like 2
Link to comment
Share on other sites

  • 1 month later...

Мож, конечно, детсадовский вопрос, но можно ли к конкретному объекту из базы привязать команду-кнопку-менюшку..?

А то приходится искать их в дереве базы долго, да и в на "Предыдущую" они не реагируют... А было б удобно...

Нана6, если что.

Link to comment
Share on other sites

Мож, конечно, детсадовский вопрос, но можно ли к конкретному объекту из базы привязать команду-кнопку-менюшку..?

А то приходится искать их в дереве базы долго, да и в на "Предыдущую" они не реагируют... А было б удобно...

Нана6, если что.

 

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

  • Like 1
Link to comment
Share on other sites

 

А можно чуть больше информации, если не трудно..? Я смотрю, и нифига не понимаю, что и зачем вы делаете..? Возможно, дело в том, что пример дан по Нане 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).

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

Edited by Mитька
Link to comment
Share on other sites

А можно чуть больше информации, если не трудно..?

Поздно было, ограничился мультиком

Нане СПДС6

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

 

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

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

Link to comment
Share on other sites

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

 

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

Edited by Mитька
Link to comment
Share on other sites

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 от платформы не зависят, используется только функционал СПДС

Edited by doctorraz
  • Like 5
Link to comment
Share on other sites

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

п.п. 3,4 от платформы не зависят, используется только функционал СПДС

 

1-ый работает =)

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

post-65588-0-76565000-1511336475.png

Link to comment
Share on other sites

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

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

Ну а чего не так. Давно же работает?

http://www.youtube.com/watch?v=wjOMGmiOua8

 

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

 

2. кнопка или пункт меню

цепляем такой код для той же трубы

^C^CspStdSelected 4E2FDA62C44D46D6

  • Like 1
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

  • Tell a friend

    Love Официальный форум компании Нанософт? Tell a friend!
×
×
  • Create New...