明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 503|回复: 13

[提问] 请帮忙看下是哪里有问题

[复制链接]
发表于 2024-12-31 17:27:22 | 显示全部楼层 |阅读模式
  1. (defun c:d8(/ all all1 ce cn cp cr cs ct h height hx leng_row leng_title li lii lst om os pp_int pp_txt pt px py sc si size ss tb_diamer tb_nno tb_type tx tx1 u width color_table)
  2.   (setq color_table ())
  3.   (princ "\n选择要进行统计的圆对象")
  4.   (setq ss (ssget (list (cons 0 "CIRCLE"))))
  5.   (setq pt (getpoint "\n选择输出基点:"))
  6.   (setq pp_int pt)
  7.   (setq si 0 tx 65 px (car pt) py (cadr pt) li '() lii 1)
  8.   (setq os (getvar "osmode") om (getvar "cmdecho"))
  9.   (command "osmode" 0 "osmode" 0 "_.ucs" "w")
  10.   (setq color_table (list))
  11.   (repeat (sslength ss)
  12.     (setq cs (ssname ss si) ce (entget cs));获取图元
  13.     (setq cp (cdr (assoc 10 ce)));获取坐标
  14.     (setq cr (cdr (assoc 40 ce)));半径
  15.     (if (setq lst (assoc cr li))
  16.       (setq ct (nth 1 lst) li (subst (list cr ct (1+ (nth 2 lst))) lst li))
  17.       (setq ct tx tx (1+ tx) li (cons (list cr ct 1) li));li =((5.26298 65 1)) 构建表 半径
  18.     )
  19.     (if (setq color_index_pair (assoc ct color_table))
  20.         (setq color_index (cdr color_index_pair))
  21.         ; 如果不存在,分配一个新的颜色索引,确保不超过颜色索引范围(这里假设最大为255),并添加到 color_table 关联表中
  22.         (progn
  23.             (setq color_index (if (< (length color_table) 255) (1+ (length color_table)) 1))
  24.             (setq color_table (append color_table (list (cons ct color_index))))
  25.         )
  26.     )
  27.     (setq dimtxt_height (getvar "DIMTXT"))
  28.     (setq dimscale_factor (getvar "DIMSCALE"))
  29.     (setq actual_text_height (* dimtxt_height dimscale_factor))   
  30.     (entmakex (list '(0 . "TEXT")'(100 . "AcDbEntity")
  31.                 (cons 62 color_index) '(100 . "AcDbText")
  32.                 (cons 10 (polar cp (/ pi 4) (+ cr 1)))
  33.                 (cons 40 actual_text_height)
  34.                 (cons 1 (chr ct))
  35.                 (cons 8 "DIM")
  36.                
  37.               ))
  38.    
  39.     (setq si (1+ si))
  40.     (setq color_index (if (< color_index 256) (1+ color_index) 1))
  41.   )  
  42.   
  43.   
  44.   (foreach l li
  45.     (setq cp (list px (+ py (* lii (+ actual_text_height 7)))) );text定位点
  46.     (setq cr (nth 0 l) ct (nth 1 l) cn (nth 2 l));CR直径 CT 65 A  66 B
  47.     (entmakex (list '(0 . "TEXT")'(100 . "AcDbEntity")
  48.                 (cons 62 3) '(100 . "AcDbText")
  49.                 (cons 8 "DIM")
  50.                 (cons 10 cp)
  51.                 (cons 40 actual_text_height)
  52.                 (cons 1 (strcat (chr ct) ":" (itoa cn) "-%%C" (rtos (* cr 2) 2 2)))
  53.                 '(50 . 0.0)
  54.                 (cons 41 0.7)
  55.                 '(51 . 0.0)
  56.                 '(71 . 0)
  57.                 '(72 . 0)
  58.                 (cons 11 cp)
  59.                 '(100 . "AcDbText")
  60.                 '(73 . 0)))
  61.     (setq lii (1+ lii))
  62.    
  63.   )
  64.   
  65.   
  66.   
  67.   
  68.   (setq height 4.)
  69.   (setq width 12.)
  70.   (setq size 3.)
  71.   (setq sc 0.5)
  72.   (setq tx1  (vl-list->string(list tx)))   
  73.   (setq  hx (- (car(vl-string->list tx1)) 65))
  74.   
  75.   (setq h hx)
  76.   (setq leng_title 1  leng_row h)
  77.    (by-row-down-line pp_int (* width (+ leng_title 3)) height (+ 2 leng_row) 3 0)
  78.   (by-colu-right-line pp_int (* height (+ 1 leng_row)) width (+ leng_title 4) 3 0)
  79.   (by-x-txt-rep '("标记" "数量" "孔径" "备注") pp_int width height 1 size sc)
  80.   
  81.   
  82.   
  83.   
  84.   
  85.   
  86.   (setq u 0)
  87.   (foreach l li
  88.     (setq u (1+ u))
  89.     (setq pp_txt (list (car pp_int) (- (cadr pp_int) (* height u))))
  90.     (setq tb_type (nth 1 l))
  91.    
  92.     (setq tx1  (vl-list->string(list tx)))
  93.    
  94.     (setq tb_NnO (nth 2 l))
  95.     (setq tb_diamer (nth 0 l))
  96.     (setq all (list (chr tb_type) (itoa tb_NnO)  (strcat "%%C"(rtos (* tb_diamer 2) 2 2))))
  97.     (setq all1 (append all))
  98.    
  99.     (by-x-txt-rep all (list (car pp_int) (cadr pp_txt)) width height 7 size sc)  
  100.   )
  101.   
  102.   
  103.   
  104.   
  105.   
  106.   (setvar "osmode" os)
  107.   (setvar "cmdecho" om)
  108.   (princ "\n统计完成!")
  109.   (princ)
  110. )

  111. ;横向文字循环排列
  112. (defun by-x-txt-rep(lst pp wid hei col size sc / hei_now i num pp_txt pp_x pp_y txt wid_now)
  113.   (setq num (length lst))
  114.   (setq i -1)
  115.   (repeat num
  116.     (setq i (1+ i))
  117.     (setq txt (nth i lst))
  118.     (setq wid_now (* (+ 0.5 i) wid))
  119.     (setq pp_x (+ (car pp) wid_now))
  120.     (setq pp_y (- (cadr pp) (* 0.5 hei)))
  121.     (setq pp_txt (list pp_x pp_y))
  122.     (if(and(/= txt "")(/= txt " "))
  123.       (entmakex (list '(0 . "TEXT")'(100 . "AcDbEntity")(cons 62 3) '(100 . "AcDbText") (cons 8 "DIM") (cons 10 pp_txt) (cons 40 size) (cons 1 txt) '(50 . 0.0) (cons 41 sc) '(51 . 0.0)'(71 . 0) '(72 . 4) (cons 11 pp_txt)'(100 . "AcDbText") '(73 . 0)))
  124.     )
  125.    
  126.   )
  127. )


  128. ;循环画竖线
  129. (defun by-colu-right-line(pp height colu num col wid / i pp_bottom pp_left pp_right pp_top x y)
  130.   (setq pp (list (+ (car pp) wid) (cadr pp)))
  131.   (setq i -1)
  132.   (repeat num
  133.     (setq i (1+ i))
  134.     (setq x (+ (car pp) (* i colu)))
  135.     (setq pp_top (list x (cadr pp)))
  136.     (setq pp_bottom (list x (- (cadr pp) height)))
  137.     (entmakex (list '(0 . "LINE") '(100 . "AcDbEntity")(cons 62 3) '(100 . "AcDbLine") (cons 8 "DIM") (cons 10 pp_top) (cons 11 pp_bottom)))
  138.   )
  139. )



  140. ;循环画横线
  141. (defun by-row-down-line(pp width row num col hei / i pp_left pp_right y)
  142.   (setq pp (list (car pp) (- (cadr pp) hei)))
  143.   (setq i -1)
  144.   (repeat num
  145.     (setq i (1+ i))
  146.     (setq y (- (cadr pp) (* i row) ))
  147.     (setq pp_left (list (car pp) y))
  148.     (setq pp_right (list (+ width (car pp)) y))
  149.     (entmakex (list '(0 . "LINE") '(100 . "AcDbEntity")(cons 62 3) '(100 . "AcDbLine") (cons 8 "DIM") (cons 10 pp_left) (cons 11 pp_right)))
  150.   )
  151. )
这个代码使用别人(http://bbs.mjtd.com/forum.php?mo ... hlight=%CD%B3%BC%C6)的代码修改的,但是原有源代码存在问题,如附件,这种是什么原因?

本帖子中包含更多资源

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

x
回复

使用道具 举报

发表于 2024-12-31 22:22:09 | 显示全部楼层
惜惜2 发表于 2024-12-31 20:26
大佬 正常chr不是对应了这么多字符嘛,"" "\001" "\002" "\003" "\004" "\005" "\006" "\007" "\010" "\t ...

你这些也才127个 你的图纸汇总刚好超过了这个数值  至于有效汇总我没注意 太多了 不想看 应该是容差的原因 用 符号 编号实在是怪异
回复 支持 0 反对 1

使用道具 举报

 楼主| 发表于 2024-12-31 20:26:01 | 显示全部楼层
飞雪神光 发表于 2024-12-31 18:41
是编号的问题 超过128 chr 就提示忽略展开了 把编号改成数字的或者字母叠加

大佬 正常chr不是对应了这么多字符嘛,"" "\001" "\002" "\003" "\004" "\005" "\006" "\007" "\010" "\t" "\n" "\013" "\014" "\r" "\016" "\017" "\020" "\021" "\022" "\023" "\024" "\025" "\026" "\027" "\030" "\031" "\032" "\e" "\034" "\035" "\036" "\037" " " "!" "\"" "#" "$" "%" "&" "'" "(" ")" "*" "+" "," "-" "." "/" "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" ":" ";" "<" "=" ">" "?" "@" "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z" "[" "\\" "]" "^" "_" "`" "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z" "{" "|" "}" "~" "\177" "...应该是不用双字母字符也够的啊,毕竟没有这么多不同大小的孔,DWG得出来的表看着是因为数量没有有效汇总导致的,我的没有提示忽略展开了 。
回复 支持 反对

使用道具 举报

发表于 2024-12-31 18:41:43 | 显示全部楼层
是编号的问题 超过128 chr 就提示忽略展开了 把编号改成数字的或者字母叠加
回复 支持 反对

使用道具 举报

发表于 2024-12-31 19:12:21 来自手机 | 显示全部楼层
写这个干啥,用选择易不就解决了吗
回复 支持 反对

使用道具 举报

发表于 2024-12-31 19:55:00 | 显示全部楼层
飞雪神光 发表于 2024-12-31 18:41
是编号的问题 超过128 chr 就提示忽略展开了 把编号改成数字的或者字母叠加

厉害啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-12-31 20:28:45 | 显示全部楼层
自贡黄明儒 发表于 2024-12-31 19:12
写这个干啥,用选择易不就解决了吗

有源码,主要是小白想学习一下,搜了一下我看都是VLX的
回复 支持 反对

使用道具 举报

发表于 2024-12-31 22:39:14 | 显示全部楼层
本帖最后由 飞雪神光 于 2024-12-31 22:42 编辑
飞雪神光 发表于 2024-12-31 22:22
你这些也才127个 你的图纸汇总刚好超过了这个数值  至于有效汇总我没注意 太多了 不想看 应该是容差的原 ...

我看了 是图纸不标准 导致了assoc不能准确运行 圆的半径在小数点后13位左右开始出现误差

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

发表于 2025-1-1 10:15:21 | 显示全部楼层
本帖最后由 xyp1964 于 2025-1-1 11:47 编辑




;; 代码需要E派系统的支持

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-1-1 10:55:30 | 显示全部楼层
飞雪神光 发表于 2024-12-31 22:39
我看了 是图纸不标准 导致了assoc不能准确运行 圆的半径在小数点后13位左右开始出现误差

你好,这个原因是怎么排查出来的,正常不是只能显示小数点后面8位数吗?大佬是怎么解决的,用rtos函数去指定Cr变量的精度?

点评

(rtos (xyp-DXF 40 s1) 2 2)  发表于 2025-1-1 11:45
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-22 19:01 , Processed in 0.996314 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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