Последние сообщения

Последние сообщения

Страницы: [1] 2 3 ... 10
1
AutoCAD .NET API / Re: Выбор элементов из другого чертежа.
« Последний ответ от Denis 25-06-2017, 11:00:07 »
Спасибо за ответ!
Буду пробовать, о результате сообщу потом тут.
2
Я исправлял вчера строки. Перепроверь.
Вместо "?acdbGetDbmod@@YAHPEAVAcDbDatabase@@@Z" должно быть
"?acdbSetDbmod@@YAHPEAVAcDbDatabase@@H@Z"
3
Не работает. Код отрабатывает без ошибок, но значение DBMOD не меняет.

Код - C# [Выбрать]
  1. namespace dbmod
  2. {
  3.     public class Class1
  4.     {
  5.         [CommandMethod("test_dbmod_set0")]
  6.         public static void test_dbmod_set0()
  7.         {
  8.             Database db = Application.DocumentManager.MdiActiveDocument.Database;
  9.             DbModClass.acdbSetDbmod(ref db, 0);
  10.         }
  11.  
  12.         [CommandMethod("test_dbmod_set1")]
  13.         public static void test_dbmod_set1()
  14.         {
  15.             Database db = Application.DocumentManager.MdiActiveDocument.Database;
  16.             DbModClass.acdbSetDbmod(ref db, 1);
  17.         }
  18.     }
  19.  
  20.     public class DbModClass
  21.     {
  22.         [DllImport("acdb22.dll", CallingConvention = CallingConvention.Cdecl, EntryPoint = "?acdbGetDbmod@@YAHPEAVAcDbDatabase@@@Z")]
  23.         private static extern Int32 acdbSetDbmod22x64(IntPtr db, Int32 newDbMod);
  24.  
  25.         public static Int32 acdbSetDbmod(ref Database db, Int32 newDbMod)
  26.         {
  27.             if (IntPtr.Size == 4)
  28.                 return acdbSetDbmod22x86(db.UnmanagedObject, newDbMod);
  29.             else
  30.                 return acdbSetDbmod22x64(db.UnmanagedObject, newDbMod);
  31.         }
  32.     }
  33. }

Похоже это или баг или закрыли возможность менять этот параметр.
4
Теоретически это возможно, но сложностей будет много. Нужно переключаться между чертежами при помощи DocumentCollection.MdiActiveDocument.
Соответственно команда, из которой это происходит должна быть с флагом CommandFlags.Session. И потребуется блокировка документов для их изменения.
5
AutoCAD .NET API / Выбор элементов из другого чертежа.
« Последний ответ от Denis 24-06-2017, 23:44:50 »
Здравствуйте!
Подскажите, пожалуйста, есть ли возможность вводить команду в одном чертеже, а выбирать объекты на другом чертеже?
Приведу пример идеи.

Есть два чертежа:
1)Принципиальная схема кабельных соединений.
2)Архитектурная схема, где находятся кабельные трассы и кабелепроводы.

Хочется выбирать текст маркировки кабелей на схеме 1 и присваивать как значение атрибута на схеме 2.
Соответственно надо выбирать текст на схеме один и присваивать элементу на схеме 2.

Может кто-то встречался с такой идеей?

Заранее спасибо!
6
Не работает в 2018 версии (((

"Не удается найти точку входа \"?acdbSetDbmod@@YAJPEAVAcDbDatabase@@J@Z\" в DLL \"acdb22.dll\"."
Для 2018 x64: "?acdbSetDbmod@@YAHPEAVAcDbDatabase@@H@Z"
Для 2018 x86: "?acdbSetDbmod@@YAHPAVAcDbDatabase@@H@Z"

Где вообще можно посмотреть структуру файла acdb22.dll - какие функции и точки входа?
Проще всего при помощи утилиты dumpbin.exe из Visual Studio. Причем напускать её лучше на acdb22.lib из ObjectARX SDK, а не на acdb22.dll из AutoCAD, так как в этом случае тебе придётся иметь обе разрядности AutoCAD, а в ObjectARX SDK они уже есть обе:
Код - INI [Выбрать]
  1. dumpbin /exports acdb22.lib >acdb22.txt
7
Не работает в 2018 версии (((

"Не удается найти точку входа \"?acdbSetDbmod@@YAJPEAVAcDbDatabase@@J@Z\" в DLL \"acdb22.dll\"."

Где вообще можно посмотреть структуру файла acdb22.dll - какие функции и точки входа?
8
Итак, нашел решение. Хотя мне оно не нравится, но оно решает эту проблему
Меняем xaml:
Код - XML [Выбрать]
  1. <Window x:Class="WpfRefAcadTest.TestWindow"
  2.        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3.        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4.        SizeToContent="WidthAndHeight">
  5.     <Grid x:Name="MainGrid">
  6.     <!--<lib:MyControl Margin="50"></lib:MyControl>-->
  7.     </Grid>
  8. </Window>
Меняем Code Behind:
Код - C# [Выбрать]
  1. using System;
  2. using System.Reflection;
  3. using System.Windows;
  4. using System.Windows.Controls;
  5.  
  6. namespace WpfRefAcadTest
  7. {
  8.     public partial class TestWindow : Window
  9.     {
  10.         public TestWindow()
  11.         {
  12.             UserControl myControl = null;
  13.             Assembly asm = Assembly.LoadFile(@"E:\WpfRefTest\WpfRefTest\Binaries\WpfControlsLib.dll");
  14.             Type[] tlist = asm.GetTypes();
  15.             foreach (Type t in tlist)
  16.             {
  17.                 if (t.Name == "MyControl")
  18.                 {
  19.                     myControl = Activator.CreateInstance(t) as UserControl;
  20.                     break;
  21.                 }
  22.             }
  23.             InitializeComponent();
  24.             this.MainGrid.Children.Add(myControl);
  25.         }
  26.     }
  27. }
Проблема конечно решается, но разрабатывать окно становится просто невозможно.

Думаю, нужно еще варианты поискать
9
Версия файла и сборки точно изменяется?
Так ведь я готовый проект приложил. Если в нем что-то подобное обнаружится, я сильно удивлюсь.
Никаких проблем не наблюдается при изменении версий вспомогательных сборок
Я имел ввиду не ваш проект, а свой ))
Но! В своем я не пробовал использовать UserControl из другой сборки. Поэтому попробовал ваш проект и да - проблема явно наблюдается! У меня тоже ничего не получилось из явного. Остается только гуглить варианты, но вопрос достаточно специфический и очень сложно что-то подобное найти
10
Никаких проблем не наблюдается при изменении версий вспомогательных сборок
Версия файла и сборки точно изменяется?

И еще одно уточнение. Речь идет именно о механизме подгрузки стороннего WPF-контрола таким способом (строки 7-8):
Код - XML [Выбрать]
  1. <Window x:Class="WpfRefAcadTest.TestWindow"
  2.             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3.             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4.             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  5.             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  6.             SizeToContent="WidthAndHeight"
  7.             xmlns:lib="clr-namespace:WpfControlsLib;assembly=WpfControlsLib">
  8.     <lib:MyControl Margin="50"></lib:MyControl>
  9. </Window>

Цитировать
Остается еще вариант, что где-то принудительно прописана версия библиотеки. Либо в ссылке на нее в xaml, либо при использовании ее ресурсов с помощью URI pack
Так ведь я готовый проект приложил. Если в нем что-то подобное обнаружится, я сильно удивлюсь.
Страницы: [1] 2 3 ... 10