Тема: Определение новых типов линий

Есть потребность использовать линии по СТ СЭВ 160-75. Раньше работал в Компасе, там всё делается несколько попроще, картинка для линии делается из стандартного файла фрагмента. Более-менее разобрался, как в автокаде определяется линия. Теперь вопрос: из чего собирать shx файлы? Или может быть есть у кого-нибудь готовая библиотека обозначений для систем связи?

Re: Определение новых типов линий

Из справки AutoCAD 2005 Рус:
Формы в пользовательских типах линий
Сложные типы линий могут содержать встроенные формы, которые хранятся в файлах форм. Линии сложных типов используются для обозначения инженерных сетей, границ, контуров и т.д.
Как и простые, сложные линии строятся динамически между задаваемыми пользователем вершинами. Формы и текстовые объекты, являющиеся частью сложных линий, всегда отображаются полностью и никогда не обрезаются.
При описании элементы начертания линий сложного типа, так же как и в простых линиях, отделяются друг от друга запятыми. В качестве элементов начертания описания сложных типов линий могут содержать, помимо точек и штрихов, формы и текстовые объекты.
Формы в типах линий описываются следующим образом:
[имя_формы,имя_файла_shx] или [имя_формы,имя_файла_shx,преобразование].
Здесь атрибут преобразование является необязательным и может задавать любую последовательность следующих параметров (через запятую):
R=## Относительный угол поворота
A=## Абсолютный угол поворота
S=## Масштаб
X=## Отступ по X
Y=## Отступ по Y
В данном случае ## обозначает десятичное число со знаком (1, -17, 0.01 и т.д.). Угол поворота измеряется в градусах, остальные величины ? в единицах рисунка в соответствии с масштабом типа линий. После букв, обозначающих операции преобразования, ставятся знак равенства и число.
Ниже приведено описание линии с именем CON1LINE, повторяющееся звено которой состоит из линейного участка, пробела и формы CON1 из файла ep.shx (файл ep.shx должен находиться в папке SUPPORT).
*CON1LINE, --- [CON1] --- [CON1] --- [CON1]
A,1.0,-0.25,[CON1,ep.shx],-1.0
За исключением выражения в квадратных скобках, описание полностью совпадает с описанием простого типа линий.
Как было отмечено ранее, в общей сложности для описания формы, входящей в состав линии сложного типа, можно использовать 6 параметров. Только первые два из них являются обязательными и фиксированными, остальные четыре можно опустить или поменять местами. Ниже приведены два примера описания форм с использованием различных параметров.
[CAP,ep.shx,S=2,R=10,X=0.5]
Строится форма с именем CAP, описанная в файле ep.shx, в масштабе, в два раза превышающем масштаб единиц данной линии, повернутая относительно касательной к линии на 10 градусов против часовой стрелки и с отступом в 0.5 единиц по оси X.
[DIP8,pd.shx,X=0.5,Y=1,R=0,S=1]
Строится форма с именем DIP8, описанная в файле pd.shx, с отступом по оси X в 0.5 единиц, по оси Y в 1 ед., в масштабе, равном масштабу единиц данной линии, с нулевым углом поворота относительно касательной к линии.
Для описания форм в сложных типах линий принят следующий синтаксис.
[имя_формы,файл_формы,масштаб,поворот,отступ_по_x,отступ_по_y]
Ниже приведена расшифровка параметров описания.
имя_формы
Имя используемой формы. Обязательный параметр. При его отсутствии тип линий не определяется. Если форма с таким именем отсутствует в указанном файле, линия строится без формы.
файл_формы
Имя скомпилированного файла описания формы (.shx). При его отсутствии тип линий не определяется. Если путь к файлу формы не задан, программа ищет его в папке библиотечных файлов. Если путь задан, но программа не может найти файл по заданному пути, то поиск осуществляется в папке библиотечных файлов. Если заданный файл не найден, линия строится без формы.
масштаб
S=value. Масштаб формы, т.е. коэффициент, на который умножается изначальный масштаб формы. Если изначально форма определена с масштабом 0, то в качестве масштаба используется абсолютное значение S.
поворот
R=значениеили A=значение. R=обозначает относительный или тангенциальный угол поворота относительно направления линии. A= обозначает абсолютный угол поворота формы, т.е. относительно начала координат; все формы поворачиваются одинаково, независимо от их положения относительно линии. Значение угла поворота может быть дополнено буквами d, r, или g. Буквы соответствуют единицам измерения угла ? градусам, радианам или градам. Если буква не указана, угол поворота измеряется в градусах. Если угол поворота не указан, то его значение принимается равным 0.
x-отступ
X=значение_отступа. Этот параметр задает отступ формы по оси X, отсчитываемый от вершины линии. Если отступ по оси X не задан или равен нулю, форма строится без отступа. Этот параметр употребляется, если необходима сплошная линия, включающая формы. На значение не влияет масштаб, заданный выражением S=.
y-отступ
Y=значение_отсупа. Этот параметр задает отступ формы по оси Y, отсчитываемый от вершины линии. Если отступ по оси Y не задан или равен нулю, форма строится без отступа. На значение не влияет масштаб, заданный выражением S=.

