Честно говоря, не ожидал такого поворота, что программы для BricsCAD придется адаптироватиь к акаду. Я в принципе не возражаю против переделки отдельных программок под акад, если они действительно заинтересовали участников форума.
Тем более, что под акад существуют целые пакеты с аналогичными функциями, более совершенные и отработанные. Да и на этом форуме можно найти массу интересных решений. Но к сожалению из-за отсутствующей ПОКА поддержки VL в BricsCAD они непригодны для использования в этом альтернативном акаду продукте. Это и заставило меня самому взяться за перо (т.е. за клавиши :)) и в меру возможностей сделать пакет дополнений к BricsCAD в соответствии с потребностями нашей организации, использующей эту программу взамен AutoCADа. Целью моей ссылки на пакет http://sabit.com.ua/apps.php в соответствующей теме было показать, что существуют и другие аналоги акада, хоть и менее именитые и совершенные, но вполне пригодные для использования в проектировании с возможностью адаптации.
Теперь по пакету. Сразу скажу, что далеко не все программы в нем были адаптированы под BricsCAD. Многие изначально создавались под него на чистом лиспе (с которым у брикса есть полное взаимопонимание) с учетом отличий в некоторых командах брикса и акада. Оговорюсь, что брикс понимает как свои команды, так и их акадовские аналоги. Обратного, увы нет. Именно поэтому некоторые программы и отказываются работать в акаде, как совершенно верно заметил Владимир Громов. И для того, чтобы посмотреть их в работе проще всего действительно загрузить тот же BricsCAD, благо места он занимает немного.
Для нормальной работы с пакетом конечно желательно использовать шаблон, входящий в комплект. Я не стал убирать привязку к слоям и т.п., а сохранил тот вариант, который используется в нашей фирме. Каждый, кто считает необходимым, может внести соответствующие изменения с привязкой к своим слоям и стилям.
Больших познаний в этом не надо, тем более, что акад сам говорит, что он не может найти, но программа увы не работает. В BricsCAD при использовании другого шаблона программы работают, но вычерчивают все объекты в том слое, ан котором создаются. Но в этом случае вы не избегаете последующей операции назначения свойств объектам, сложнее организовать единый стиль оформления конструкторской документации и т.д.
Теперь конкретно по программам. После обращения BigScrew ко мне с просьбой переработать программу sleader.lsp я внес в нее необходимые изменения. Единственное, что при внесении кода в эту тему уважаемый BigScrew забыл указать автора изменений :).
Что касается uzel.lsp,которую я тоже по просьбе BigScrew адаптировал к Акад (как это ни странно звучит) то опять абсолютно верно отметил Владимир Громов, с этой функцией используется диалог (который также есть в пакете) и проблема была в команде editlen, которой в акаде нет, но есть аналогичная lengthen. Но на этом отличия не исчерпываются. Несколько по разному, как оказалось, ведут себя и привязки в Брикскад и Акад, пришлось ввести их отключение при вставке текста на выноске обозначения узла. И еще одна проблема, которую мне не удалось решить в полной мере, может помогут спецы: при отрисовке окружности, охватывающей узел ее динамические контуры во время указания радиуса не отображаются, как это у меня работало в BricsCAD. Пришлось добавить для наглядности выбора радиуса "резиновую нить".
Вобщем в конечном итоге получилось:
;UZEL.LSP
;Программа вычерчивания окружности, ограничивающей узел и выноски с наименованием узла
;Е.Сосновский, г.Мариуполь, 2006г.
;Макрос для кнопки ^C^C(if (not C:uzel) (load "uzel")) uzel
(defun C:uzel ( / llen tce tvn tvr tvl ttr ttr0 ttl tt0 tpl)
;;Функция отмены и выхода
(defun *error* (msg)
(if (= msg "quit / exit abort")
(princ)
);if
);defun
(setvar "cmdecho" 0)
(setq curlay (getvar "CLAYER"))
;Вызов диалога параметров таблицы
(setq dlg (load_dialog "uzel"))
(new_dialog "uzel" dlg)
(mode_tile "nuz" 2)
(action_tile "nuz" "(setq txt $value)")
(action_tile "np" "(setq txt2 $value)")
(action_tile "accept" "(done_dialog)")
(action_tile "cancel" "(exit)")
(start_dialog)
(unload_dialog dlg)
;Конец функции вызова диалога
(setq llen (* 2.2 (strlen txt2)))
(if
(>= (strlen txt) (strlen txt2))
(setq llen (* 3.5 (strlen txt)))
);if
(command "_layer" "_s" "РАЗМЕР_0.13" "")
(setq tce (getpoint "\n Укажите точку центра окружности, ограничивающей узел: "))
(command "_circle" tce (getpoint tce "\n Укажите точку центра окружности, ограничивающей узел: "))
(setq okr (entget (entlast))
rokr (cdr(assoc 40 okr))
tvn (getpoint tce "\n Укажите точку начала выноски: "))
(command "_line" tce tvn "")
(command "_lengthen" "_del" (- rokr) tce "")
(setq priv (getvar "osmode"))
(setvar "osmode" 0)
(setq tvr (polar tvn 0 llen)
tvl (polar tvn pi llen)
ttr0 (polar tvn 0 (* 0.5 llen))
ttr (polar ttr0 (* 0.5 pi) 4)
ttl0 (polar tvn pi (* 0.5 llen))
ttl (polar ttl0 (* 0.5 pi) 4)
tpr (polar ttr (* 1.5 pi) 7)
tpl (polar ttl (* 1.5 pi)7)
ugr (angle tce tvn))
(if
(and (> ugr 0) (<= ugr (* pi 0.5)))
(command "_line" tvn tvr "")
);if
(if
(and (> ugr (* pi 0.5)) (<= ugr pi))
(command "_line" tvn tvl ""))
(if
(and (> ugr pi) (<= ugr (* 1.5 pi)))
(command "_line" tvn tvl "")
);if
(if
(and (> ugr (* 1.5 pi)) (<= ugr (* 2 pi)))
(command "_line" tvn tvr "")
);if
(if
(= txt "") (setq txt "1")
);if
(command "_layer" "_s" "ТЕКСТ_0.30" "")
(if
(and (> ugr 0) (<= ugr (* pi 0.5)))
(progn
(command "_text" "_m" ttr 5 "0" txt)
(command "_text" "_m" tpr 3.5 "0" txt2)
);progn
);if
(if
(and (> ugr (* pi 0.5)) (<= ugr pi))
(progn
(command "_text" "_m" ttl 5 "0" txt)
(command "_text" "_m" tpl 3.5 "0" txt2)
);progn
);if
(if
(and (> ugr pi) (<= ugr (* pi 1.5)))
(progn
(command "_text" "_m" ttl 5 "0" txt)
(command "_text" "_m" tpl 3.5 "0" txt2)
);progn
);if
(if (and (> ugr (* pi 1.5)) (<= ugr (* 2 pi)))
(progn
(command "_text" "_m" ttr 5 "0" txt)
(command "_text" "_m" tpr 3.5 "0" txt2)
);progn
);if
(setvar "osmode" priv)
(command "_layer" "_s" curlay "")
(princ)
)
И файл диалога:
dcl_settings : default_dcl_settings { audit_level = 0; }
uzel: dialog {label = "Параметры узла";
: column {alignment = centered;
: row {alignment = centered;
: text {alignment = left;
fixed_width = true;
label = "Номер узла:";
}
: edit_box {alignment = right;
fixed_width = true;
edit_width = 25;
edit_limit = 25;
key = "nuz";
}
}
: row {alignment = centered;
: text {alignment = left;
fixed_width = true;
label = "Адрес узла:";
}
: edit_box {alignment = right;
fixed_width = true;
edit_width = 25;
edit_limit = 25;
key = "np";
}
}
spacer_1;
ok_cancel;
spacer_1;
}
}
Шаблон, как я уже отмечал, желательно использовать из пакета BricsCAD BonusTools,
версия 1.1.0010 которого находится по указанной выше ссылке.
Если возникают вопросы по другим приложениям этого пакета или по тому же BricsCAD (если кого заинтересует) можно продолжить разговор в этой ветке. Я думаю, уважаемый модератор не будет против.