Реклама i
Стань нашим партнером - зарабатывай с нами!
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > .NET > Vb.net Как послать в кад diesel команду

Vb.net Как послать в кад diesel команду

Ответ
Поиск в этой теме
Непрочитано 18.12.2018, 10:36 #1
Vb.net Как послать в кад diesel команду
p_sh
 
новичок
 
Ярославль
Регистрация: 19.06.2005
Сообщений: 3,396

в vba использовал команду типа

string="^C^CCELTSCALE;50;CELTYPE;bylayer;Clayer;опалубка;CECOLOR;bylayer;CELWEIGHT;50;_line"

ThisDrawing.SendCommand string & vbCr

в vb.net способ
acdoc.SendStringToExecute(string + " ", True, False, False)

не срабатывает

Может есть иной путь послать diesel строку на выполнение?
Просмотров: 10433
 
Непрочитано 18.12.2018, 10:44
#2
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,003


ну если внешнее приложение на vbnet, то работайте через COM-модель. Если внутреннее - через Interop/ApiNet. Если есть возможность, надо избегать использования комстроки - хотя бы в силу того, что это односторонний процесс: засылаете строки на исполнение без всякой обратной связи и контроля.
Сергей812 вне форума  
 
Непрочитано 18.12.2018, 10:48
#3
trir


 
Регистрация: 18.12.2010
Сообщений: 5,047


" " это 0x20, а vbCr это 0x0D
trir вне форума  
 
Непрочитано 18.12.2018, 11:17
#4
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,588


p_sh, ключевой вопрос зачем всё это делать?

Чтение и установка системных переменных выполняется вот так:
Код:
[Выделить все]
             var dxgf = Autodesk.AutoCAD.ApplicationServices.Application.GetSystemVariable("CCELTSCALE");
            Autodesk.AutoCAD.ApplicationServices.Application.SetSystemVariable("CCELTSCALE", 50);
Впрочем, если Вам просто нужна команда для рисования линии, то напишите свою, это самое простое.

Код:
[Выделить все]
 
//using System;
//using App = Autodesk.AutoCAD.ApplicationServices;
//using cad = Autodesk.AutoCAD.ApplicationServices.Application;
//using Db = Autodesk.AutoCAD.DatabaseServices;
//using Ed = Autodesk.AutoCAD.EditorInput;
//using Gem = Autodesk.AutoCAD.Geometry;
//using Rtm = Autodesk.AutoCAD.Runtime;

        [Rtm.CommandMethod("AddLine")]
        static public void AddLine()
        {
            App.Document acDoc = App.Application.DocumentManager.MdiActiveDocument;
            if (acDoc == null) return;
            Db.Database acCurDb = acDoc.Database;
            Ed.Editor acEd = acDoc.Editor;

            Gem.CoordinateSystem3d acCurrentCS = acEd.CurrentUserCoordinateSystem.CoordinateSystem3d;
            Gem.Matrix3d acMatrix_WCS = new Gem.Matrix3d();
            acMatrix_WCS = Gem.Matrix3d.AlignCoordinateSystem(Gem.Point3d.Origin,
                                             Gem.Vector3d.XAxis,
                                             Gem.Vector3d.YAxis,
                                             Gem.Vector3d.ZAxis,
                                             acCurrentCS.Origin,
                                             acCurrentCS.Xaxis,
                                             acCurrentCS.Yaxis,
                                             acCurrentCS.Zaxis);

            Ed.PromptPointOptions optStart = new Ed.PromptPointOptions("\nУкажите первую точку");
            optStart.AllowNone = false;
            Ed.PromptPointResult resStart = acEd.GetPoint(optStart);
            if (resStart.Status != Ed.PromptStatus.OK) return;

            Ed.PromptPointOptions optEnd = new Ed.PromptPointOptions("\nУкажите вторую точку");
            optEnd.AllowNone = false;
            optEnd.BasePoint = resStart.Value;
            optEnd.UseBasePoint = true;
            optEnd.UseDashedLine = true;

            Ed.PromptPointResult resEnd = acEd.GetPoint(optEnd);
            if (resEnd.Status != Ed.PromptStatus.OK) return;

            using (Db.Transaction acTrans = acCurDb.TransactionManager.StartOpenCloseTransaction())
            {
                Db.BlockTable acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, Db.OpenMode.ForRead) as Db.BlockTable;
                Db.BlockTableRecord acBlkTblRec = acTrans.GetObject(acBlkTbl[Db.BlockTableRecord.ModelSpace],
                                                                                Db.OpenMode.ForWrite) as Db.BlockTableRecord;
                Db.Line acLine = new Db.Line(resStart.Value.TransformBy(acMatrix_WCS), resEnd.Value.TransformBy(acMatrix_WCS));
               
                
                //тут настройка линии
                acLine.LinetypeScale = 50; //(CCELTSCALE)
                acLine.Linetype = "bylayer"; //(CELTYPE;bylayer)
                acLine.Layer = "опалубка"; //(Clayer)
                                    //тут нужно проверить что такой слой вообще есть 
                                    //и если его нет, то создть его
                                    //но это уже сами

                acLine.ColorIndex = 0; //(CECOLOR: 0-bylayer, 256 - byBlock)
                acLine.LineWeight = Db.LineWeight.LineWeight050; //(CELWEIGHT)

                acLine.SetDatabaseDefaults();
                acBlkTblRec.AppendEntity(acLine);
                acTrans.AddNewlyCreatedDBObject(acLine, true);
                acTrans.Commit();
            }
        }

