明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1159|回复: 12

[提问] deepseek源码,批量标注

[复制链接]
发表于 2025-2-13 17:02:01 | 显示全部楼层 |阅读模式
本帖最后由 a405692168 于 2025-2-13 17:23 编辑

用 deepseek源码写了个批量标注插件,主要想代替CAD自带命令"QDIM",能加载,但运行不出结果,大佬们帮忙看下修正下。。。
  1. (defun c:PLBZ (/ *error* osmode cmdecho pt1 pt2 ss filtered-entities dimlayer)
  2.   ;; 错误处理函数
  3.   (defun *error* (msg)
  4.     (if osmode (setvar "osmode" osmode)) ;; 还原捕捉设置
  5.     (if cmdecho (setvar "cmdecho" cmdecho)) ;; 还原命令回显
  6.     (princ "\n程序终止")
  7.   )

  8.   ;; 保存当前设置
  9.   (setq osmode (getvar "osmode")
  10.         cmdecho (getvar "cmdecho"))
  11.   (setvar "cmdecho" 0)

  12.   ;; 检查或创建 "dim" 图层
  13.   (setq dimlayer "dim")
  14.   (if (not (tblsearch "layer" dimlayer))
  15.     (command "._layer" "_m" dimlayer "")
  16.   )

  17.   ;; 主程序
  18.   (princ "\n拉线批量标注插件 - 命令: PLBZ")
  19.   (princ "\n指定标注起始点和方向点,支持水平和垂直方向标注。")

  20.   ;; 获取标注起始点
  21.   (setq pt1 (getpoint "\n指定标注起始点: "))
  22.   (if (not pt1)
  23.     (progn
  24.       (princ "\n未指定起始点,程序退出。")
  25.       (exit)
  26.     )
  27.   )

  28.   ;; 获取标注方向点
  29.   (setq pt2 (getpoint pt1 "\n指定标注方向点: "))
  30.   (if (not pt2)
  31.     (progn
  32.       (princ "\n未指定方向点,程序退出。")
  33.       (exit)
  34.     )
  35.   )

  36.   ;; 过滤实体
  37.   (setq filtered-entities (filter-entities pt1 pt2))
  38.   (if (not filtered-entities)
  39.     (progn
  40.       (princ "\n未找到符合条件的实体,程序退出。")
  41.       (exit)
  42.     )
  43.   )

  44.   ;; 创建标注
  45.   (create-dimensions filtered-entities pt1 pt2 dimlayer)

  46.   ;; 尺寸文字避让
  47.   (text-avoidance)

  48.   ;; 还原设置
  49.   (setvar "osmode" osmode)
  50.   (setvar "cmdecho" cmdecho)
  51.   (princ "\n标注完成。")
  52.   (prin1)
  53. )

  54. ;; 过滤实体函数
  55. (defun filter-entities (pt1 pt2 / ss filtered)
  56.   (setq ss (ssget "F" (list pt1 pt2)
  57.                '((-4 . "<NOT")
  58.                  (-4 . "<OR")
  59.                    (0 . "TEXT,DIMENSION,INSERT,MTEXT,HATCH") ;; 过滤实体类型
  60.                    (8 . "五金,点划线") ;; 过滤图层
  61.                  (-4 . "OR>")
  62.                (-4 . "NOT>"))))
  63.   (if ss
  64.     (progn
  65.       (setq filtered (vl-remove-if-not
  66.                        '(lambda (x)
  67.                           (and (not (member (cdr (assoc 0 (entget x))) '("TEXT" "DIMENSION" "INSERT" "MTEXT" "HATCH")))
  68.                                (not (member (cdr (assoc 8 (entget x))) '("五金" "点划线")))))
  69.                        (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))))
  70.       filtered)
  71.     nil)
  72. )

  73. ;; 创建标注函数
  74. (defun create-dimensions (entities pt1 pt2 dimlayer / ang pt)
  75.   (setq ang (angle pt1 pt2))
  76.   (foreach ent entities
  77.     (setq pt (cdr (assoc 10 (entget ent))))
  78.     (if (or (equal ang 0.0 0.01) (equal ang pi 0.01)) ;; 水平方向
  79.       (entmake
  80.         (list
  81.           '(0 . "DIMENSION")
  82.           '(100 . "AcDbEntity")
  83.           '(100 . "AcDbDimension")
  84.           (cons 8 dimlayer) ;; 设置标注图层
  85.           (cons 10 pt)
  86.           '(70 . 32) ;; 水平标注
  87.           '(1 . "") ;; 尺寸文字
  88.           '(100 . "AcDbAlignedDimension")
  89.           (cons 13 pt)
  90.           (cons 14 (polar pt ang 10.0)) ;; 标注长度
  91.         )
  92.       )
  93.     (if (or (equal ang (/ pi 2) 0.01) (equal ang (* pi 1.5) 0.01)) ;; 垂直方向
  94.       (entmake
  95.         (list
  96.           '(0 . "DIMENSION")
  97.           '(100 . "AcDbEntity")
  98.           '(100 . "AcDbDimension")
  99.           (cons 8 dimlayer) ;; 设置标注图层
  100.           (cons 10 pt)
  101.           '(70 . 33) ;; 垂直标注
  102.           '(1 . "") ;; 尺寸文字
  103.           '(100 . "AcDbAlignedDimension")
  104.           (cons 13 pt)
  105.           (cons 14 (polar pt ang 10.0)) ;; 标注长度
  106.         )
  107.       )
  108.     )
  109.   )
  110. ))

  111. ;; 尺寸文字避让函数
  112. (defun text-avoidance (/ ss i ent data pt1 pt2)
  113.   (setq ss (ssget "_X" '((0 . "DIMENSION"))))
  114.   (if ss
  115.     (progn
  116.       (setq i 0)
  117.       (repeat (sslength ss)
  118.         (setq ent (ssname ss i)
  119.               data (entget ent)
  120.               pt1 (cdr (assoc 13 data))
  121.               pt2 (cdr (assoc 14 data)))
  122.         ;; 调整文字位置
  123.         (entmod (subst (cons 11 (polar (mapcar '* (mapcar '+ pt1 pt2) '(0.5 0.5 0.5)) (assoc 11 data) data))
  124.         (setq i (1+ i))
  125.       )
  126.     )
  127.   )
  128. )))

回复

使用道具 举报

发表于 6 天前 | 显示全部楼层

想要这样的效果吗?


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复 支持 2 反对 0

使用道具 举报

发表于 7 天前 | 显示全部楼层
zmzk 发表于 2025-2-13 18:28
好奇,怎么看出 是用ai 写的代码啊?看来ai 与人抢饭碗的时代来了

用 deepseek源码写了个批量标注插件,主要想代替CAD自带命令"QDIM",能加载,但运行不出结果,大佬们帮忙看下修正下。。
回复 支持 反对

使用道具 举报

发表于 5 天前 | 显示全部楼层
linzaijie 发表于 2025-2-15 08:21
其它别说,,,人家这个AI写出来的程序有条有理,,,分开一个个小函数...看得很清楚....论谈里很多大神与的lisp ...

功能能正常用就可以。你以为程序很容易的,改了多次后都懒得去条理化。
回复 支持 反对

使用道具 举报

发表于 2025-2-13 17:22:57 | 显示全部楼层
又来这种用ai写代码,靠别人改代码的帖子。
回复 支持 反对

使用道具 举报

发表于 2025-2-13 18:28:41 | 显示全部楼层
liuhe 发表于 2025-2-13 17:22
又来这种用ai写代码,靠别人改代码的帖子。

好奇,怎么看出 是用ai 写的代码啊?看来ai 与人抢饭碗的时代来了
回复 支持 反对

使用道具 举报

发表于 2025-2-13 19:08:48 | 显示全部楼层
多问几次deepseek让他改,他会改好的,我让他写过,多改几次就能用的,有热心的大哥能帮就帮,不想帮的直接略过,没必要出言讽刺,
回复 支持 反对

使用道具 举报

发表于 2025-2-13 19:54:12 | 显示全部楼层
白嫖DS和白嫖论坛高手相比,还是白嫖DS更靠得住,起码服务态度好。
回复 支持 反对

使用道具 举报

 楼主| 发表于 7 天前 | 显示全部楼层
主要最近deepseek火,所以试了一下,但AI写出来的还是不行,AI取代人力还早。。。。
回复 支持 反对

使用道具 举报

发表于 7 天前 | 显示全部楼层
AI没有想象力,这是最本质的区别,人有!
回复 支持 反对

使用道具 举报

发表于 7 天前 | 显示全部楼层
deepseek写的,就找deepseek改
回复 支持 反对

使用道具 举报

发表于 6 天前 | 显示全部楼层
其它别说,,,人家这个AI写出来的程序有条有理,,,分开一个个小函数...看得很清楚....论谈里很多大神与的lisp程序像屎一个...又臭又长,,,功能像是能正常用.....
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-2-21 03:29 , Processed in 0.195301 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表