جستجو کردن

دانلود فایل متنی txt با مختصات. وارد کردن مختصات از یک فایل متنی به طراحی nanoCAD با استفاده از API کلاسیک NET. بارگذاری برنامه در nanoCAD

ما به شما برنامه های اضافی برای اتصال به نرم افزار اتوکد را معرفی می کنیم.

همه برنامه ها به صورت رایگان توزیع می شوند

1. Geo_Tools - مجموعه ای از ابزارها برای توپوگرافی ها، نقشه برداران، به عنوان یک افزودنی برای اتوکد (از سال 2008 اتوکد) کار می کند.

هنگام نصب ابزار، پالت ابزار استاندارد اتوکد با پالت geo_tools جایگزین می شود، کسانی که پالت را با ابزار خود پر کرده اند یا از ابزار استاندارد استفاده می کنند باید در نظر گرفته شود. شروع از نسخه 2014.05.11 21-47 جایگزین نمی شود، اما به پالت های استاندارد اضافه می شود.

اگر مجموعه Geo_Tools را پس از حذف دوست ندارید، همه تغییرات به استاندارد اتوکد باز می گردند. نوار ابزار و نوار geo_tools لمس نمی شوند.

شما می توانید نسخه 2015.07 را از لینک پشتیبانی اضافه شده برای اتوکد 2016 دانلود کنید.

می توانید نسخه 2016.10 را از لینک پشتیبانی اضافه شده برای اتوکد 2017 دانلود کنید.

شما می توانید نسخه 2017.10 را با دنبال کردن پیوند اضافه شده با قابلیت تنظیم لایه واردات نقطه و درج بلوک در نقاط بر اساس توضیحات دانلود کنید.

دستورالعمل نصب و راه اندازی:

1. بسته بندی را باز کنید و داده های دانلود شده را در " سی : \ فایلهای برنامه \ geo_tools \ "

(توجه: برای اتوکد 2014-2016 این پوشه باید به منابع قابل اعتماد اضافه شود: را وارد کنید _گزینه ها در کنسول، در بخش فایل ها -> مکان های مورد اعتماد -> خط اضافه کن "c: \ Program Files \ geo_tools ... ")

2. در کنسول، " _APLOAD "-> رفتن به پوشه" سی : \ فایلهای برنامه \ geo_tools \ "و یک فایل را انتخاب کنید" acaddoc.lsp" -> مطبوعات " دانلود "

2. برنامه برای بارگذاری نقاط در نرم افزار اتوکد.

این برنامه به شما امکان می دهد نقاط را در قالب متن و SDR دانلود کنید.

_APLOAD "-> فایل دانلود شده را انتخاب کنید و مطبوعات " دانلود ".

3. برنامه برای صادرات امتیاز از نرم افزار اتوکد.

این برنامه به شما امکان می دهد نقاط را در قالب متن برای ارسال بعدی به دستگاه ها آپلود کنید.

برای دانلود اپلیکیشن وارد کنسول شوید _APLOAD "-> فایل دانلود شده را انتخاب کنید و مطبوعات " دانلود ".

4. برنامه ای برای ترسیم خودکار انحرافات اتوکد

این برنامه به طراحی طرح های ساخته شده در ساخت و ساز کمک می کند و انحراف نقاط اندازه گیری شده را از موقعیت طراحی ترسیم می کند.

برنامه را دانلود کنید.

یکی از پرطرفدارترین سوالات برنامه نویسی نانوکد این است که چگونه می توانم نقاط را از آن وارد کنم فایل متنی؟" این کار دشواری نیست، اما لازم نیست یک طراح حرفه ای یک برنامه نویس حرفه ای باشد، بنابراین ما این مقاله را به سبک “برای مبتدیان” نوشتیم.

شما می توانید مختصات را با استفاده از هر یک از انواع API موجود در nanoCAD وارد نقشه کنید. ما تصمیم گرفتیم .NET را انتخاب کنیم و دو API نزدیک به هم را با هم مقایسه کنیم: API کلاسیک .NET و متقابل CAD MultiCAD.NET API. زیر برش - قسمت اول - وارد کردن امتیاز در API کلاسیک دات نت.

داده شده:فایل متنی با مختصات X، Y، Z نقاط، یک نقطه در هر خط. مختصات با یک فاصله از هم جدا می شوند، جداکننده قسمت کسری یک نقطه است.

ضروری:برنامه ای بنویسید که با دستور IMPORTCOORDS نام فایل را درخواست کند و مختصات یافت شده را به عنوان اشیاء DatabaseServices.DBPoint در فضای ترسیم فعلی وارد کند. مختصات شی باید در سیستم مختصات کاربر فعلی (UCS) طراحی وارد شود.

ایجاد و راه اندازی یک پروژه کاری
برای ایجاد یک اپلیکیشن به ابزارهای زیر نیاز داریم:
  • nanoCAD (نسخه کمتر از 3.5)
  • Microsoft Visual Studio 2008 (nanoCAD 3.5 - nanoCAD 5.0 ​​از بارگیری برنامه های NET. ساخته شده بر روی NET Framework 3.5 پشتیبانی می کند).
و البته فرض بر این است که شما حداقل کمی از برنامه نویسی #C می دانید. اگر نه، به کتابخانه MSDN خوش آمدید.