ЗЫ.
Пытался себя заставить этот код перекинуть а VB.NET .... не смог, глаза кровоточить начинают =)

Последний раз редактировалось Boxa, 18.12.2018 в 11:24.
Boxa вне форума  
 
Автор темы   Непрочитано 18.12.2018, 12:38
#5
p_sh

новичок
 
Регистрация: 19.06.2005
Ярославль
Сообщений: 3,396


Цитата:
p_sh, ключевой вопрос зачем всё это делать?
идея в том, чтобы назначить кнопке выполнение комбинированной команды.
команду пишет сам пользователь.

вообще можно разложить команду разделенную запятыми на отдельные команды и выдать по отдельности в командную строку.
p_sh вне форума  
 
Непрочитано 18.12.2018, 12:46
#6
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,588


Цитата:
Сообщение от p_sh Посмотреть сообщение
идея в том, чтобы назначить кнопке выполнение комбинированной команды.
команду пишет сам пользователь.
Не совсем понимаю зачем в этой схеме VBA или VB.NET? https://forum.dwg.ru/showthread.php?t=20674

И еще тут почитайте: https://sites.google.com/site/bushma...tringtoexecute
Код:
[Выделить все]
 [CommandMethod("MARKPOS")]
public static void MarkPosition()
{
  Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;
  ed.Command(new object[]{"UNDO", "M"});
}
и еще тут: http://adn-cis.org/forum/index.php?topic=7339.0 и тут https://through-the-interface.typepa...g_command.html

Последний раз редактировалось Boxa, 18.12.2018 в 12:52.
Boxa вне форума  
 
Непрочитано 18.12.2018, 12:53
#7
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,003


Цитата:
Сообщение от p_sh Посмотреть сообщение
идея в том, чтобы назначить кнопке выполнение комбинированной команды.
команду пишет сам пользователь.

вообще можно разложить команду разделенную запятыми на отдельные команды и выдать по отдельности в командную строку.
можно перехватывать в событии CommandWillStart вызов команды пользователя и выполнить перед нею определенные действия при необходимости. Но явно не через комстроку)
Сергей812 вне форума  
 
Непрочитано 18.12.2018, 14:18
#8
kbkb


 
Регистрация: 26.12.2011
Сообщений: 2


