明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3189|回复: 15

[源码] 提料程序---源码分享

  [复制链接]
发表于 2019-7-15 10:03:33 | 显示全部楼层 |阅读模式


  1. (defun c:chc (/ os ss s1 cds pt1 pt2 pt3 pt4 ptx1 ptx2 ptx3 ptx4 ptx5 ptx6 ptx7 ptx8 ptx9 ptx10 ptx11 ptx12 ptx13 ptx15 ptx16 py1 py2 py3 py4 py5 py6 th thlist en vlen wz pty1 pty2 en2 kuandu gaodu mianji mianjihe en1x boen xuhao interszj cd)
  2. (setvar "cmdecho" 0)
  3. (setq os (getvar "osmode"))
  4. (setvar "osmode" 0)
  5. ;设置完毕,开始绘制表格
  6.   (setq ss (ssget '((0 . "*TEXT"))))
  7.   (setq sl (sslength ss))
  8.   (setq pt1 (getpoint "\n指定表格角点"))
  9.   (setq pt4 (polar pt1 0 1400))
  10.   (setq hh (+ (* sl 100) 400))
  11.   (setq pt2 (polar pt1 (* pi 1.5) hh))
  12.   (setq pt3 (polar pt2 0 1400))
  13.   (command "pline" pt1 pt2 pt3 pt4 "")
  14.   (command "line" pt1 pt4 "")
  15.   (setq en1 (entlast))
  16.   (command "array" en1 "" "r" (+ sl 4) 1 -100)
  17.   ;以下绘制表头
  18.   (command "._undo" "begin")
  19.   (setq inters1 (list (+ 700 (car pt1)) (- (cadr pt1) 50)))   
  20.   (command "text" "m" inters1 55 0 "石材尺寸清单")
  21.   (setq inters2 (list (+ 200 (car pt1)) (- (cadr pt1) 150)))
  22.   (command "text" "m" inters2 40 0 "石材种类")
  23.   (setq pty1 (list (+ 400 (car pt1)) (- (cadr pt1) 200)))
  24.   (setq pty2 (list (+ 400 (car pt1)) (- (cadr pt1) 100)))
  25.   (command "line" pty1 pty2 "")
  26.   (setq inters3 (polar inters2 0 800))
  27.   (command "text" "m" inters3 40 0 "厚度")
  28.   (setq ptx3 (polar pty1 0 500))
  29.   (setq ptx4 (polar pty2 0 500))
  30.   (setq pty3 (polar ptx3 0 250))
  31.   (setq pty4 (polar ptx4 0 250))
  32.   (command "line" ptx3 ptx4 "" "line" pty3 pty4 "")
  33.   (setq ptx5 (polar pt1 (* pi 1.5) 250))
  34.   (setq ptx6 (polar ptx5 0 60))
  35.   (command "text" "m" ptx6 40 0 "序号")
  36.   (setq ptx7 (polar ptx6 0 200))
  37.   (command "text" "m" ptx7 40 0 "产品编号")
  38.   (setq ptx8 (polar ptx7 0 250))
  39.   (command "text" "m" ptx8 40 0 "宽度")
  40.   (setq ptx9 (polar ptx8 0 250))
  41.   (command "text" "m" ptx9 40 0 "高度")
  42.   (setq ptx10 (polar ptx9 0 250))
  43.   (command "text" "m" ptx10 40 0 "面积")
  44.   (setq ptx11 (polar ptx10 0 250))
  45.   (command "text" "m" ptx11 40 0 "备注")
  46.   ;以下绘制表尾
  47.   (setq interszj (list (+ 450 (car pt2)) (+ 50 (cadr pt2))))
  48.   (command "text" "m" interszj 45 0 "总计")
  49.   (setq ptx12 (polar pt2 0 900))
  50.   (setq ptx13 (polar ptx12 (* pi 0.5) 100))
  51.   (command "line" ptx12 ptx13 "")
  52.   (setq ptx15 (polar ptx12 0 250))
  53.   (setq ptx16 (polar ptx15 (* pi 0.5) 100))
  54.   (command "line" ptx15 ptx16 "")
  55.   ;绘制竖线
  56.   (setq py1 (list (+ 120 (car pt1)) (- (cadr pt1) 200)))
  57.   (setq py2 (list (+ 120 (car pt2)) (+ 100 (cadr pt2))))
  58.   (command "line" py1 py2 "")
  59.   (setq en2 (entlast))
  60.   (setq py3 (polar py1 0 280) py4 (polar py3 0 250) py5 (polar py4 0 250) py6 (polar py5 0 250))
  61.   (command "copy" en2 "" "m" py1 py3 py4 py5 py6 "")

  62.   ;绘制表头表尾结束**************

  63.   (setq thlist (ssget-cons ss))
  64.   (setq th 0 xuhao 1 jiange 100 mianjihe 0)
  65.   (repeat (length thlist)
  66.   (setq en (nth th thlist))
  67.   (setq vlen (Vlax-Ename->Vla-Object en))
  68.   (setq wz (vla-get-TextString vlen))
  69.   (setq cd (cdr (assoc 10 (entget en))))
  70.   (setq cds (cdr (assoc 11 (entget en))))
  71.   (setvar "cecolor" "6")
  72.   (setq en1x (entlast))
  73.   (command "boundary" cd "")
  74.   (setq boen (entlast))
  75.   (if (/= (equal boen en1x) nil)
  76.       (progn (command "boundary" cds "")
  77.              (setq boen (entlast))
  78.        )
  79.    )

  80.   (if (= (equal boen en1x) nil)
  81.   (progn
  82.   (Min_Max)
  83.   (setq gaodu (- maxy0 miny0) kuandu (- maxx0 minx0))
  84.   (command "erase" boen "")
  85.   (setq mianji (/ (* kuandu gaodu) 1000000))        
  86.   (setq mianjihe (+ mianjihe mianji))
  87.   (setq kuandu (rtos kuandu 2 0) gaodu (rtos gaodu 2 0) mianji (rtos mianji 2 2))
  88.   (command "text" "m" (list (car ptx8) (- (cadr ptx8) jiange)) 35 0 kuandu)
  89.   (command "text" "m" (list (car ptx9) (- (cadr ptx9) jiange)) 35 0 gaodu)
  90.   (command "text" "m" (list (car ptx10) (- (cadr ptx10) jiange)) 35 0 mianji)
  91.   )
  92.   )
  93.   (command "text" "m" (list (car ptx6) (- (cadr ptx6) jiange)) 35 0 (rtos xuhao 2 0))
  94.   (command "text" "m" (list (car ptx7) (- (cadr ptx7) jiange)) 35 0 wz)
  95.   (setq jiange (+ jiange 100))
  96.   (setq xuhao (1+ xuhao))
  97.   (setq th (1+ th))
  98.   )
  99.   (setq mianjihe (rtos mianjihe 2 2))
  100.   (command "text" "m" (list (- (car pt3) 375) (+ 50 (cadr pt3))) 35 0 mianjihe)
  101.   (setq ssbg (ssget "w" pt1 pt3))
  102.   ;*****程序完成,恢复各项设置
  103.   (setvar "osmode" os)
  104.   (setvar "cecolor" "1")
  105.   (command "scale" ssbg "" pt1 "r" pt1 pt3 pause)
  106.   (command "._undo" "end")
  107.   (princ "\n操作完成!!")
  108.   (prin1)
  109. )
  110. (prompt "*****************提取石材料单尺寸程序,命令CHC****程序对图纸要求很高,只做交流,不对一切因使用本程序造成的后果负责***")
  111. (prin1)



  112. ;******选择集转换为列表并从小到大排列的子程序****
  113. (defun ssget-cons (ss / k en1 thlist)
  114.   (setq thlist ())
  115.   (setq k 0)
  116.   (repeat (sslength ss)
  117.            (setq en1 (ssname ss k))
  118.            (setq thlist (cons en1 thlist))
  119.            (setq k (1+ k))
  120.    )
  121.    (setq thlist (vl-sort thlist (function (lambda (x1 x2) (< (atoi (texts X1)) (atoi (texts X2)))))))
  122. )
  123. ;提取出字符串中的数字
  124. (defun texts (en / )
  125.   (setq regex (vlax-create-object "Vbscript.RegExp"))
  126.   (vlax-put-property regex "IgnoreCase" 1)
  127.   (vlax-put-property regex "Global" 1)
  128.   (setq en1 (vlax-ename->vla-object en))
  129.   (setq enz (vla-get-TextString en1))
  130.   (vlax-put-property regex "Pattern" "[^0-9]")
  131.   (setq en1 (vlax-invoke-method  regex "Replace" enz ""))
  132. )
  133.            

  134.     ;;;子程序,求选集是大外形坐标
  135.     (defun Min_Max()
  136.     (setq minx0 10e6 miny0 10e6 maxx0 -10e6 maxy0 -10e6)
  137.     (vla-getboundingbox(vlax-ename->vla-object boen) 'minp 'maxp)
  138.     (setq minp (vlax-safearray->list minp)
  139.            maxp (vlax-safearray->list maxp))
  140.     (setq minx (car minp)
  141.            maxx (car maxp)
  142.            miny (cadr minp)
  143.            maxy (cadr maxp))
  144.     (if (> minx0 minx) (setq minx0 minx))
  145.     (if (> miny0 miny) (setq miny0 miny))
  146.     (if (< maxx0 maxx) (setq maxx0 maxx))
  147.     (if (< maxy0 maxy) (setq maxy0 maxy))
  148.     )
  149. (prin1)


















这个是很多年前写的、、、
水平很菜
有需要的朋友可以拿去随便改随便用


本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2021-12-2 19:35:59 | 显示全部楼层
本帖最后由 尘缘一生 于 2021-12-2 19:38 编辑

程序面积计算不准确,另外,用了很多的COMMAND,速度慢,再者,对选择集排序方面,也是有点问题,那就是,对于文字选择集的,失效,再者,对于画完了表,再SCALE的方式,值得探讨,最好适合比例一次画成即可,本次没修改这部分。
我改写一下,看模样吧

  • ;; 提料程序---源码分享
  • (defun c:chc (/ e_lst ss s1 pt1 pt2 pt3 pt4 ptx1 ptx2 ptx3 ptx4 ptx5 ptx6 ptx7 ptx8 ptx9 ptx10 ptx11 ptx12 ptx13 ptx15 ptx16 py1 py2 th thlist en wz pty1 pty2
  •                kuandu gaodu mianji mianjihe boen xuhao interszj e plis hh sl obj w h)
  •   (setq e_lst (sysvar '("osmode" "cmdecho" "ORTHOMODE")))
  •   (setvar "cmdecho" 0)
  •   (setvar "OSMODE" 0)
  •   (setvar "ORTHOMODE" 0)
  •   (command "._undo" "begin")
  •   ;设置完毕,开始绘制表格
  •   (setq ss (ssget '((0 . "*TEXT"))))
  •   (setq sl (sslength ss))
  •   (setq pt1 (getpoint "\n 指定表格角点"))
  •   (setq pt4 (polar pt1 0 1400))
  •   (setq hh (+ (* sl 100) 400))
  •   (setq pt2 (polar pt1 3pi2 hh))
  •   (setq pt3 (polar pt2 0 1400))
  •   (setq e (entlast))
  •   (makelwpolyline (list pt1 pt2 pt3 pt4) 0 t)
  •   (makeline pt1 pt4)
  •   (command "array" (entlast) "" "r" (+ sl 4) 1 -100)
  •   ;以下绘制表头
  •   (setq inters1 (list (+ 700 (car pt1)) (- (cadr pt1) 50) 0))   
  •   (slmkwz "出版尺寸" inters1 (/ 55 slbl) 0 nil "表格" nil nil "m")
  •   (setq inters2 (list (+ 200 (car pt1)) (- (cadr pt1) 150) 0))
  •   (slmkwz "板材编号" inters2 (/ 40 slbl) 0 nil "表格" nil nil "m")
  •   (setq pty1 (list (+ 400 (car pt1)) (- (cadr pt1) 200)))
  •   (setq pty2 (list (+ 400 (car pt1)) (- (cadr pt1) 100)))
  •   (makeline pty1 pty2)
  •   (setq inters3 (polar inters2 0 800))
  •   (slmkwz "厚度" inters3 (/ 40 slbl) 0 nil "表格" nil nil "m")
  •   (setq ptx3 (polar pty1 0 500))
  •   (setq ptx4 (polar pty2 0 500))
  •   (setq pty3 (polar ptx3 0 250))
  •   (setq pty4 (polar ptx4 0 250))
  •   (makeline ptx3 ptx4)
  •   (makeline pty3 pty4)
  •   (setq ptx5 (polar pt1 3pi2 250))
  •   (setq ptx6 (polar ptx5 0 60))
  •   (slmkwz "序号" ptx6 (/ 40 slbl) 0 nil "表格" nil nil "m")
  •   (setq ptx7 (polar ptx6 0 200))
  •   (slmkwz "产品编号" ptx7 (/ 40 slbl) 0 nil "表格" nil nil "m")
  •   (setq ptx8 (polar ptx7 0 250))
  •   (slmkwz "宽度" ptx8 (/ 40 slbl) 0 nil "表格" nil nil "m")
  •   (setq ptx9 (polar ptx8 0 250))
  •   (slmkwz "高度" ptx9 (/ 40 slbl) 0 nil "表格" nil nil "m")
  •   (setq ptx10 (polar ptx9 0 250))
  •   (slmkwz "面积m2" ptx10 (/ 40 slbl) 0 nil "表格" nil nil "m")
  •   (setq ptx11 (polar ptx10 0 250))
  •   (slmkwz "备注" ptx11 (/ 40 slbl) 0 nil "表格" nil nil "m")
  •   ;以下绘制表尾
  •   (setq interszj (list (+ 450 (car pt2)) (+ 50 (cadr pt2)) 0))
  •   (slmkwz "总计" interszj (/ 45 slbl) 0 nil "表格" nil nil "m")
  •   (setq ptx12 (polar pt2 0 900))
  •   (setq ptx13 (polar ptx12 pi2 100))
  •   (makeline ptx12 ptx13)
  •   (setq ptx15 (polar ptx12 0 250))
  •   (setq ptx16 (polar ptx15 pi2 100))
  •   (makeline ptx15 ptx16)
  •   ;绘制竖线
  •   (setq py1 (list (+ 120 (car pt1)) (- (cadr pt1) 200)))
  •   (setq py2 (list (+ 120 (car pt2)) (+ 100 (cadr pt2))))
  •   (makeline py1 py2)
  •   (setq py1 (polar py1 0 280))
  •   (setq py2 (polar py2 0 280))
  •   (makeline py1 py2)
  •   (setq py1 (polar py1 0 250))
  •   (setq py2 (polar py2 0 250))
  •   (makeline py1 py2)
  •   (setq py1 (polar py1 0 250))
  •   (setq py2 (polar py2 0 250))
  •   (makeline py1 py2)
  •   (setq py1 (polar py1 0 250))
  •   (setq py2 (polar py2 0 250))
  •   (makeline py1 py2)
  •   ;绘制表结束
  •   
  •   (setq thlist (ss-enlst ss)) ;;选择集转实体名表并排序
  •   (setq xuhao 1 jiange 100 mianjihe 0)
  •   (repeat (setq th (length thlist))
  •     (setq en (nth (setq th (1- th)) thlist))
  •     (setq wz (getstr en))
  •     (command "boundary" "a" "o" "p" "" (e-mid en) "")  ;生成多段线
  •     (setq boen (entlast))
  •     (if boen
  •       (progn
  •         (setq plis (e-box4 boen t) obj (en2obj boen))
  •         (setq w (* (distance (car plis) (cadddr plis)) (getvar "dimlfac")))
  •         (setq h (* (distance (car plis) (cadr plis)) (getvar "dimlfac")))
  •         (if (>= w h)
  •           (progn
  •             (setq kuandu h)
  •             (setq gaodu w)
  •           )
  •           (progn
  •             (setq kuandu w)
  •             (setq gaodu h)
  •           )
  •         )
  •         (if (vlax-property-available-p obj "area")
  •           (setq mianji (* (getvar "dimlfac") (getvar "dimlfac") (vlax-get-property obj 'area) 0.000001))
  •         )
  •         (entdel boen)
  •       )
  •       (setq mianji 0.0 kuandu 0.0 gaodu 0.0)
  •     )
  •     (setq mianjihe (+ mianjihe mianji))
  •     (setq mianji (rtos mianji 2 2) kuandu (rtos kuandu 2 0) gaodu (rtos gaodu 2 0))
  •     (slmkwz kuandu (list (car ptx8) (- (cadr ptx8) jiange) 0) (/ 35 slbl) 0 nil "表格" nil nil "m")  
  •     (slmkwz gaodu (list (car ptx9) (- (cadr ptx9) jiange) 0) (/ 35 slbl) 0 nil "表格" nil nil "m")
  •     (slmkwz mianji (list (car ptx10) (- (cadr ptx10) jiange) 0) (/ 35 slbl) 0 nil "表格" nil nil "m")
  •     (slmkwz (rtos xuhao 2 0) (list (car ptx6) (- (cadr ptx6) jiange) 0) (/ 35 slbl) 0 nil "表格" nil nil "m")
  •     (slmkwz wz (list (car ptx7) (- (cadr ptx7) jiange) 0) (/ 35 slbl) 0 nil "表格" nil nil "m") ;;编号
  •     (setq jiange (+ jiange 100))
  •     (setq xuhao (1+ xuhao))
  •   )
  •   (slmkwz (rtos mianjihe 2 2) (list (- (car pt3) 375) (+ 50 (cadr pt3)) 0) (/ 35 slbl) 0 nil "表格" nil nil "m")
  •   ;*****程序完成,恢复各项设置
  •   (command "scale" (last_ent e) "" pt1 "r" pt1 pt3 pause)
  •   (command "._undo" "end")
  •   (mapcar 'eval e_lst)
  • )
  • (prompt "提取石材料单尺寸程序,命令CHC****程序对图纸要求很高,只做交流,不对一切因使用本程序造成的后果负责***")
  • (prin1)

发表于 2020-6-1 15:58:24 | 显示全部楼层
fan_zh 发表于 2019-7-24 13:48
我这个,可能更好用些,带合并数量并编号功能

您这个感觉很好用~
方便分享吗?
发表于 2020-6-2 11:00:02 | 显示全部楼层
p-3-ianlcc 发表于 2020-6-1 15:58
您这个感觉很好用~
方便分享吗?

有需要可以定制,pm我吧
发表于 2019-7-15 11:14:00 | 显示全部楼层
如果能把编号长宽相同统计数量就完美了
发表于 2019-7-15 20:38:03 | 显示全部楼层
支持一下   谢谢分享!!!!!!
发表于 2019-7-20 08:35:09 | 显示全部楼层
谢谢楼主分享好程序
发表于 2019-7-24 13:48:47 | 显示全部楼层
我这个,可能更好用些,带合并数量并编号功能

本帖子中包含更多资源

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

x
发表于 2019-7-24 19:04:23 | 显示全部楼层
东西非常好,现在也能用也好用
发表于 2019-7-24 20:25:57 | 显示全部楼层
看看学习学习,谢谢分享!
发表于 2019-8-6 19:55:23 | 显示全部楼层
可以改用entmake,速度会快一点
发表于 2019-8-10 09:26:55 | 显示全部楼层
http://bbs.mjtd.com/thread-179900-1-1.html这个里面有思路可以看看你!
发表于 2019-8-10 09:39:57 | 显示全部楼层
fan_zh 发表于 2019-7-24 13:48
我这个,可能更好用些,带合并数量并编号功能

你这个源码呢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-15 06:44 , Processed in 0.223122 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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