یک پروژه جدید در ویژوال استودیو با تنظیمات زیر ایجاد کنید:

  • نوع پروژه: Visual C#
  • الگو: کتابخانه کلاس
بنابراین، برنامه ما یک مجموعه معمولی دات نت (DLL) است که متعاقباً در nanoCAD بارگذاری می شود.
در تب References، کتابخانه‌های زیر را که بخشی از کیت nanoCAD هستند به هم وصل می‌کنیم:
  • hostdbmgd.dll
  • hostmgd.dll
اکنون می توانید با خیال راحت به نوشتن خود برنامه ادامه دهید.
ساختار برنامه
پیاده سازی را می توان به مراحل زیر تقسیم کرد:
  1. دستور IMPORTCOORDS را ثبت کنید.
  2. پایگاه داده طراحی فعلی و ویرایشگر خط فرمان را دریافت کنید.
  3. درخواست نام فایل با مختصات.
  4. باز کردن فایل، خواندن خطوط با مختصات.
  5. اشیاء DBPoint را با مختصات جداگانه ایجاد کنید. مختصات آنها را به سیستم مختصات سفارشی فعلی تبدیل کنید.
  6. اشیاء ایجاد شده را به فضای طراحی فعلی اضافه کنید (فضای مدل یا فضای کاغذ).
برای ثبت دستوری که برنامه ما را در nanoCAD فراخوانی می کند، باید قبل از تعریف متدی که با این دستور فراخوانی می شود، ویژگی را اعلام کرده و نام دستور را مشخص کنید. لطفاً توجه داشته باشید که روش باید یک اصلاح کننده عمومی داشته باشد:

Public void importCoords () (...)
قبل از ادامه، می خواهم توقف کنم و به طور خلاصه به شما بگویم که "پایگاه داده ترسیمی" چیست. فایل .dwg یک پایگاه داده با ساختار سختگیرانه است که عناصر اصلی آن جداول (Symbol Tables) هستند که شامل تمام اشیاء نقاشی می باشد. اینها فقط اشیاء گرافیکی نیستند که در نقاشی می بینیم (خطوط، کمان، نقاط و غیره)، بلکه بسیاری از اشیاء دیگر نیز محتوا و تنظیمات نقاشی را تعیین می کنند. به عنوان مثال، جدول لایه ها شامل تمام لایه هایی است که در نقاشی هستند، جدول نوع خط شامل تمام سبک های خط تعریف شده در نقاشی، جدول UCS - تمام سیستم های مختصاتی ایجاد شده توسط کاربر برای یک نقشه مشخص و غیره است. ، ایجاد یک شیء ترسیمی جدید به معنای ایجاد یک شی پایگاه داده مربوطه است.

بنابراین، بیایید ادامه دهیم. اول از همه، باید مورد فعلی را از بین تمام اسناد باز انتخاب کنیم و پایگاه داده آن را باز کنیم. برای انجام این کار، یک مدیر شی از تمام اسناد باز و سپس با کمک آن پایگاه داده دریافت می کنیم که با آن به کار خود ادامه می دهیم.

DocumentCollection dm = Application.DocumentManager; پایگاه داده db = dm.MdiActiveDocument.Database;
برای اینکه برنامه ما نام فایل را بخواهد، باید یک شی ویرایشگر دریافت کنیم و متدی را فراخوانی کنیم که از نوع خاصی ورودی کاربر را بخواهد (در مورد ما، نام فایل):

// دریافت ویرایشگر خط فرمان Editor ed = dm.MdiActiveDocument.Editor; // شی برای دریافت نتیجه پرس و جو PromptFileNameResult sourceFileName; // درخواست را در خط فرمان چاپ کنید و نتیجه را بگیرید sourceFileName = ed.GetFileNameForOpen ("\ nنام فایل مختصات را وارد کنید:"); if (sourceFileName.Status == PromptStatus.OK) (...)
گرفتن مختصات از یک فایل بسیار آسان است، با استفاده از قابلیت C # برای خواندن فایل های متنی و کار با انواع داده های رشته ای:

// فایل را بخوانید، محتوا را به صورت آرایه ای از رشته ها دریافت کنید خطوط رشته = File.ReadAllLines (sourceFileName.StringResult); // برای هر خط، آرایه ای از زیررشته ها را بنویسید که با فاصله از هم جدا شده اند (زیرا طبق عبارت مشکل، کاراکتر فاصله به عنوان جداکننده مختصات استفاده می شود). // بنابراین، آرایه ای از مختصات را فقط به صورت متن دریافت می کنیم، سپس آنها را به اعداد دوتایی تبدیل می کنیم. سیم رشته; foreach (رشته s در خطوط) (coord = s.Split (نویسه جدید (""))؛ double coordX = Convert.ToDouble (coord)؛ double coordY = Convert.ToDouble (coord)؛ double coordZ = Convert.ToDouble (coord) ))
بیایید به سمت ایجاد اولیه های گرافیکی (Entity) برویم. همانطور که در بالا ذکر شد، برای ایجاد هر شی (نه تنها گرافیکی) که در نقاشی ذخیره می شود، باید به پایگاه داده طراحی، یعنی به شی ظرف مربوطه اضافه شود. بنابراین، برای مثال، تمام لایه ها به عنوان رکورد در جدول لایه ذخیره می شوند که در این مورد یک شی ظرف برای آنها است. ساختار کلیپایگاه داده به شکل زیر است:

اولیه های گرافیکی نه مستقیماً در پایگاه داده، بلکه در ساختار بلوک های جداگانه ذخیره می شوند که به نوبه خود ورودی هایی در Block Table هستند. این بسیار راحت است زیرا چنین مکانیزمی گروه بندی اشیاء را در بلوک های نامگذاری شده و مدیریت آنها به عنوان یک کل آسان می کند. به هر حال، فضای مدل و فضای کاغذ در پایگاه داده نیز با بلوک های جداگانه نشان داده می شود. بنابراین، برای یک گرافیک اولیه، ظرف یک بلوک جداگانه خواهد بود، که به نوبه خود، متعلق به شی والد - جدول بلوک است.

از آنجایی که ما با یک پایگاه داده کار می کنیم، لازم است در صورت بروز خطا در حین اجرای برنامه، از یکپارچگی و محافظت از آن اطمینان حاصل کنیم. برای این منظور از مکانیزم تراکنش استفاده می شود. تراکنش ها تعدادی عملیات را ترکیب می کنند که به طور کلی انجام می شوند: اگر مشکلی پیش بیاید، تراکنش لغو می شود و اشیایی که به عنوان بخشی از این تراکنش ایجاد شده اند به سند اضافه نمی شوند. اگر تمام عملیات با موفقیت انجام شود، تراکنش تایید شده و اشیاء به پایگاه داده اضافه می شوند.

با داشتن این دانش، می‌توانیم با خیال راحت «نقطه» اولیه را با توجه به مختصاتی که از فایل می‌خوانیم به فضای طراحی فعلی اضافه کنیم.

