You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 06:06:03