陨落 发表于 2024-5-23 15:05:49

ai写lisp程序的新进展,几乎可以直接用了。

本帖最后由 陨落 于 2024-5-23 15:08 编辑

先看效果:

User:
帮我用autolisp写一个函数,提示用户选择TEXT图元,然后在被选中的TEXT前增加一个前缀“mypref"

回复:
(defun c:add-text-prefix ()
"在用户选择的文本前添加前缀 'mypref'"
(vl-load-com) ; 加载 ActiveX 支持函数

(setq textObj (car (entsel "\n请选择一个文本对象:"))) ; 选择一个文本对象

(if (not textObj)
    (princ "\n没有选择任何文本对象!")
    (progn
      (setq textData (entget textObj))
      (setq oldText (cdr (assoc 1 textData))) ; 获取当前文本内容
      (setq newText (strcat "mypref" oldText)) ; 添加前缀
      (setq textData (subst (cons 1 newText) (assoc 1 textData) textData)) ; 更新文本内容
      (entmod textData) ; 修改文本对象
      (princ) ; 清空命令行
    )
)
)

(c:add-text-prefix) ; 调用函数添加前缀

User:帮我用autolisp写一个函数,提示用户选择CIRCLE图元,然后将选中的图元向右复制3次,每次复制的时候圆的直径增加100,复制后的圆与上一个圆刚好相切。
回复:
(defun c:copy-circle-with-diameter-increase ()
"选择一个圆,然后将它向右复制 3 次,每次复制时直径增加 100,复制后的圆与上一个圆相切。"
(vl-load-com) ; 加载 ActiveX 支持函数


(setq circleObj (car (entsel "\n请选择一个圆:"))) ; 选择一个圆


(if (not circleObj)
    (princ "\n没有选择任何圆!")
    (progn
      (setq circleData (entget circleObj))
      (setq centerPoint (cdr (assoc 10 circleData))) ; 获取圆心点
      (setq diameter (cdr (assoc 40 circleData))) ; 获取圆的直径
      (setq currentX (car centerPoint)) ; 获取圆心点的 X 坐标


      (repeat 3
      (setq newDiameter (+ diameter 100)) ; 新圆的直径
      (setq newCenterPoint (list (+ currentX (/ newDiameter 2)) (cadr centerPoint))) ; 新圆心点
      (setq newCircle (vla-addcircle (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object)))
                                    (vlax-3D-point newCenterPoint)
                                    (/ newDiameter 2))) ; 创建新圆
      (setq currentX (+ currentX newDiameter)) ; 更新圆心点的 X 坐标
      )


      (princ) ; 清空命令行
    )
)
)


(c:copy-circle-with-diameter-increase) ; 调用函数执行复制

User:写一个autolisp函数,让用户选择直线(line)和多段线(lwpolyline),并返回所选线的总长度。
回复:(defun get-total-line-length ()
"获取用户选择的直线和多段线的总长度"
(vl-load-com) ; 加载 ActiveX 支持函数


(setq ss (ssget "_X" '((0 . "LINE") (0 . "LWPOLYLINE")))) ; 选择所有直线和多段线-----此处存在错误
(if (not ss)
    (princ "\n没有选择任何直线或多段线!")
    (progn
      (setq totalLength 0.0)
      (setq i 0)
      (while (< i (sslength ss))
      (setq ent (ssname ss i))
      (setq entType (cdr (assoc 0 (entget ent))))
      (if (equal entType "LINE")
          (setq totalLength (+ totalLength (distance (cdr (assoc 10 (entget ent))) (cdr (assoc 11 (entget ent))))))
          (if (equal entType "LWPOLYLINE")
            (progn
            (setq lwPolyObj (vlax-ename->vla-object ent))
            (setq totalLength (+ totalLength (vla-get-length lwPolyObj)))
            )
          )
      )
      (setq i (+ i 1))
      )
      (princ (strcat "\n选择的直线和多段线的总长度为: " (rtos totalLength 2 4)))
    )
)
(princ)
)


(get-total-line-length) ; 调用函数获取总长度


以上的代码都是由ai一次生成,未经过任何修改
第二第三个程序都存在一些小问题,但是基本都可以直接跑,或者只需要很少的改动
由于都只让ai回答了一次,功能上可能还有些欠缺
综上,可以看出,现在的ai基本可以办到写出来的lisp直接用,只有局部他可能还搞不懂,需要再教一下他



陨落 发表于 2024-5-23 17:35:32

sammy 发表于 2024-5-23 16:15
我在用claude3,感觉也不错,就是它偶尔会引用一些CAD不存在的函数,把错误反馈给它之后会修改。

claud3支持的上下文长度远不及gemini。我觉得google这个发展方向是正确的,支持超级长的上下文,你可以直接让他学会一个东西。。。gemeni1.5flash号称只支持100w token的上下文,实测我已经到了160w了,照样能跑出很好的结果

sammy 发表于 2024-5-23 22:18:21

陨落 发表于 2024-5-23 17:35
claud3支持的上下文长度远不及gemini。我觉得google这个发展方向是正确的,支持超级长的上下文,你可以直 ...

但是我现在还不知道通过什么方式能用到稳定的gemini

你有种再说一遍 发表于 2024-5-23 16:37:29

没有对抗网络它永远不知道自己的代码会不会有问题,
应该是,生成-编译-报错-语法检查-函数检查-插入打印语句检查输出值-知识库搜索-网络搜索-生成错误段代码-又回到编译...

thriving 发表于 2024-5-23 15:14:09

确实会提高解题时间

aws 发表于 2024-5-23 15:21:05

这是哪个ai产品,我用过百度ai,通义千问,豆包,都回答的驴唇不对马嘴

陨落 发表于 2024-5-23 15:25:51

aws 发表于 2024-5-23 15:21
这是哪个ai产品,我用过百度ai,通义千问,豆包,都回答的驴唇不对马嘴

gemini,支持超级长上下文的理解和记忆

怕怕吓一跳 发表于 2024-5-23 15:48:16

陨落 发表于 2024-5-23 15:25
gemini,支持超级长上下文的理解和记忆

请教如何喂的,我搞的效果不行

sammy 发表于 2024-5-23 16:15:53

我在用claude3,感觉也不错,就是它偶尔会引用一些CAD不存在的函数,把错误反馈给它之后会修改。

ynhh 发表于 2024-5-23 16:16:29

陨落 发表于 2024-5-23 15:25
gemini,支持超级长上下文的理解和记忆

领导:
请给明友们普及一下如何用AI
大家也享受一下哈
感谢

下文没句号。 发表于 2024-5-23 17:54:53

不懂就问?用的啥AI啊????
页: [1] 2 3
查看完整版本: ai写lisp程序的新进展,几乎可以直接用了。