AutoLISP代码实现pline转Civil 3D Feature Line遇弹窗阻塞问题求助
问题分析
你的代码执行到Feature Line创建窗口时停止,核心原因是AeccCreateFeatureLines命令弹出对话框后,普通的command/vl-cmdf无法自动完成对话框交互,同时原有流程里的实体获取逻辑存在不可靠性,多段线转样条再转回的步骤也可以优化。
解决方案
- 采用无交互命令模式:Civil 3D的
AeccCreateFeatureLines支持通过命令行参数跳过对话框,直接完成创建,避免脚本被弹窗中断。 - 简化实体处理流程:无需绕路转样条再转回多段线,直接基于目标多段线操作(若需要样条拟合形状,可保留转换但优化实体引用)。
- 可靠获取实体:用
vlax-ename->vla-object替代entlast,确保实体引用在复杂绘图环境下的准确性。
修正后的代码
(defun c:plineToFeatureLine (/ ent) ;; 选择目标多段线 (setq ent (car (entsel "\n选择一条多段线: "))) (if ent (progn ;; 可选:将多段线转为样条拟合(不需要则删除以下两行) (command "_.pedit" ent "_s" "") (command "_.splinedit" ent "_p" "0" "") ;; 无交互创建Feature Line:跳过对话框,自动完成转换 (command "AeccCreateFeatureLines" "_p" ent "_AutoAdd" "_Yes" "") (princ "\nFeature Line创建完成。") ) (princ "\n未选择有效多段线。") ) (princ) )
关键说明
- 无交互参数解析:
_AutoAdd参数自动将选中多段线加入创建队列,_Yes确认创建,全程不弹出对话框,保证脚本连续执行。 - 实体引用优化:直接使用
entsel返回的实体名,避免entlast在多实体场景下获取错误对象。 - 可选步骤说明:如果不需要样条拟合的多段线形状,直接删除
pedit和splinedit相关代码即可。
内容的提问来源于stack exchange,提问作者Wojciech K
相关产品推荐
相关产品推荐

