首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >选择折线时出现Autocad错误" Error : bad arguement : lselsetp nil“

选择折线时出现Autocad错误" Error : bad arguement : lselsetp nil“
EN

Stack Overflow用户
提问于 2012-09-20 09:03:32
回答 1查看 1.7K关注 0票数 1

我当前正在尝试在两个块(first_block,second_block)之间运行一条多段线,该多段线沿着另一条多段线运行,在操作结束时,将调用一个插入函数,该函数用起始块和结束块的详细信息填充注释块(cable_name_tag)。

此多段线将横切其他块,并且通常需要与底层多段线(cable_ducting)并行运行,因此用户需要选择多段线的适当部分来删除注释,因为空间有时是有限的。

我已经注意到,如果我注释掉second_block并提供一个硬编码值,则ssget函数可以正常工作,因此我可以合理地确定问题出在该代码中的first_block和second_block的语法或处理上。

代码语言:javascript
运行
复制
(defun c:cable ()
  (vl-load-com)
  (setvar "clayer" "cable layer")
  (setvar "celtype" "bylayer")
  (setvar "osmode" 515)
  (command "_.pline"
           (getpoint))
  (while (> (getvar ' cmdactive) 0)
    (command pause)
    (princ "\npress enter to finish:"))
  (setq elst
        (entsel "\nselect cable segment: "))
  (setq ename
        (car elst))
  (setq pt
        (cadr elst))
  (setq annopt pt)
  (setq pt
        (vlax-curve-getclosestpointto ename pt))
  (setq param
        (vlax-curve-getparamatpoint ename pt))
  (setq preparam
        (fix param))
  (setq postparam
        (1+ preparam))
  (list (setq pt1
              (vlax-curve-getpointatparam ename preparam))
        (setq pt2
              (vlax-curve-getpointatparam ename postparam)))
  (setq cable
        (entlast))
  (setq cable_start
        (vlax-curve-getstartparam cable))
  (setq cable_start_point
        (vlax-curve-getstartpoint cable))
  (setq cable_end_point
        (vlax-curve-getendpoint cable))
  (setq cable_end
        (angtos (angle '(0 0)
                       (vlax-curve-getfirstderiv cable 0.0))))
  (setq first_block
        (ssget "_c" cable_start_point cable_end_point
               (list (cons 0 "insert")
                     (cons 2 "first_block"))))
  (setq second_block
        (ssget "_c" cable_start_point cable_end_point
               (list (cons 0 "insert")
                     (cons 2 "second_block"))))
  (setq end_cable
        (ssname second_block 0))
  (setq start_cable
        (ssname first_block 0))
  (setq $end_cable
        (vla-get-textstring
         (cadr (vlax-safearray->list
                (variant-value
                 (vla-getattributes
                  (vlax-ename->vla-object end_cable)))))))
  (setq $start_cable
        (vla-get-textstring
         (cadr (vlax-safearray->list
                (variant-value
                 (vla-getattributes
                  (vlax-ename->vla-object start_cable)))))))
  (setq cable_name
        (vlax-curve-getendparam cable))
  (command ; insert cable param
           "-insert"
           "cable_name_tag"
           annopt
           "1"
           "1"
           cable_angle
           cable_name
           $start_cable
           $end_cable
           "144"
           cable_length))

在这个问题上,我被困在角落里,任何人都可以提供的任何帮助,建议或指点,我都将不胜感激。

感谢大家抽出宝贵的时间。

EN

回答 1

Stack Overflow用户

发布于 2012-09-21 09:35:44

为什么不直接使用(entlast)来获取刚刚创建的实体呢?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12504861

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档