На LISP проще, но надо знать команда и их параметры - создание слоя с цветом розовый типом линии сплошная и толщиной 0.15
(command "_.LAYER" "_M" "1_КАРТА" "_C" 6 "" "_LT" "continuous" "" "_LWEIGHT" 0.15 "" "");цвет розовый
эту строку в Сервис->Адаптация->Интерфейс в правой части таблицы с параметрами кнопки вставить как макрос
На VBA строчка для команды сложнее - создание слоя с цветом розовый (другие параметры по аналогии Chr(34)-кавычки
и Chr(13) + Chr(10)-Enter
Sub q1()
AutoCAD.Application.ActiveDocument.SendCommand ("(command " & Chr(34) & "_.LAYER" _
& Chr(34) & " " & Chr(34) & "_M" & Chr(34) & " " & Chr(34) & "R_НовыйСлой1" _
& Chr(34) & " " & Chr(34) & "_C" & & " 6)" & Chr(13) + Chr(10) & Chr(13) + Chr(10))
End Sub
kbkb вне форума  
 
Непрочитано 18.12.2018, 14:38
#9
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,003


Цитата:
Сообщение от kbkb Посмотреть сообщение
AutoCAD.Application.ActiveDocument.SendCommand ("(command " & Chr(34) & "_.LAYER" _
& Chr(34) & " " & Chr(34) & "_M" & Chr(34) & " " & Chr(34) & "R_НовыйСлой1" _
& Chr(34) & " " & Chr(34) & "_C" & & " 6)" & Chr(13) + Chr(10) & Chr(13) + Chr(10))
End Sub
действительно - зачем проверять наличие слоя в таблице слоев, когда можно просто пытаться каждый раз создавать слой заново, игнорируя ошибки)
Сергей812 вне форума  
 
Автор темы   Непрочитано 18.12.2018, 14:49
#10
p_sh

новичок
 
Регистрация: 19.06.2005
Ярославль
Сообщений: 3,396


разбив строку типа (как исходные данные)(CELTSCALE;50;CELTYPE;bylayer;Clayer;опалубка;CECOLOR;bylayer;CELWEIGHT;25;_line) на отдельные команды запускаю каждую

app.ActiveDocument.SendCommand("CELTSCALE" & vbCr)
app.ActiveDocument.SendCommand("50" & vbCr)
и т.д.
p_sh вне форума  
 
Непрочитано 18.12.2018, 15:01
#11
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,003


Цитата:
Сообщение от p_sh Посмотреть сообщение
app.ActiveDocument.SendCommand("CELTSCALE" & vbCr)
app.ActiveDocument.SendCommand("50" & vbCr)
можно записать как
Код:
[Выделить все]
app.ActiveDocument.SetVariable "CELTSCALE", 50
с абсолютно таким же результатом. Но у вас свой путь в программировании..)
Сергей812 вне форума  
 
Непрочитано 18.12.2018, 15:18
#12
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,588


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
можно записать как
Код:
[Выделить все]

app.ActiveDocument.SetVariable "CELTSCALE", 50

с абсолютно таким же результатом. Но у вас свой путь в программировании..)
Я это в самом начале написал, как считать значения, как изменить/восстановить... но у автора действительно свой путь.
Boxa вне форума  
 
Непрочитано 18.12.2018, 15:46
#13
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,003


Offtop: Boxa, у вас были примеры на C# и в синтаксисе NetApi - нельзя так издеваться над начинающими программистами)
Сергей812 вне форума  
 
Автор темы   Непрочитано 18.12.2018, 20:14
#14
p_sh

новичок
 
Регистрация: 19.06.2005
Ярославль
Сообщений: 3,396


Цитата:
Сообщение от p_sh Посмотреть сообщение
разбив строку типа (как исходные данные)(CELTSCALE;50;CELTYPE;bylayer;Clayer;опалубка;CECOLOR;bylayer;CELWEIGHT;25;_line) на отдельные команды запускаю каждую

