一些桌子的问题移步去: cad问题小百科_Acad (浩辰可能和桌子具有相同的问题,所以建议你也去看)
若大家对以下问题有更好的解决方案,可以评论中用 #20071编号 的进行评论,以便更好沟通~
#101 命令执行优先级
系统变量: autocompletemode,19
原因是"输入按键时显示建议列表"这个项打钩了,这里首先捕捉的是lisp定义的命令,而不是pgp.
#102 鼠标跳动
系统变量: Dynmode,0
动态输入,这个参数将导致zoom缩放的时候,鼠标会发生跳动,并有一定几率停留在边界.
一定要多用zoom测试,即使不设置这个参数也是有一点几率发生鼠标跳动,只是设置了更容易看见这个问题,并且会产生停留.
#103 gcad.net选择集参数有误.
gcad2019已经解决
//定义选择集选项 PromptSelectionOptions pso = new PromptSelectionOptions { // SingleOnly = true, //不需要空格确认,但是浩辰会变成鼠标单框 SelectEverythingInAperture = true, //鼠标单框 };
#if !HC2019 using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.DatabaseServices.Filters; using Autodesk.AutoCAD.EditorInput; using Autodesk.AutoCAD.Geometry; using Autodesk.AutoCAD.Runtime; using Autodesk.AutoCAD.Colors; using Autodesk.AutoCAD.GraphicsInterface; #else using GrxCAD.DatabaseServices; using GrxCAD.EditorInput; using GrxCAD.Geometry; using GrxCAD.ApplicationServices; using GrxCAD.Runtime; using GrxCAD.Colors; using GrxCAD.GraphicsInterface; #endif using System.Collections.Generic; using System.Linq; namespace JJBoxGstarCad_2019 { public static class Test { //请先先用gcad测试test1和test2,可以看到两段代码的作用是一样的. //然后再用acad测试test1和test2,可以看到test2中的SingleOnly的作用. // SingleOnly = true的作用应该是"选择了图元后不需要空格确认"立马成为一个选择集,而不是成为一个鼠标单选框. // SelectEverythingInAperture = true,为鼠标单框. [CommandMethod("test1", CommandFlags.Modal | CommandFlags.UsePickSet)] public static void Test1() { Database db = HostApplicationServices.WorkingDatabase;//当前的数据库 DocumentCollection doc = Application.DocumentManager; Editor ed = doc.MdiActiveDocument.Editor; //定义选择集选项 PromptSelectionOptions pso = new PromptSelectionOptions { AllowDuplicates = false, //重复选择 // SingleOnly = true, //不需要空格确认,但是浩辰会变成单选 SelectEverythingInAperture = true, //鼠标单框 }; var ssPsr = ed.GetSelection(pso); if (ssPsr.Status != PromptStatus.OK) return; using (Transaction tr = db.TransactionManager.StartTransaction()) { foreach (var id in ssPsr.Value.GetObjectIds())//遍历选择集亮显测试用 { var ent = (Entity)id.GetObject(OpenMode.ForRead); ent.Highlight(); } tr.Commit(); } } [CommandMethod("test2", CommandFlags.Modal | CommandFlags.UsePickSet)] public static void Test2() { Database db = HostApplicationServices.WorkingDatabase;//当前的数据库 DocumentCollection doc = Application.DocumentManager; Editor ed = doc.MdiActiveDocument.Editor; //定义选择集选项 PromptSelectionOptions pso = new PromptSelectionOptions { AllowDuplicates = false, //重复选择 SingleOnly = true, //不需要空格确认,但是浩辰会变成单选 // SelectEverythingInAperture = true, //鼠标单框 }; var ssPsr = ed.GetSelection(pso); if (ssPsr.Status != PromptStatus.OK) return; using (Transaction tr = db.TransactionManager.StartTransaction()) { foreach (var id in ssPsr.Value.GetObjectIds())//遍历选择集亮显测试用 { var ent = (Entity)id.GetObject(OpenMode.ForRead); ent.Highlight(); } tr.Commit(); } } } }
#104 gcad.net组块问题
将导致图元出现不可选择的问题..
这里是一个很严重的问题,我的习惯是先生成图元到内存中,然后进行矩阵移动,最后再添加到数据库内.
acad是允许这样操作的,这样操作也很符合常规思维,
如果不能修复这个问题,那么将要先计算好再生成或者先生成到数据库再进行矩阵变换,
前者编程思维要改变,代码改动很大,后者用户操作时候会发生卡顿等.
#if !HC2019 using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.DatabaseServices.Filters; using Autodesk.AutoCAD.EditorInput; using Autodesk.AutoCAD.Geometry; using Autodesk.AutoCAD.Runtime; #else using GrxCAD.DatabaseServices; using GrxCAD.EditorInput; using GrxCAD.Geometry; using GrxCAD.ApplicationServices; using GrxCAD.Runtime; #endif using System; using static JingJingBoxDD.CadSystem; public class Command_jjline { [CommandMethod("LL", CommandFlags.Modal | CommandFlags.DocExclusiveLock)] public static void LL() { Database db = HostApplicationServices.WorkingDatabase;//当前的数据库 Editor ed = Application.DocumentManager.MdiActiveDocument.Editor; try { PromptPointOptions ppo1 = new PromptPointOptions(" 指定第一点:"); PromptPointResult ppr1 = ed.GetPoint(ppo1);//用户点选 if (ppr1.Status != PromptStatus.OK) { return; } PromptPointOptions ppo2 = new PromptPointOptions(" 指定另一点:") { UseBasePoint = true, BasePoint = ppr1.Value }; PromptPointResult ppr2 = ed.GetPoint(ppo2);//用户点选 if (ppr2.Status != PromptStatus.OK) { return; } //生成xline using (Transaction tr = db.TransactionManager.StartTransaction()) { //块表 BlockTable bt = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForWrite); Line line = new Line { StartPoint = ppr1.Value, EndPoint = ppr2.Value, }; //添加一个新的块表记录,这个记录将存放块参照的所有图元 BlockTableRecord btrNew = new BlockTableRecord { Name = "test", Origin = line.StartPoint }; btrNew.AppendEntity(line); bt.Add(btrNew); tr.AddNewlyCreatedDBObject(btrNew, true);//添加新创建的数据库对象 //新建块参照加入到当前空间 BlockReference br = new BlockReference(line.StartPoint, btrNew.ObjectId) { ScaleFactors = new Scale3d() }; //当前空间的块表记录 BlockTableRecord btrCu = (BlockTableRecord)tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite); var brId = btrCu.AppendEntity(br); //加入块表记录 //※※※※※※※※※※※※※※※※※ tr.AddNewlyCreatedDBObject(br, true); //这句如果在变形之后,将导致浩辰不可以选择块 //计算变换矩阵 Matrix3d mt = Matrix3d.Rotation(Math.PI, Vector3d.ZAxis, line.StartPoint); Entity ent = (Entity)brId.GetObject(OpenMode.ForWrite); ent.TransformBy(mt); tr.AddNewlyCreatedDBObject(br, true); //这句如果在变形之后,将导致浩辰不可以选择块 btrCu.DowngradeOpen(); br.DowngradeOpen(); tr.Commit(); } } catch (System.Exception e) { ed.WriteMessage(e.Message); throw e; } } }
#105 gcad.net新建文字样式
gcad与acad在这个地方不同的是新建文字样式的时候如果用到.TTF字体,直接写字体名称就好了,不能够写"新宋体.TTF"不然浩辰出现以下情况:
看上去是乱码的一坨东西,和文字样式面板的字体名多了个.TTF.SHX(X)
而acad需要写".TTF".后缀名.那么此时是不是没有区分shx和ttf呢?
#106 gcad.net注册表
string KEY = HostApplicationServices.Current.RegistryProductRootKey; //这里浩辰读出来是空字符串
#107 gcad.net注册表
在net4.0及以上工程获取注册表会出现以下问题,而用这在net3.5是没有的..
要将代码改成以下获取:
var copys = Registry.CurrentUser.OpenSubKey(@"Software\Gstarsoft\GstarCAD\R19\zh-CN\");
var b = copys.GetValueNames();
foreach (var item in b)
{
string sz = copys.GetValue(item).ToString();
sz = sz.Remove(sz.IndexOf(' '));
Console.WriteLine(sz);
}
#108 关于浩辰的环境变量获取
https://www.cnblogs.com/JJBox/p/10209541.html
(完)