Re: Определение новых типов линий

Для создания "лохматых" типов линий, т.е. типов, у которых элементы выступают за направление линии (типа -|-), можно использовать команды Express Tools mkshape и mkltype.
Тут есть несколько тонкостей:
1. При отрисовке такими типами линий может стать критичным направление отрисовки (текстовые типы могут быть отрисованы "кверху ногами").
2. Дуговые сегменты полилиний, окружности и дуги рисуются типом линии с направлением "низ определения - от центра". изменение направления отрисовки ни к чему не приводит. Надо делать другой тип линии.
3. Для текстовых типов линии не всегда возможно использовать стиль с наклоном.
4. Перед загрузкой текстовых типов линий надо предварительно создать текстовый стиль, который используется при отрисовке линии.

Re: Определение новых типов линий

> Владимир Громов
Владимир, хелпы я читать как бы умею, не надо делать cut'n'paste из стандартного хелпа автокада. Вопрос стоит так: мне нужно на линии разместить 3 наклонных росчерка под углом 45 к базовой линии (примерно так: / / /). Каким образом это можно сделать? Насколько я понял, надо сделать описание в файле shp, потом его скомпилировать и добавить описание линии в файл dwl. Я надеялся от кого-нибудь услышать конкретно описание процесса.

Re: Определение новых типов линий

> rvv
Ну, извини, но может и другим полезно, особенно у кого српавка на английском языке...
Только причем тут файл dwl? Опять же из справки:
Информация, выводимая командой WHOHAS, хранится во временном файле блокировки рисунка (DWL). DWL-файл создается автоматически при открытии файла рисунка и удаляется при его закрытии.
Команда WHOHAS позволяет пользователям определять, кем открыт в данный момент тот или иной файл рисунка.

Re: Определение новых типов линий

> rvv
Можно воспользоваться советом kpblc.
А вот как я сделал несколько типов линий для раздела проекта "Слаботочная сигнализация":

*СС_Пожар,Пожарная сигнализация     ----- X -----
A,16.0,-3.0,["X",Standard,y=-2.5,s=5],-6.0
*СС_Палата,Палатная сигнализация    ----- V -----
A,16.0,-3.0,["V",Standard,y=-2.5,s=5],-6.0
*СС_ТВ,Сигнализация ТВ              ----- // -----
A,16.0,-3.0,["//",Standard,y=-2.5,s=5],-12.0
*СС_ЛВС,Локальные сети              ----- / -----
A,16.0,-3.0,["/",Standard,y=-2.5,s=5],-6.0
*СС_Т_Пожар,Пожарная сигнализация    ----- ПОЖ -----
A,16.0,-3.0,["ПОЖ",Standard,y=-2.5,s=5],-18.0
*СС_Т_Палата,Палатная сигнализация   ----- ПАЛ -----
A,16.0,-3.0,["ПАЛ",Standard,y=-2.5,s=5],-18.0
*СС_Т_ТВ,Сигнализация ТВ             ----- ТВ -----
A,16.0,-3.0,["ТВ",Standard,y=-2.5,s=5],-12.0
*СС_Т_ЛВС,Локальные сети             ----- ЛВС -----
A,16.0,-3.0,["ЛВС",Standard,y=-2.5,s=5],-18.0

Может, это и не то, IMHO.

Re: Определение новых типов линий

