C#调用Tekla Structures API自定义类无法转换为ModelObject报错求解
问题解决方法
错误原因
Cannot implicitly convert type 'test_class.Form1.CreateBeam' to 'Tekla.Structures.Model.ModelObject'
Fitting类的Father属性要求传入的对象必须是Tekla.Structures.Model.ModelObject类型的子类实例,你自定义的CreateBeam是独立的普通类,和Tekla的ModelObject没有继承关系,同时你类内部创建的真实Beam对象是方法内的局部变量,外部无法访问,所以直接赋值自定义类实例会报类型转换错误。
修复方案
方案1:暴露内部真实Beam实例(快速修复)
修改CreateBeam类,把创建的Tekla原生Beam对象设为公共属性供外部调用:
public class CreateBeam { // 新增公共属性,存储Tekla原生梁实例 public Beam TargetBeam { get; private set; } public void BeamStartPointEndPoint(Point Point1, Point Point2) { TargetBeam = new Beam(); TargetBeam.StartPoint = Point1; TargetBeam.EndPoint = Point2; TargetBeam.Finish = "PAINT"; TargetBeam.Profile.ProfileString = "PL10*200"; TargetBeam.Insert(); } }
然后修改赋值Father的代码行:
EndFit_1.Father = MyBeam.TargetBeam;
方案2:自定义类继承Tekla原生Beam(更规范的封装)
让你的CreateBeam直接继承Tekla的Beam类,本身就属于ModelObject子类,可以直接赋值给Father属性:
public class CreateBeam : Beam { // 封装初始化方法 public void InitByStartEndPoint(Point Point1, Point Point2) { this.StartPoint = Point1; this.EndPoint = Point2; this.Finish = "PAINT"; this.Profile.ProfileString = "PL10*200"; this.Insert(); } }
调用的时候直接用实例本身赋值即可:
CreateBeam MyBeam = new CreateBeam(); MyBeam.InitByStartEndPoint(Point1, Point2); // 后面直接赋值无需转类型 EndFit_1.Father = MyBeam;
两种方案都可以解决类型转换的问题,方案2更符合Tekla API的使用规范,后续对梁的其他操作也可以直接在自定义类里扩展。
内容的提问来源于stack exchange,提问作者M___KH
相关产品推荐
相关产品推荐