با استفاده از (Transaction tr = db.TransactionManager.StartTransaction ()) (// می توانید جدول بلوک را دور بزنید و بلوک فضای ترسیم فعلی را مستقیماً از شی نشان دهنده پایگاه داده BlockTableRecord btr = (BlockTableRecord) tr.GetObject (db) دریافت کنید. CurrentSpaceId، OpenMode. ForWrite؛ خطوط رشته = File.ReadAllLines (sourceFileName.StringResult)؛ رشته رشته؛ foreach (رشته ها در خطوط) (coord = s.Split (نویسه جدید ("))؛ double coordX = Convert.ToDouble (coord)؛ double coordY = Convert.ToDouble (coord)؛ double coordZ = Convert.ToDouble (coord)؛ DBPoint point = DBPoint جدید (New Point3d (coordX, coordY, coordZ))؛ btr.AppendEntity (نقطه)؛ tr. AddNewlyCreatedDBObject (نقطه، درست)؛ btr.Dispose (); tr.Commit ();)
مشکل عملا حل شده است. یک شرط باید برآورده شود: نقاط اولیه باید در مختصات سیستم مختصات کاربر (UCS) ایجاد شوند. لازم به ذکر است که اولیه ها در پایگاه داده ترسیم در سیستم هماهنگ جهانی (WCS) ذخیره می شوند. بنابراین، هنگام ایجاد اولیه، لازم است که تبدیل را انجام دهید: UCS-> WCS. این با استفاده از یک ماتریس سیستم مختصات سفارشی انجام می شود:

Matrix3d ​​ucsMatrix = ed.CurrentUserCoordinateSystem.
بیایید یک تبدیل اضافه کنیم:

(... point.TransformBy (ucsMatrix.Inverse ())؛ ...)
بنابراین، برنامه به طور کامل نوشته شده است. بعدش چی؟

بارگذاری برنامه در nanoCAD
لذت بخش ترین بخش باقی می ماند - برنامه را در nanoCAD بارگذاری کنید و نتایج کار خود را تحسین کنید. همانطور که به یاد دارید، ما پروژه کاری را به عنوان یک کتابخانه کلاس ایجاد کردیم، بنابراین پس از یک کامپایل موفق، یک اسمبلی با نام پروژه شما ساخته می شود. ما نانوکد را باز می کنیم، در خط فرماندستور NETLOAD را بنویسید، کتابخانه ساخته شده را از لیست انتخاب کرده و بارگذاری کنید. برای اجرای برنامه کافی است نام فرمان IMPORTCOORDS را در خط فرمان وارد کنید.
واردات مختصات نسخه 2.0
ما نسخه اول برنامه را با اضافه کردن چندین نسخه بهبود خواهیم داد توابع مفیدو عناصر رابط کاربری

اگر نسخه اول برنامه یک فایل متنی را که مختصات فقط با فاصله از هم جدا می شوند و از یک نقطه به عنوان جداکننده اعشاری استفاده می شود، "فهم" می شود، اکنون برنامه می تواند مختصات جدا شده توسط یک زبانه، فاصله یا نیم ویرگول را "تشخیص دهد" . در مورد جداکننده اعشاری، اکنون هر دو نقطه و کاما می توانند به عنوان آن عمل کنند، واردات بدون در نظر گرفتن تنظیمات منطقه ای انجام می شود. دستور IMPORTCOORDS اکنون یک دیالوگ مودال برای وارد کردن مختصات باز می کند که در آن کاربر می تواند یک فایل را انتخاب کرده و تنظیمات مورد نظر را برای وارد کردن مختصات مشخص کند.

مکانیسم کلی برای وارد کردن مختصات و ایجاد اولیه‌ها عملاً بدون تغییر باقی می‌ماند، اما اکنون این اتفاق در کلاس فرم رخ می‌دهد، و وظیفه متد کنترل‌کننده فرمان IMPORTCOORDS اکنون تنها به ایجاد یک شی فرم و نمایش فرم بر روی صفحه نمایش به عنوان یک شکل خلاصه می‌شود. گفتگوی مودال:

عمومی void importCoords () ( فرم فرم= ImportForm جدید (); HostMgd.ApplicationServices.Application.ShowModalDialog (فرم)؛ )
پس از آن، کنترل به پنجره فرم واردات مختصات منتقل می شود.

فرم درخواست
فرم درخواست شامل عناصر زیر است:
  • دکمه باز کردن فایل
  • گفتگوی باز کردن فایل
  • گروهی از چک باکس ها برای انتخاب جداکننده مختصات: تب، فاصله، نقطه ویرگول
  • فیلد متنی برای پیش نمایش خطوط تجزیه با مختصات
  • دکمه برای وارد کردن مختصات
  • دکمه لغو
با استفاده از این کنترل‌ها، کاربر اکنون می‌تواند کاراکترهای جداکننده مورد نظر را مشخص کند، نتیجه را در قسمت پیش‌نمایش بررسی کند (مشابه نحوه انجام آن در MS Excel هنگام وارد کردن یک فایل متنی) و وارد کردن مختصات را آغاز کند:

سازگاری با اتوکد
در خاتمه، مایلم به این نکته اشاره کنم که برنامه ای که برای نانوکد نوشته شده است را می توان به راحتی برای کار در اتوکد دوباره کامپایل کرد. برای این کار باید موارد زیر را انجام دهید:
  • در برگه References، کتابخانه های زیر موجود در ObjectARX را به هم متصل کنید:
    • AcCoreMgd.dll
    • AcDbMgd.dll
    • AcMgd.dll
  • یک دستورالعمل کامپایل شرطی به کد برنامه اضافه کنید تا فضاهای نامی را که برای کامپایل برای نانوکد یا اتوکد استفاده می شود، تعریف کنید:
    #اگر ACAD با استفاده از Autodesk.AutoCAD.ApplicationServices. با استفاده از Autodesk.AutoCAD.DatabaseServices. با استفاده از Autodesk.AutoCAD.EditorInput. با استفاده از Autodesk.AutoCAD.Geometry. با استفاده از Autodesk.AutoCAD.Runtime. با استفاده از پلتفرم = Autodesk.AutoCAD. با استفاده از PlatformDb = Autodesk.AutoCAD. #else با استفاده از HostMgd.ApplicationServices؛ با استفاده از HostMgd.EditorInput. با استفاده از Teigha.DatabaseServices. با استفاده از Teigha.Geometry; با استفاده از Teigha.Runtime; با استفاده از Platform = HostMgd; با استفاده از PlatformDb = Tegha; #endif
  • فضای نام مخصوص پلتفرم را در کد خود با نام مستعار تعریف شده در بالا جایگزین کنید: Platform و PlatformDb.
هر دو نسخه از پروژه موجود است

برنامه مختصات نقطه را از فایل های * .txt، * .csv، * بارگیری می کند (وارد می کند). tsv به اتوکد 2000-2013.

فایل با مختصات برای واردات را می توان به صورت دستی یا با استفاده از برنامه GroundArc TSP یا برنامه دیگری تولید کرد.


کار با برنامه:

1. برنامه Point2CAD را اجرا کنید:


اگر فایل حاوی یک خط سرصفحه با نامگذاری ستون باشد (نمونه فایل شماره 1، خط اول "N X Y H" را ببینید)، باید پرچم "Skip the first line (header) in the source file" را تنظیم کنید. اگر این کار انجام نشود، Point2CAD پنجره ای با پیام خطا نمایش می دهد.


به طور پیش فرض، در اتوکد جهت محورها با محورهای ژئودتیک منطبق نیست، برای این مورد باید چک باکس "Swap X و Y (برای وارد کردن صحیح به اتوکد)" را تنظیم کنید.

2. فایل هایی را برای وارد کردن انتخاب کنید:


3. با کلیک بر روی دکمه "تبدیل" داده ها را تبدیل کنید:


پیشرفت فرآیند تبدیل در پنجره پیام ظاهر می شود.

اسناد با پسوند * .src در پوشه با داده های اولیه ظاهر می شوند.

4. برای وارد کردن مختصات نقاط به اتوکد، باید Autocad را راه اندازی کنید و منوی "Tool-> Run Script" را انتخاب کنید.

سپس سند * .src را با مختصات حاصل از برنامه مشخص کنید


سپس دکمه "Open" را فشار دهید. نقاط دارای مختصات از سند بارگذاری شده روی صفحه ظاهر می شوند

(DWG، DXF). متن وارد شده را می توان با استفاده از آن ترجمه کرد استفاده از حافظه های ترجمه () و واژه نامه ها، که باعث صرفه جویی در زمان لازم برای ترجمه می شود. متن ترجمه شده را می توان با استفاده از ابزار TXT2DXF دوباره به نقشه اتوکد وارد کرد. ابزارهای DXF2TXT و TXT2DXF ابزارهای خط فرمان هستند که استفاده از آنها بسیار آسان است و نتایج کارآمدی را ارائه می دهند.

نویسنده برنامه: میکگور(مایکل)، صفحه DXF2TXT و TXT2DXF و تماس با نویسنده

شرایط توزیع : رایگان.

توصیف همراه با جزئیات:

ابزارهای DXF2TXT و TXT2DXF برای صادرات متن از نقشه های اتوکد (DWG, DXF) و وارد کردن متن ترجمه شده به نقشه ها طراحی شده اند. ابزارهای DXF2TXT و TXT2DXF ابزارهای خط فرمان هستند. فرمت DXF 2004 پشتیبانی می شود. تاریخچه برنامه از سال 2006 در لینک زیر شرح داده شده است: Autocad -> Text -> TM -> Autocad.

دستورالعمل استفاده

  1. آماده سازی نقاشی برای ترجمه: در نقاشی ها غیر معمول نیست که یک بلوک متنی بزرگ به بلوک های TEXT جداگانه تقسیم شود. توصیه می شود با استفاده از Express-Utilities آنها را در بلوک های تک MTEXT ترکیب کنید: بلوک های TEXT مورد نیاز را علامت بزنید و سپس Express -> Text -> Convert Text به Mtext. سپس، طراحی باید به فرمت DXF صادر شود. اگر طراحی حاوی اشیایی است که صادرات آنها دشوار است، می توانید تمام متن هایی را که نیاز به ترجمه دارند در یک لایه جمع آوری کنید و فقط آن را به DXF صادر کنید.
  2. فرض کنید نقشه های Machine1.dxf و Machine2.dxf در پوشه C: \ Translate \ ZhadinaGovyadina \ Project200 قرار دارند. فایل های اجرایی ابزارهای dxf2txt.exe و txt2dxf.exe یا باید در یک پوشه یا در پوشه ای که در متغیر سیستم PATH موجود است قرار داده شوند. به عنوان مثال، اگر ابزارهای کمکی در پوشه C: \ Program Files \ DXFUtil قرار دارند، روی آن کلیک راست کنید. "رایانه من" - ویژگی ها - پیشرفته - متغیرهای محیطی... در آن جا، در متغیرهای سیستم یا در متغیرهای کاربر فعلی، متغیر PATH را پیدا می کنیم و در پایان اضافه می کنیم:؛ C: \ Program Files \ DXFUtil (نقطه ویرگول جداکننده بین مسیرهای مختلف در این متغیر است).
  3. خط فرمان را صدا می زنیم: شروع - اجرا - cmd... دستورات زیر را وارد می کنیم و هر کدام را با کلید خاتمه می دهیم وارد:C: cd C: \ Translate \ ZhadinaGovyadina \ Project200
    ج: dxf2txt Machine1.dxf Machine2.dxf

    پس از آن فایل های Machine1.txt و Machine2.txt در این پوشه ظاهر می شوند. در این فایل ها، هر بلوک متنی صادر شده دارای فرمت زیر است:

    (n-mmm)
    متن، متن، متن

    n عددی از 1 تا 4 است که نوع بلوک MTEXT / TEXT / DIMENSION / ATTDEF را نشان می دهد، mmm ترتیب شماره بلوک است. بلوک های انواع مختلف به طور جداگانه شماره گذاری می شوند.

  4. ما فایل های متنی به دست آمده را در برنامه TM مورد علاقه خود ترجمه می کنیم. بنابراین، به عنوان مثال، اگر از Trados استفاده می کنیم، یک فایل متنی را وارد Word می کنیم و سپس به روش استاندارد ادامه می دهیم. ساختار فایل نباید تغییر کند، یعنی. شما نمی توانید علائم بلوک را حذف کنید و انتهای پاراگراف را وارد کنید. وقتی ترجمه آماده شد، آن را به یک فایل متنی برگردانیم. به عنوان مثال، فرض کنید فایل اصلی به شکل زیر است:

    {2-001}
    من یک گربه دارم.
    {1-001}
    من سیب ها را دوست دارم.

    ترجمه باید کاملاً مشابه باشد:

    {2-001}
    من یک گربه دارم.
    {1-001}
    من سیب ها را دوست دارم.

  5. پس از آن، ترجمه را دوباره به نقاشی وارد می کنیم. فرض کنید فایل های متنی ترجمه شده دارای نام های مشابه Machine1.txt و Machine2.txt هستند. سپس در خط فرمان، دستور را تایپ کنید:txt2dxf Machine1.dxf Machine2.dxf

    پس از آن، فایل های Machine1_TR.dxf و Machine2_TR.dxf در پوشه فعلی ظاهر می شوند (نقشه های اصلی Machine1.dxf و Machine2.dxf ذخیره شده اند). اگر نام فایل‌ها متفاوت باشد، مثلا Machine1_RU.txt و Machine2_RU.txt، فایل‌های DXF که متن در آن وارد می‌شود باید در فایل‌هایی با نام‌های مشابه Machine1_RU.dxf و Machine2_RU.dxf کپی شوند و پس از وارد کردن، فایل های Machine1_RU_TR ایجاد خواهند شد. dxf و Machine2_RU_TR.dxf.

    اگر همه چیز به درستی انجام شده باشد، بلوک های متن ترجمه شده دقیقاً در جایی ظاهر می شوند که متون اصلی بودند. اگر بلوک‌ها گم شدند، به دنبال خطوط اضافی در فایل متنی همراه با ترجمه بگردید.

  • CAD / CAM
  • یکی از پرطرفدارترین سوالات برنامه نویسی نانوکد این است که "چگونه می توانم نقاط را از یک فایل متنی وارد کنم؟" این کار دشواری نیست، اما لازم نیست یک طراح حرفه ای یک برنامه نویس حرفه ای باشد، بنابراین ما این مقاله را به سبک “برای مبتدیان” نوشتیم.

    شما می توانید مختصات را با استفاده از هر یک از انواع API موجود در nanoCAD وارد نقشه کنید. ما تصمیم گرفتیم .NET را انتخاب کنیم و دو API نزدیک به هم را با هم مقایسه کنیم: API کلاسیک .NET و متقابل CAD MultiCAD.NET API. زیر برش - قسمت اول - وارد کردن امتیاز در API کلاسیک دات نت.

    داده شده:فایل متنی با مختصات X، Y، Z نقاط، یک نقطه در هر خط. مختصات با یک فاصله از هم جدا می شوند، جداکننده قسمت کسری یک نقطه است.

    ضروری:برنامه ای بنویسید که با دستور IMPORTCOORDS نام فایل را درخواست کند و مختصات یافت شده را به عنوان اشیاء DatabaseServices.DBPoint در فضای ترسیم فعلی وارد کند. مختصات شی باید در سیستم مختصات کاربر فعلی (UCS) طراحی وارد شود.

    ایجاد و راه اندازی یک پروژه کاری
    برای ایجاد یک اپلیکیشن به ابزارهای زیر نیاز داریم:
    • nanoCAD (نسخه کمتر از 3.5)
    • Microsoft Visual Studio 2008 (nanoCAD 3.5 - nanoCAD 5.0 ​​از بارگیری برنامه های NET. ساخته شده بر روی NET Framework 3.5 پشتیبانی می کند).
    و البته فرض بر این است که شما حداقل کمی از برنامه نویسی #C می دانید. اگر نه، به کتابخانه MSDN خوش آمدید.

    یک پروژه جدید در ویژوال استودیو با تنظیمات زیر ایجاد کنید:

    • نوع پروژه: Visual C#
    • الگو: کتابخانه کلاس
    بنابراین، برنامه ما یک مجموعه معمولی دات نت (DLL) است که متعاقباً در nanoCAD بارگذاری می شود.
    در تب References، کتابخانه‌های زیر را که بخشی از کیت nanoCAD هستند به هم وصل می‌کنیم:
    • hostdbmgd.dll
    • hostmgd.dll
    اکنون می توانید با خیال راحت به نوشتن خود برنامه ادامه دهید.
    ساختار برنامه
    پیاده سازی را می توان به مراحل زیر تقسیم کرد:
    1. دستور IMPORTCOORDS را ثبت کنید.
    2. پایگاه داده طراحی فعلی و ویرایشگر خط فرمان را دریافت کنید.
    3. درخواست نام فایل با مختصات.
    4. باز کردن فایل، خواندن خطوط با مختصات.
    5. اشیاء DBPoint را با مختصات جداگانه ایجاد کنید. مختصات آنها را به سیستم مختصات سفارشی فعلی تبدیل کنید.
    6. اشیاء ایجاد شده را به فضای طراحی فعلی اضافه کنید (فضای مدل یا فضای کاغذ).
    برای ثبت دستوری که برنامه ما را در nanoCAD فراخوانی می کند، باید قبل از تعریف متدی که با این دستور فراخوانی می شود، ویژگی را اعلام کرده و نام دستور را مشخص کنید. لطفاً توجه داشته باشید که روش باید یک اصلاح کننده عمومی داشته باشد:

    Public void importCoords () (...)
    قبل از ادامه، می خواهم توقف کنم و به طور خلاصه به شما بگویم که "پایگاه داده ترسیمی" چیست. فایل .dwg یک پایگاه داده با ساختار سختگیرانه است که عناصر اصلی آن جداول (Symbol Tables) هستند که شامل تمام اشیاء نقاشی می باشد. اینها فقط اشیاء گرافیکی نیستند که در نقاشی می بینیم (خطوط، کمان، نقاط و غیره)، بلکه بسیاری از اشیاء دیگر نیز محتوا و تنظیمات نقاشی را تعیین می کنند. به عنوان مثال، جدول لایه ها شامل تمام لایه هایی است که در نقاشی هستند، جدول نوع خط شامل تمام سبک های خط تعریف شده در نقاشی، جدول UCS - تمام سیستم های مختصاتی ایجاد شده توسط کاربر برای یک نقشه مشخص و غیره است. ، ایجاد یک شیء ترسیمی جدید به معنای ایجاد یک شی پایگاه داده مربوطه است.

    بنابراین، بیایید ادامه دهیم. اول از همه، باید مورد فعلی را از بین تمام اسناد باز انتخاب کنیم و پایگاه داده آن را باز کنیم. برای انجام این کار، یک مدیر شی از تمام اسناد باز و سپس با کمک آن پایگاه داده دریافت می کنیم که با آن به کار خود ادامه می دهیم.

    DocumentCollection dm = Application.DocumentManager; پایگاه داده db = dm.MdiActiveDocument.Database;
    برای اینکه برنامه ما نام فایل را بخواهد، باید یک شی ویرایشگر دریافت کنیم و متدی را فراخوانی کنیم که از نوع خاصی ورودی کاربر را بخواهد (در مورد ما، نام فایل):

    // دریافت ویرایشگر خط فرمان Editor ed = dm.MdiActiveDocument.Editor; // شی برای دریافت نتیجه پرس و جو PromptFileNameResult sourceFileName; // درخواست را در خط فرمان چاپ کنید و نتیجه را بگیرید sourceFileName = ed.GetFileNameForOpen ("\ nنام فایل مختصات را وارد کنید:"); if (sourceFileName.Status == PromptStatus.OK) (...)
    گرفتن مختصات از یک فایل بسیار آسان است، با استفاده از قابلیت C # برای خواندن فایل های متنی و کار با انواع داده های رشته ای:

    // فایل را بخوانید، محتوا را به صورت آرایه ای از رشته ها دریافت کنید خطوط رشته = File.ReadAllLines (sourceFileName.StringResult); // برای هر خط، آرایه ای از زیررشته ها را بنویسید که با فاصله از هم جدا شده اند (زیرا طبق عبارت مشکل، کاراکتر فاصله به عنوان جداکننده مختصات استفاده می شود). // بنابراین، آرایه ای از مختصات را فقط به صورت متن دریافت می کنیم، سپس آنها را به اعداد دوتایی تبدیل می کنیم. سیم رشته; foreach (رشته s در خطوط) (coord = s.Split (نویسه جدید (""))؛ double coordX = Convert.ToDouble (coord)؛ double coordY = Convert.ToDouble (coord)؛ double coordZ = Convert.ToDouble (coord) ))
    بیایید به سمت ایجاد اولیه های گرافیکی (Entity) برویم. همانطور که در بالا ذکر شد، برای ایجاد هر شی (نه تنها گرافیکی) که در نقاشی ذخیره می شود، باید به پایگاه داده طراحی، یعنی به شی ظرف مربوطه اضافه شود. بنابراین، برای مثال، تمام لایه ها به عنوان رکورد در جدول لایه ذخیره می شوند که در این مورد یک شی ظرف برای آنها است. ساختار کلی پایگاه داده به این صورت است:

    اولیه های گرافیکی نه مستقیماً در پایگاه داده، بلکه در ساختار بلوک های جداگانه ذخیره می شوند که به نوبه خود ورودی هایی در Block Table هستند. این بسیار راحت است زیرا چنین مکانیزمی گروه بندی اشیاء را در بلوک های نامگذاری شده و مدیریت آنها به عنوان یک کل آسان می کند. به هر حال، فضای مدل و فضای کاغذ در پایگاه داده نیز با بلوک های جداگانه نشان داده می شود. بنابراین، برای یک گرافیک اولیه، ظرف یک بلوک جداگانه خواهد بود، که به نوبه خود، متعلق به شی والد - جدول بلوک است.

    از آنجایی که ما با یک پایگاه داده کار می کنیم، لازم است در صورت بروز خطا در حین اجرای برنامه، از یکپارچگی و محافظت از آن اطمینان حاصل کنیم. برای این منظور از مکانیزم تراکنش استفاده می شود. تراکنش ها تعدادی عملیات را ترکیب می کنند که به طور کلی انجام می شوند: اگر مشکلی پیش بیاید، تراکنش لغو می شود و اشیایی که به عنوان بخشی از این تراکنش ایجاد شده اند به سند اضافه نمی شوند. اگر تمام عملیات با موفقیت انجام شود، تراکنش تایید شده و اشیاء به پایگاه داده اضافه می شوند.

    با داشتن این دانش، می‌توانیم با خیال راحت «نقطه» اولیه را با توجه به مختصاتی که از فایل می‌خوانیم به فضای طراحی فعلی اضافه کنیم.

    با استفاده از (Transaction tr = db.TransactionManager.StartTransaction ()) (// می توانید جدول بلوک را دور بزنید و بلوک فضای ترسیم فعلی را مستقیماً از شی نشان دهنده پایگاه داده BlockTableRecord btr = (BlockTableRecord) tr.GetObject (db) دریافت کنید. CurrentSpaceId، OpenMode. ForWrite؛ خطوط رشته = File.ReadAllLines (sourceFileName.StringResult)؛ رشته رشته؛ foreach (رشته ها در خطوط) (coord = s.Split (نویسه جدید ("))؛ double coordX = Convert.ToDouble (coord)؛ double coordY = Convert.ToDouble (coord)؛ double coordZ = Convert.ToDouble (coord)؛ DBPoint point = DBPoint جدید (New Point3d (coordX, coordY, coordZ))؛ btr.AppendEntity (نقطه)؛ tr. AddNewlyCreatedDBObject (نقطه، درست)؛ btr.Dispose (); tr.Commit ();)
    مشکل عملا حل شده است. یک شرط باید برآورده شود: نقاط اولیه باید در مختصات سیستم مختصات کاربر (UCS) ایجاد شوند. لازم به ذکر است که اولیه ها در پایگاه داده ترسیم در سیستم هماهنگ جهانی (WCS) ذخیره می شوند. بنابراین، هنگام ایجاد اولیه، لازم است که تبدیل را انجام دهید: UCS-> WCS. این با استفاده از یک ماتریس سیستم مختصات سفارشی انجام می شود:

    Matrix3d ​​ucsMatrix = ed.CurrentUserCoordinateSystem.
    بیایید یک تبدیل اضافه کنیم:

    (... point.TransformBy (ucsMatrix.Inverse ())؛ ...)
    بنابراین، برنامه به طور کامل نوشته شده است. بعدش چی؟

    بارگذاری برنامه در nanoCAD
    لذت بخش ترین بخش باقی می ماند - برنامه را در nanoCAD بارگذاری کنید و نتایج کار خود را تحسین کنید. همانطور که به یاد دارید، ما پروژه کاری را به عنوان یک کتابخانه کلاس ایجاد کردیم، بنابراین پس از یک کامپایل موفق، یک اسمبلی با نام پروژه شما ساخته می شود. nanoCAD را باز کنید، دستور NETLOAD را در خط فرمان بنویسید، کتابخانه ساخته شده را از لیست انتخاب کنید و بارگذاری کنید. برای اجرای برنامه کافی است نام فرمان IMPORTCOORDS را در خط فرمان وارد کنید.
    واردات مختصات نسخه 2.0
    ما نسخه اول برنامه را با افزودن چندین عملکرد مفید و عناصر رابط کاربری بهبود خواهیم داد.

    اگر نسخه اول برنامه یک فایل متنی را که مختصات فقط با فاصله از هم جدا می شوند و از یک نقطه به عنوان جداکننده اعشاری استفاده می شود، "فهم" می شود، اکنون برنامه می تواند مختصات جدا شده توسط یک زبانه، فاصله یا نیم ویرگول را "تشخیص دهد" . در مورد جداکننده اعشاری، اکنون هر دو نقطه و کاما می توانند به عنوان آن عمل کنند، واردات بدون در نظر گرفتن تنظیمات منطقه ای انجام می شود. دستور IMPORTCOORDS اکنون یک دیالوگ مودال برای وارد کردن مختصات باز می کند که در آن کاربر می تواند یک فایل را انتخاب کرده و تنظیمات مورد نظر را برای وارد کردن مختصات مشخص کند.

    مکانیسم کلی برای وارد کردن مختصات و ایجاد اولیه‌ها عملاً بدون تغییر باقی می‌ماند، اما اکنون این اتفاق در کلاس فرم رخ می‌دهد، و وظیفه متد کنترل‌کننده فرمان IMPORTCOORDS اکنون تنها به ایجاد یک شی فرم و نمایش فرم بر روی صفحه نمایش به عنوان یک شکل خلاصه می‌شود. گفتگوی مودال:

    Public void importCoords () (فرم = ImportForm جدید (); HostMgd.ApplicationServices.Application.ShowModalDialog (فرم)؛)
    پس از آن، کنترل به پنجره فرم واردات مختصات منتقل می شود.

    فرم درخواست
    فرم درخواست شامل عناصر زیر است:
    • دکمه باز کردن فایل
    • گفتگوی باز کردن فایل
    • گروهی از چک باکس ها برای انتخاب جداکننده مختصات: تب، فاصله، نقطه ویرگول
    • فیلد متنی برای پیش نمایش خطوط تجزیه با مختصات
    • دکمه برای وارد کردن مختصات
    • دکمه لغو
    با استفاده از این کنترل‌ها، کاربر اکنون می‌تواند کاراکترهای جداکننده مورد نظر را مشخص کند، نتیجه را در قسمت پیش‌نمایش بررسی کند (مشابه نحوه انجام آن در MS Excel هنگام وارد کردن یک فایل متنی) و وارد کردن مختصات را آغاز کند:

    سازگاری با اتوکد
    در خاتمه، مایلم به این نکته اشاره کنم که برنامه ای که برای نانوکد نوشته شده است را می توان به راحتی برای کار در اتوکد دوباره کامپایل کرد. برای این کار باید موارد زیر را انجام دهید:
    • در برگه References، کتابخانه های زیر موجود در ObjectARX را به هم متصل کنید:
      • AcCoreMgd.dll
      • AcDbMgd.dll
      • AcMgd.dll
    • یک دستورالعمل کامپایل شرطی به کد برنامه اضافه کنید تا فضاهای نامی را که برای کامپایل برای نانوکد یا اتوکد استفاده می شود، تعریف کنید:
      #اگر ACAD با استفاده از Autodesk.AutoCAD.ApplicationServices. با استفاده از Autodesk.AutoCAD.DatabaseServices. با استفاده از Autodesk.AutoCAD.EditorInput. با استفاده از Autodesk.AutoCAD.Geometry. با استفاده از Autodesk.AutoCAD.Runtime. با استفاده از پلتفرم = Autodesk.AutoCAD. با استفاده از PlatformDb = Autodesk.AutoCAD. #else با استفاده از HostMgd.ApplicationServices؛ با استفاده از HostMgd.EditorInput. با استفاده از Teigha.DatabaseServices. با استفاده از Teigha.Geometry; با استفاده از Teigha.Runtime; با استفاده از Platform = HostMgd; با استفاده از PlatformDb = Tegha; #endif
    • فضای نام مخصوص پلتفرم را در کد خود با نام مستعار تعریف شده در بالا جایگزین کنید: Platform و PlatformDb.
    هر دو نسخه از پروژه موجود است