> rvv
Делаем на AutoCAD с установленными Expres Tools. Рисуется линия будущего обозначения наклона. Например, штрихи должны располагаться с шагом 5 мм, размер штриха - вниз на 1мм, вверх на 1 мм. Рисуется линия с координатами (1.5 -1) (3.5 1). С ком.строки дается команда mkshape (без подчеркивания, поскольку это добавление, и в русской версии када нормально опознается). Указываем файл, в котором будет храниться описание формы (файл надо располагать по путям поиска када - тогда проще будет). Указываем имя формы (английскими символами, без пробелов и прочей чепухи, регистр все равно уйдет в верхний) - например, ANGLE_LINE. Указываем разрешение (поскольку тут только прямая, достаточно и 32, 128 указывать - только впустую загружать файл).
Указывается точка вставки будущей формы. В данном случае берем середину и указываем в качестве объектов собственно наклонную.
Форма создана. Теперь ее надо вставить. Команда _.shape ее уже даем с подчеркиванием для русской версии), указываем имя - ANGLE_LINE, точку вставки, масштабы, угол поворота. Оно встало.
Даем дополнительную собственно линию - горизонтально, 2 отрезка с координатами (0 0) (1.5 0) и (3.5 0) (5 0).
Теперь команда mkltype. указывается имя файла описания линии, имя типа линии (для гарантии желательно давать только английские имена, без пробелов - вообще-то можно Полещука посмотреть, там описаны ограничения на имена типов линий), как оно будет отображаться, пояснение к типу линии (это уже любое, до 128 символов, по-моему). Указывается точка начала типа линии (0,0), конца линии (5,0) и объекты, входящие в линию - оба горизонтальных отрезка + форма, которую мы уже вставили. Все, тип линии создан и загружен в данный чертеж.

Re: Определение новых типов линий

> Владимир Громов
Сорри, ошибочка вкралась. имелся в виду lin файл

Re: Определение новых типов линий

> Владимир Громов
Сделал как описал kpblc. Что характерно, получилось, хотя таких извращений я от автокада не ожидал wink

Re: Определение новых типов линий

> rvv
Ну, и надо помнить, что файл формы и тип линии надо передавать вместе с рисунком.

Re: Определение новых типов линий

Владимир Громов пишет:

Ну, и надо помнить, что файл формы и тип линии надо передавать вместе с рисунком.

Это само собой. Хотя чисто моё IMHO - в Компасе конкретно вот эта функция реализована на порядок удобнее. Как и кое-что другое.

Re: Определение новых типов линий

> Владимир Громов
*СС_Пожар,Пожарная сигнализация     ----- X -----
A,16.0,-3.0,["X",Standard,y=-2.5,s=5],-6.0
Практика профессиональной работы показывает, что такими линиями пользоваться крайне неудобно. Буквы надписей то и дело выскакивают в самых неподходящих местах, их не сдвинуть. В Модели они в одном месте, в Листе - уже на другом (и именно так они и будут напечатаны, но работаем мы-то в Модели!!!). Работая в Модели визуально контролировать положение надписей на будущем чертеже невозможно... Словом, х#рня полная.....
Уж не знаю пофиксили ли эту штуку в 2006-м, но в 2002-м такие линии сгодятся одним лишь студентам. Ну, разве что геодезистам покатят - так как они "хотят первыми", хотя и в этом случае возникают всё те же вышеописанные проблемы.
Как решаются подобные задачи - разговор отдельный.  wink
P.S. Подобные же проблемы с удобным на первый взгляд масштабированием размеров под масштаб вьюпорта в пространстве Листа. Тоже фишка мертворожденная получилась...

Re: Определение новых типов линий

ой, описЬка ;-D :
"хотят первыми" --> "хоДят первыми"
LOL LOL LOL
Бывает........ Пишу тут сломанными руками, пАнимаешь....  wink

Re: Определение новых типов линий

> Mosspower
Эти типы линий я делал по заказу. Надо было видеть, как они выполнялись пользователем до этого. А теперь она светится от счастья и любви ко мне, и я свечусь. Вот это: х#рня - меня несколько обидело. Вариант с русскими буквами - только вариант, основным является вариант с латинскими буквами. К тому же у нас практически все работают исключительно в пространстве модели...

Re: Определение новых типов линий

> Mosspower
1. Использовать celtscale.
2. Поработать над psltscale.
3. по мере надобности (лиспом рещается за 10 минут) менять значение dimscale с текущего на 0 и обратно.

Re: Определение новых типов линий

