明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 667|回复: 6

[源码] 供回(排)水平面图断面绘制

[复制链接]
发表于 2022-12-29 11:32 | 显示全部楼层 |阅读模式
本帖最后由 smartstar 于 2022-12-29 11:36 编辑

现在不咋画图了,把自己认为可以拿的出手的程序和大家分享一下,程序注释少,见谅!
注:采用了前辈的函数和思路,在此表示感谢。





  1. (defun c:GDV ()
  2.   (vl-load-com)
  3.   (or *acad* (setq *acad* (vlax-get-acad-object)))
  4.   (or *acdoc* (setq *acdoc* (vla-get-activedocument *acad*)))
  5.   (setq *linetypes* (vla-get-linetypes *acdoc*))
  6.   (setq  mSpace (if (= 1 (getvar 'cvport))
  7.      (vla-get-paperspace *acdoc*)
  8.      (vla-get-modelspace *acdoc*)
  9.          )
  10.   )
  11.   (setq meaold (getvar "MEASUREMENT"))
  12.   (setvar "MEASUREMENT" 1)
  13.   (setq  c03  (getvar "viewctr")
  14.   c03  (trans c03 1 2)
  15.   c08  (getvar "viewsize")
  16.   c04  (getvar "screensize")
  17.   c07  (car c04)
  18.   c06  (cadr c04)
  19.   c09  (/ (* c08 c07) c06)
  20.   c010 (list (- (car c03) (* 0.5 c09))
  21.        (- (cadr c03) (* 0.5 c08))
  22.        )
  23.   c020 (list (+ (car c03) (* 0.5 c09))
  24.        (- (cadr c03) (* 0.5 c08))
  25.        )
  26.   c010 (trans c010 2 0)
  27.   c020 (trans c020 2 0)
  28.   )
  29.   (setq  gdlist (list "AC-P-CHW-S"     "AC-P-CHW-R"
  30.          "AC-P-CHW-EXP"     "AC-P-CD"
  31.          "AC-P-CONDW-S"     "AC-P-CONDW-R"
  32.          "AC-P-CONDW-EXP"     "AC-P-HW-S"
  33.          "AC-P-HW-R"     "AC-P-HW-EXP"
  34.          "AC-P-EXP"       "AC-P-FH-EXP"
  35.          "AC-P-KCONDW-S"     "AC-P-KCONDW-R"
  36.          "AC-P-KCONDW-EXP"     "AC-P-ST"
  37.          "AC-P-SC"       "AC-P-DHW-S"
  38.          "AC-P-DHW-R"     "AC-P-DHW-EXP"
  39.          "AC-P-R"       "AC-D-CHIMENEY"
  40.          "FS-P-S"       "FS-P-FH"
  41.          "PD-P-HOT-PIPE"     "PD-P-HOT-PIPE-R"
  42.          "PD-P-COLD-PIPE"     "PD-P-FLUSH-PIPE"
  43.          "PD-D-SOIL-PIPE"     "PD-D-WASTE-PIPE"
  44.          "PD-D-SOIL-Y-PIPE"     "PD-D-WASTE-Y-PIPE"
  45.          "PD-D-SOIL-M-PIPE"     "PD-D-WASTE-M-PIPE"
  46.          "PD-D-WASTE-K-PIPE"   "PD-D-VENT-PIPE"
  47.          "PD-D-RAIN-PIPE"     "PD-PIPE-SJ"
  48.          "PD-WASTE-Y-PIPE"     "PD-HOT-PIPE"
  49.         )
  50.   )

  51.   (setq  glist (list "AC-P-CHW-S"       "AC-P-CONDW-S"
  52.         "AC-P-HW-S"         "AC-P-KCONDW-S"
  53.         "AC-P-ST"         "AC-P-DHW-S"
  54.        )
  55.   )
  56.   (setq  hlist (list "AC-P-CHW-R"      "AC-P-CONDW-R"
  57.         "AC-P-CD"        "AC-P-HW-R"
  58.         "AC-P-KCONDW-R"   "AC-P-SC"
  59.         "AC-P-DHW-R"
  60.        )
  61.   )

  62.   (setq view_ang (rem (angle c010 c020) (* 2 pi)))
  63.   (setq lt "center")      ;线型
  64.   (setq sc1 0.2)      ;(圆、椭圆、矩形……)的中心线的延长倍数
  65.   (setq sc3 0.8)      ;(圆、椭圆、矩形……)的中心线的自动线型比例(0.8)
  66.   (setq sscir (ssget '((0 . "CIRCLE"))))
  67.   (setq lst nil)
  68.   (foreach en (ss-enlst sscir)    ;((图元 圆心)……)
  69.     (setq cen_po (vlax-get (vlax-ename->vla-object en) 'center))
  70.     (setq lst (cons (list en cen_po) lst))
  71.   )
  72.   (while (> (length lst) 0)    ;直到抽空表为止
  73.     (setq lst1 (vl-remove-if-not
  74.      '(lambda (x) (equal (cadar lst) (cadr x) 1e-8))
  75.      lst
  76.          )
  77.     )          ;查找所有与第一个同心
  78.     (foreach en lst1 (setq lst (vl-remove en lst))) ;从总表移除
  79.     (setq lst1 (mapcar '(lambda (x) (car x)) lst1))
  80.           ;得到同心圆表
  81.     (if  (> (length lst1) 1)    ;2个以上进行半径从大至小排序
  82.       (setq
  83.   lst1 (vl-sort
  84.          lst1
  85.          (function
  86.      (lambda (a b)
  87.        (> (vla-get-radius (vlax-ename->vla-object a))
  88.           (vla-get-radius (vlax-ename->vla-object b))
  89.        )
  90.      )
  91.          )
  92.        )
  93.       )
  94.     )
  95.     (setq en (car lst1))
  96.     (setq cen_po (vlax-get (vlax-ename->vla-object en) 'center))
  97.     (setq rr (vla-get-radius (vlax-ename->vla-object en)))
  98.     (setq lay (strcase (vlax-get (vlax-ename->vla-object en) 'layer)))
  99.     (setq col 8)
  100.     ;;(setq col (vlax-get (vlax-ename->vla-object en) 'color))
  101.     (setq ll (* sc1 (* rr 2)))
  102.     (setq p1 (polar cen_po (+ view_ang 0) (+ rr ll)))
  103.     (setq p2 (polar cen_po (+ view_ang pi) (+ rr ll)))
  104.     (setq p3 (polar cen_po (+ view_ang (/ pi 2)) (+ rr ll)))
  105.     (setq p4 (polar cen_po (+ view_ang (* pi 1.5)) (+ rr ll)))
  106.     (applt lt)        ;加载线型
  107. ;(applt "center")
  108.     (if  (member lay gdlist)
  109.       (progn
  110.   ;(LineFormat (make-line p1 p2) lay lt sc3 col)
  111.   (make-line lt lay p1 p2 sc3 col)
  112.   ;(LineFormat (make-line p3 p4) lay lt sc3 col)
  113.   (make-line lt lay p3 p4 sc3 col)
  114.       )
  115.     )

  116.     (setq lst1 (reverse lst1))
  117.     (setq ent (car lst1))
  118.     (setq cpt (vlax-get (vlax-ename->vla-object ent) 'center))
  119.     (setq r (vla-get-radius (vlax-ename->vla-object ent)))

  120.     (setq pt1 (polar cpt (+ (/ pi 2) view_ang) r))
  121.     (setq pt2 (polar cpt (+ (+ pi (/ pi 2)) view_ang) r))
  122.     (setq pt3 (polar cpt (+ (/ pi 4) view_ang) r))
  123.     (setq pt4 (polar cpt (+ (+ pi (/ pi 4)) view_ang) r))

  124.     (setq lay (strcase (vlax-get (vlax-ename->vla-object ent) 'layer)))

  125.     (if  (member lay gdlist)
  126.       (if (> (length lst1) 1)
  127.   (progn
  128.     (if (member lay hlist)
  129.       (make-dr pt3 pt4 lay)
  130.     )
  131.     (if (member lay glist)
  132.       (make-so pt1 pt2 cpt lay)
  133.     )

  134.     (setq ent1 (cadr lst1))
  135.     (setq r0 (vla-get-radius (vlax-ename->vla-object ent1)))
  136.     (setq en-vl (vlax-ename->vla-object ent))
  137.     (setq en-vl1 (vlax-ename->vla-object ent1))
  138.     (setq patternName "net")
  139. ;;;填充样式NET
  140.     (setq patternType 0)
  141.     (setq bAssociativity :vlax-true)
  142.     (setq
  143.       hatch (vla-AddHatch
  144.         mSpace
  145.         patternType
  146.         patternName
  147.         bAssociativity
  148.       )
  149.     )
  150.     ;|
  151.     (if (< (setq sca (/ r0 30)) 8)
  152.       (setq sca 8)
  153.       (if  (> sca 15)
  154.         (setq sca 15)
  155.       )
  156.     )
  157. |;
  158.     (setq sca (/ r0 25))
  159.     (vlax-invoke hatch 'appendouterloop (list en-vl1))
  160.     (vlax-invoke hatch 'AppendInnerLoop (list en-vl))
  161.     (vlax-put-property hatch 'patternscale sca) ;比例
  162.     (vlax-put-property hatch 'color 8) ;颜色
  163.     (vlax-put-property hatch 'layer lay) ;图层
  164.     (vlax-put-property hatch 'PatternAngle 0.7854) ;角度
  165.     (vla-evaluate hatch)
  166.     (vla-put-color
  167.       (vlax-ename->vla-object ent1)
  168.       8
  169.     )
  170.   )
  171.   (progn
  172.     (if (member lay hlist)
  173.       (make-dr pt3 pt4 lay)

  174.     )
  175.     (if (member lay glist)
  176.       (make-so pt1 pt2 cpt lay)
  177.     )
  178.   )
  179.       )
  180.     )
  181.   )
  182.   (setvar "MEASUREMENT" meaold)
  183.   (princ)
  184. )
  185. ;;;排水
  186. (defun make-dr (pt1 pt2 lay)
  187.   (entmake (list '(0 . "LWPOLYLINE")
  188.      '(100 . "AcDbEntity")
  189.      '(100 . "AcDbPolyline")
  190.      (cons 70 0)
  191.      (cons 8 lay)
  192.      (cons 90 3)
  193.      (cons 10 pt1)
  194.      (cons 42 0)
  195.      (cons 10 pt2)
  196.      (cons 42 -1)
  197.      (cons 10 pt1)
  198.      (cons 42 1)
  199.      )
  200.   )
  201.   (setq en-vl (vlax-ename->vla-object (entlast)))
  202.   (setq patternName "line")
  203. ;;;填充样式LINE
  204.   (setq patternType 0)
  205.   (setq bAssociativity :vlax-true)
  206.   (setq hatch nil)
  207.   (setq
  208.     hatch (vla-AddHatch mSpace patternType patternName bAssociativity)
  209.   )
  210.   (vlax-invoke hatch 'appendouterloop (list en-vl))

  211.   (vlax-put-property hatch 'patternscale (/ r 25)) ;比例
  212.   (vlax-put-property hatch 'color 8)  ;颜色
  213.   (vlax-put-property hatch 'layer lay)  ;图层
  214.   (vlax-put-property hatch 'PatternAngle 1.571) ;角度
  215.   ;;(vla-evaluate hatch)
  216. )

  217. ;;;给水
  218. (defun make-so (pt1 pt2 cpt lay)
  219. ;|
  220.   (entmake (list '(0 . "LWPOLYLINE")
  221.      '(100 . "AcDbEntity")
  222.      '(100 . "AcDbPolyline")
  223.      (cons 70 0)
  224.      (cons 8 lay)
  225.      (cons 90 4)
  226.      (cons 10 pt2)
  227.      (cons 42 1)
  228.      (cons 10 cpt)
  229.      (cons 42 -1)
  230.      (cons 10 pt1)
  231.      (cons 42 1)
  232.      (cons 10 pt2)
  233.      (cons 42 -1)
  234.      )
  235.   )
  236. |;
  237.   (entmake (list '(0 . "LWPOLYLINE")
  238.      '(100 . "AcDbEntity")
  239.      '(100 . "AcDbPolyline")
  240.      (cons 70 0)
  241.      (cons 8 lay)
  242.      (cons 90 4)
  243.      (cons 10 pt1)
  244.      (cons 42 -1)
  245.      (cons 10 cpt)
  246.      (cons 42 1)
  247.      (cons 10 pt2)
  248.      (cons 42 -1)
  249.      (cons 10 pt1)
  250.      (cons 42 1)
  251.      )
  252.   )
  253.   (setq en-vl (vlax-ename->vla-object (entlast)))
  254.   (setq patternName "line")
  255. ;;;填充样式LINE
  256.   (setq patternType 0)
  257.   (setq bAssociativity :vlax-true)
  258.   (setq hatch nil)
  259.   (setq
  260.     hatch (vla-AddHatch mSpace patternType patternName bAssociativity)
  261.   )
  262.   (vlax-invoke hatch 'appendouterloop (list en-vl))
  263.   (vlax-put-property hatch 'patternscale (/ r 25)) ;比例
  264.   (vlax-put-property hatch 'color 8)  ;颜色
  265.   (vlax-put-property hatch 'layer lay)  ;图层
  266.   (vlax-put-property hatch 'PatternAngle 1.571) ;角度
  267.   (vla-evaluate hatch)
  268. )
  269. (defun LineFormat (obj lay lt sc col / qm40) ;线的格式
  270. ;;;参数           
  271. ;;;obj  图元名/obj对象
  272. ;;;lay  图层
  273. ;;;lt   线型
  274. ;;;sc   比例,圆0.8/线0.4
  275. ;;;col  颜色
  276.   (vl-load-com)
  277.   (if (= (type obj) 'ENAME)
  278.     (setq obj (vlax-ename->vla-object obj))
  279.   )
  280.   (vla-put-layer obj lay)
  281.   (vla-put-Linetype obj lt)
  282.   (vla-put-Color obj col)
  283.   (setq qm40 (cdr (assoc 40 (tblsearch "ltype" lt))))
  284.   (if (and (/= qm40 0) (/= sc 0))
  285.     (vla-put-LinetypeScale
  286.       obj
  287.       (* (vla-get-Length obj) (/ sc qm40 (getvar "LTSCALE")))
  288.     )
  289.   )
  290.   (vla-update obj)
  291.   (princ)
  292. )

  293. (defun make-line (lt lay pt1 pt2 sc col) ;生成一条line
  294. ;;;参数:pt1:起点,pt2:终点,均为三维点,即(x y z)
  295.   (setq qm40 (cdr (assoc 40 (tblsearch "ltype" lt))))
  296.   (setq sc (* (distance pt1 pt2) (/ sc qm40 (getvar "LTSCALE"))))
  297.   (entmakex
  298.     (list
  299.       '(0 . "line")
  300.       (cons 6 lt)
  301.       (cons 8 lay)
  302.       (cons 10 pt1)
  303.       (cons 11 pt2)
  304.       (cons 48 sc)
  305.       (cons 62 col)
  306.     )
  307.   )

  308. )
  309. ;|
  310. (defun make-line (pt1 pt2)    ;生成一条line
  311. ;;;参数:pt1:起点,pt2:终点,均为三维点,即(x y z)
  312.   (entmakex (list '(0 . "line") (cons 10 pt1) (cons 11 pt2)))
  313. )
  314. |;

  315. (defun ss-enlst  (ss / enlst)    ;选择集与对象名表互转
  316.   (cond
  317.     ((= (type ss) 'PICKSET)
  318.      (vl-remove-if-not
  319.        '(lambda (x) (= (type x) 'ENAME))
  320.        (mapcar 'cadr (ssnamex SS))
  321.      )
  322.     )
  323.     ((= (type ss) 'LIST)
  324.      (setq enlst (ssadd))
  325.      (last (mapcar '(lambda (x) (ssadd x enlst)) ss))
  326.     )
  327.   )
  328. )

  329. (defun applt (lt/)
  330.   (vl-load-com)
  331.   (or *acad* (setq *acad* (vlax-get-acad-object)))
  332.   (or *acdoc* (setq *acdoc* (vla-get-activedocument *acad*)))
  333.   (setq *linetypes* (vla-get-linetypes *acdoc*))
  334.   (setq  mSpace (if (= 1 (getvar 'cvport))
  335.      (vla-get-paperspace *acdoc*)
  336.      (vla-get-modelspace *acdoc*)
  337.          )
  338.   )
  339.   (if (not (tblsearch "ltype" lt))
  340.     (progn
  341.       (if (or
  342.       (not (vl-catch-all-apply
  343.        'vla-load
  344.        (list *linetypes*
  345.        lt
  346.        "acadiso.lin"
  347.        )
  348.      )
  349.       )
  350.       (not (vl-catch-all-apply
  351.        'vla-load
  352.        (list *linetypes*
  353.        lt
  354.        "acad.lin"
  355.        )
  356.      )
  357.       )
  358.     )
  359.   (princ (strcat "\n线型" lt "成功加载"))
  360.   (princ (strcat "\n线型" lt "加载失败."))
  361.       )
  362.     )
  363.   )
  364. (princ)
  365. )


本帖子中包含更多资源

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

x

评分

参与人数 1明经币 +1 收起 理由
guosheyang + 1 赞一个!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2022-12-29 12:03 来自手机 | 显示全部楼层
本帖最后由 lxl217114 于 2022-12-29 13:28 编辑


谢谢分享


--------------------------------------------------------------
为啥最近论坛回复,会变成奇怪的符号了?
发表于 2022-12-29 20:07 | 显示全部楼层
谢谢楼主分享
发表于 2023-1-8 23:31 | 显示全部楼层
谢谢楼主分享!!!!
发表于 2023-1-9 08:53 | 显示全部楼层
-函数类;
3 支持括号自动输入;
4 中文状态下从第二备选词开始,不影响平时打字;
5 通过vbs简单语句切换编程模式和正常办公
发表于 2023-1-28 04:08 | 显示全部楼层
什么东西啊?那么神秘,看一眼都要钱!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-3 07:54 , Processed in 1.347651 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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