.NET

.NET

Reply
Distinguished Contributor
RolandF
Posts: 172
Registered: ‎11-19-2003
Message 1 of 2 (232 Views)

Error System.NullReferenceException in code - HELP!!!

232 Views, 1 Replies
06-08-2005 06:30 AM
What is wrong with this code, i allways get this error:
"System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.NullReferenceException: Object reference not set to an instance of an object.
at RSNNAcadApp.ExtendedCommands.Distance.DistanceOnCurve()"

[code]#region Using directives

using System;
//using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.Globalization;

using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;

using System.Runtime.InteropServices;

#endregion

namespace RSNNAcadApp.ExtendedCommands
{
public class Distance
{
//this is an undocumented api exported from acad.exe. Use it at your own risk.
//
// Setting this flag tells AutoCAD to display the last string output to the command line
//in the Dynamic Input prompt window (one time only.)
[DllImport("acad.exe", EntryPoint = "?acedSetDynInputDisplayMessage@@YA_N_N@Z")]
private static extern bool acedSetDynInputDisplayMessage(bool displayMessageOnce);

private int Luprec = Application.DocumentManager.MdiActiveDocument.Database.Luprec;

private Curve CurveObj;
private Point3d FirstPoint;
private Point3d SecondPoint;

private double DistFP;
private double DistSP;
private double Dist;
private string DistFPPrompt;
private string DistSPPrompt;
private string DistPrompt;

public Distance()
{
}

[CommandMethod("AbstandKurve", CommandFlags.Modal)]
public void DistanceOnCurve()
{

Database db = HostApplicationServices.WorkingDatabase;
Transaction myT = db.TransactionManager.StartTransaction();
Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
try
{
PromptEntityOptions entopts = new PromptEntityOptions("Objekt zeigen");
entopts.Message = "Objekt zeigen";
PromptEntityResult ent = null;
bool RightObject = false;

while (!RightObject)
{
while (ent.Status == PromptStatus.Error)
{
ent = ed.GetEntity(entopts);
}

if (ent.Status == PromptStatus.Cancel)
return;

if (ent.Status == PromptStatus.OK)
{
ObjectId entid1 = ent.ObjectId;
Entity tmpEnt = (Entity)myT.GetObject(entid1, OpenMode.ForRead);
CurveObj = tmpEnt as Curve;
if (CurveObj != null)
{
RightObject = true;

//highlight the entity
ObjectId[] ids = new ObjectId[1];
ids[0] = entid1;

SubentityId index = new SubentityId(SubentityType.Edge, 0);
FullSubentityPath path = new FullSubentityPath(ids, index);

tmpEnt.Highlight(path, true);

bool PromptCancel = false;


PromptPointOptions FPOption = new PromptPointOptions("Ersten Punkt angeben");
FPOption.Message = "Anfangspunkt zeigen";
PromptPointResult FPResult = null;

while (FPResult.Status == PromptStatus.Error)
{
FPResult = ed.GetPoint(FPOption);
FPOption.Message = "\nFalsche Eingabe. Richtung zeigen";
}

if (FPResult.Status == PromptStatus.Cancel)
PromptCancel = true;

if (FPResult.Status == PromptStatus.OK)
{
Point3d tmpStartPoint = FPResult.Value;
FirstPoint = CurveObj.GetClosestPointTo(tmpStartPoint, false);
DistFP = CurveObj.GetDistAtPoint(FirstPoint);
}

if (!PromptCancel)
{
PromptPointOptions SPOption = new PromptPointOptions("Zweiten Punkt angeben");
SPOption.BasePoint = FirstPoint;
SPOption.UseBasePoint = true;
SPOption.UseDashedLine = true;
SPOption.Message = "Richtung zeigen";
PromptPointResult SPResult = null;

while (SPResult.Status == PromptStatus.Error)
{
SPResult = ed.GetPoint(SPOption);
SPOption.Message = "\nFalsche Eingabe. Richtung zeigen";
}

if (SPResult.Status == PromptStatus.Cancel)
return;

if (SPResult.Status == PromptStatus.OK &&
FPResult.Status == PromptStatus.OK)
{
Point3d tmpDirectionPoint = SPResult.Value;
SecondPoint = CurveObj.GetClosestPointTo(tmpDirectionPoint, false);
DistSP = CurveObj.GetDistAtPoint(SecondPoint);
}

}

tmpEnt.Unhighlight(path, false);

}
}
}
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-us");
DistFPPrompt = DistFP.ToString("F" + Luprec.ToString());
DistSPPrompt = DistSP.ToString("F" + Luprec.ToString());
Dist = Math.Abs(DistSP - DistFP);
DistPrompt = Dist.ToString("F" + Luprec.ToString());

ed.WriteMessage(String.Format("\rAbstand = {0}, erster Punkt = {1}, zweiter Punkt = {2}",
DistPrompt, DistFPPrompt, DistSPPrompt));
acedSetDynInputDisplayMessage(true);

myT.Commit();
}
catch (System.Exception)
{
myT.Commit();
throw;
}

finally
{
myT.Dispose();
}

}

}
}[/code]
Distinguished Contributor
RolandF
Posts: 172
Registered: ‎11-19-2003
Message 2 of 2 (232 Views)

Re: Error System.NullReferenceException in code - HELP!!!

06-08-2005 07:39 AM in reply to: RolandF
I've got it, it was just a silly mistake.

Changed:
[code] while (ent.Status == PromptStatus.Error)
{
ent = ed.GetEntity(entopts);
}[/code]
To:
[code] do
{
ent = ed.GetEntity(entopts);
} while (ent.Status == PromptStatus.Error);[/code]

and so on.

Roland
Post to the Community

Have questions about Autodesk products? Ask the community.

New Post
Announcements
Do you have 60 seconds to spare? The Autodesk Community Team is revamping our site ranking system and we want your feedback! Please click here to launch the 5 question survey. As always your input is greatly appreciated.