app.ActiveDocument.SendCommand("CELTSCALE" & vbCr)
app.ActiveDocument.SendCommand("50" & vbCr)
и т.д.
странно: способ выше работает в 2012х32
а в 2019x64 работает
acdoc.SendStringToExecute("CELTSCALE" & vbCr, True, False, True)
acdoc.SendStringToExecute("50" & vbCr, True, False, True)

Цитата:
app.ActiveDocument.SetVariable "CELTSCALE", 50
не было бы ничего проще, но идея в том, чтобы юзер сам писал любую последовательность любых вменяемых команд, записанных в формате: команда1/разделитель/команда2/разделитель/ и т.д.
Задача кнопки просто их выполнить.
Если у вас есть решение более элегантное, то я буду рад позаимствовать.
p_sh вне форума  
 
Непрочитано 18.12.2018, 20:42
#15
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,003


Цитата:
Сообщение от p_sh Посмотреть сообщение
не было бы ничего проще, но идея в том, чтобы юзер сам писал любую последовательность любых вменяемых команд, записанных в формате: команда1/разделитель/команда2/разделитель/ и т.д.
Задача кнопки просто их выполнить.
Что-то это мне напоминает Александра, который уже года два пытается удивить всех гибридом палитры и проверки стандарта...
Сергей812 вне форума  
 
Автор темы   Непрочитано 18.12.2018, 20:55
#16
p_sh

новичок
 
Регистрация: 19.06.2005
Ярославль
Сообщений: 3,396


проект вполне готов для 20012x32 и 2019x64,
надо оттестировать на 2013x64 и 2015x64

пример работы в видео

ждите в загрузках
Вложения
Тип файла: flv Project 1.flv (4.11 Мб, 38 просмотров)

Последний раз редактировалось p_sh, 19.12.2018 в 12:28.
p_sh вне форума  
 
Непрочитано 19.12.2018, 13:24
#17
Do$

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


Вы сделали аналог инструментальной палитры?
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
 
Автор темы   Непрочитано 19.12.2018, 13:28
#18
p_sh

новичок
 
Регистрация: 19.06.2005
Ярославль
Сообщений: 3,396


да (переписал идею 10 летней давности), все работает (на модерации)
/dnl/14713

признаться никогда не пользовался палитрами.

Последний раз редактировалось p_sh, 19.12.2018 в 13:41.
p_sh вне форума  
 
Непрочитано 19.12.2018, 14:12
#19
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,003


Цитата:
Сообщение от p_sh Посмотреть сообщение
признаться никогда не пользовался палитрами.
Пользоваться не обязательно - но представление то иметь нужно: Создание и использование инструментов-команд
Сергей812 вне форума  
 
Непрочитано 19.12.2018, 14:47
#20
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,588


Цитата:
Сообщение от Do$ Посмотреть сообщение
Вы сделали аналог инструментальной палитры?
Судя по видео это нечто среднее между NAVSWHEEL и Палитрой...

Цитата:
Сообщение от p_sh Посмотреть сообщение
признаться никогда не пользовался палитрами.
Иногда стоит смотреть на то, что есть, дабы бы не изобретать велосипед.
Boxa вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > .NET > Vb.net Как послать в кад diesel команду

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Diesel. Как передать значение атрибута? DANZZ Программирование 2 21.12.2023 14:23
Diesel. Значения поля не работают внутри diesel wetr Программирование 15 06.08.2014 15:43
Как заставить прозрачную команду на ЛИСП возвращать значение 480725 LISP 10 17.06.2014 01:43
LISP. Как закончить циклическую команду (послать ей ESC)? WhiteShark LISP 15 13.01.2014 22:24
vb.net, AutoCAD + windows form Gelia .NET 6 23.03.2012 22:14