Владимир Громов
> Эти типы линий я делал по заказу. Надо было видеть, как они выполнялись пользователем до этого. А теперь она светится от счастья и любви ко мне, и я свечусь. Вот это: х#рня - меня несколько обидело.
Не обижайтесь на меня, пожалуйста, проято я человек излишне эмоциональный, ну и как служивший в стройбате "двухгадюшником" на язык несдержанный. smile Это я по доброму так выразился. К Вам отношусь с уважением.
То, что "до этого они чертили" - могу себе предстваить. И такие типы линий для них - действительно большой шаг вперёд. Но поверьте мне, пожалуйста, на больших чертежах, загромождённых массой других линий и надписей - такие типы линий не катят.
Идеальный выход из ситуации - создавать свои объекты, которые подписываются не автоматически, а только в нужных местах самим создателем чертежа. Участок написываемой линии при этом автоматически экранируется. Сама же надпись "за ручки" может быть перемещена на своей линии, как по рельсе, с автоматическим разворотом (чтбы оставаться параллельной касательной к надписываемой линии в точке надписывания, и обязательно с учётом читаемости (надпись "ногами" вниз по чертежу, угол 90 "автокадовских" градусв (это значит CCW - против часовой стрелки) на вертикалях)). При перетаскивании надписи - экранирование следует за своим экранируемым текстом.
Если же создать свой объект нехватает знаний и опыта, то придётся всё тоже самое выполнять вручную. Экранировать WIPEOUT'ом, а надписывающий текст объединий в группу с этим WIPEOUT'ом. После чего нужную надпись просто копировать в новые места и поворачивать на нужный угол (группа будет копироваться). Если не ошибаюсь, то при маскировании текста с помощью Экспресс Утилит тексты объединяются в группу со своими "масками" самой программой.
Для временного разблокирования группы, чтобы сработал ДаблКликЭдит - нажимаем:
Ctrl+H
Для возврата группирровки объектов, повторно жмём:
Ctrl+H
Иного пока не дано. Если бы Автодеск дал возможность пользователям самостоятельно создавать подобные объекты (дал в руки инструмент для создания таких вот линий-объектов), то это было бы здорово. Хотя, примеры тому есть - например, Лэндовские горизонтали. Там можно посмотреть, как это работает. Хотя, вопросы к ним остаются - они катят только лишь как "черные", как "красные" - нет, так как не выполняют наших нормативных требований. Ну и возожные надписи там - только отметка, проставляемая автоматически, что в данном случае оченьь приятно. Так вот, если бы сделать подобный объект "сеть" (с учётом всей специфики), то это было бы самое ТО, что НУЖНО.
kpblc
Я извиняюсь, конечно, но и celtscale тут не годится, так как меняется масштаб линии вместе с высотой надписывающего текста, да и надпись всё равно в нужное место не сдвинуть, да и psltscale тоже проблему не решает. Я работаю в Модели и мне нужно видеть "где реально" у меня будут надписи на бумажном чертеже, контролировать и управлять их реальным местоположением. Так что Ваши советы, к сожалению, IMHO чисто "лабораторно-академические" и не годятся для реальной практической работы. Увы.
P.S. 2 ALL: Пишу быстро, нужно бежать на Арсенал - у меня пропало 2 Гига фоток с фотофиксации и теперь нужно будет восстанавливать эти фотки. Благо погода хорошая. Словом, местные "знактоки и ревнители чистоты русского языка" подсуетятся и пояснят, что к чему.

Re: Определение новых типов линий

> Mosspower
Ишь ты, раскритиковал все в пух и прах. Ну, и на здоровье. :))

Re: Определение новых типов линий

> Mosspower
Можно на "ты"? Надеюсь, без обид?
Если не пользуется никаким спросом пространство листа, это не означает, что его надо игнорировать. когда я говорил о celtscale, я прекрасно представлял, что изменится и высота текста. Также неплохо знаю, какие проблемы будут при работе с текстовыми типами линий на дугах. А если еще и ltscale поставить не 1, совсем здорово будет.  По поводу wipeout - пользуюсь, и мои юзеры тоже работают с ним, но! Дай команду _wipeout _f _on и посмотри на растры и маски многострочного текста. Так что wipeout хорош не всегда (куда и как пойдет чертеж, не знает никто, а по умолчанию границы wipeout'ов стоят именно в on; ACAD LT по умолчанию wipeout не поддерживает вообще никак без ObjectEnablera, который еще скачать и поставить надо и т.д.). Или еще хлеще - _draworder (выбрать wipeout) _b. Так что в таком варианте текстовый стиль линии может оказаться спасением.

Re: Определение новых типов линий

Здравствуйте!
Давняя тема, но такой вопрос: каким образом реализовать тип линии, у которой заданная форма (равносторонний треугольник углом вниз) находится в узловых точках, а оставшаяся часть линии - обычная, непрерывная?
Выравнивание по типу А не позволяет размещать в начале линии текст или форму :(

Re: Определение новых типов линий

> Smog
Никаким. Для границ землепользования мы вставляем в вершины полилиний блоки.

Re: Определение новых типов линий

Если в настройках ДО масштабов типов линий убрать галочку "применять его к листам", то на листах "надписи" остануться в том же месте, что и в Модели - вот только в ВЭкранх с разными масштабами они также будут масштабироваться...