找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1315|回复: 3

[求助] 请教,怎么获取天正比例及封闭多义线填充

[复制链接]

已领礼包: 3个

财富等级: 恭喜发财

发表于 2020-6-16 12:58:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
本帖最后由 wysclc 于 2020-6-16 13:01 编辑

自己写的一个快速填充功能函数的基本函数(其目是快速填充常见的图案)
可以实现的功能:选择封闭多义线填充、内部点填充、矩形填充(工作经常使用该功能)
问题一是:获取不了天正建筑的比例(工作必须使用天正),请帮忙解决怎么提取天正比例。
问题二是:想通过直接描点成封闭多义线填充,但不知道怎么实现;(这个填充方式也用的很多)
  1. (defun c:my_hatch( ta sc / i p1 p2 ent_t ss)
  2.         ;测试使用
  3.         (if (not ta) (setq ta "ANSI31"))                                   ;设置填充图案ANSI31
  4.         ;(if (not la) (command "-layer" "s" "0" ""))           ;设置图层
  5.         (if (not sc) (setq sc (* 10  (getvar "HPSCALE")))) ;设置填充比例,此比例不是天正比例,使用会出问题。

  6.         (if (not smode) (setq smode "R")) ;全局变量,填充模式(矩形、封闭对象、内部点),默认矩形填充
  7.         (setq i t) ;一直循环标志
  8.         (while i               
  9.                 (cond
  10.                         ((= smode "R")
  11.                                 (initget 1 "S P")
  12.                                 (setq p1 (getpoint "\n输入第一点或[选择对象(S)/内部点(p)]"))
  13.                                 (if (= (type p1) 'LIST)
  14.                                         (progn
  15.                                                 (setq i f) ;退出循环标志
  16.                                                 (setq p2 (getcorner p1 "\n输入第二个点"))
  17.                                                 (command "rectang" p1 p2)
  18.                                                 (setq ent_t (entlast))
  19.                                                 (command "-bhatch" "p" ta sc "" "s" ent_t "" "") ;填充 图案开关 图案名称 比例 角度 选择对象开关
  20.                                                 (entdel ent_t)
  21.                                         )
  22.                                         (progn        ;下次循环,如果输入值为nil,假定填充模式为封闭对象
  23.                                                 (if (not p1)
  24.                                                         (setq smode "S")
  25.                                                         (setq smode p1)
  26.                                                 )
  27.                                         )
  28.                                 )
  29.                         )
  30.                         ((= smode "P")
  31.                                 (initget 1 "R S")
  32.                                 (setq p1 (getpoint "\n指定内部点或[矩形填充(R)/选择对象(S)]"))
  33.                                 (if (= (type p1) 'LIST)
  34.                                         (progn
  35.                                                 (setq i f);退出循环标志
  36.                                                 (command "_bhatch" "p" ta sc "" p1 "")                                               
  37.                                         )
  38.                                         (progn
  39.                                                 (if (not p1)
  40.                                                         (setq smode "R")
  41.                                                         (setq smode p1);继续循环
  42.                                                 )
  43.                                         )
  44.                                 )
  45.                         )
  46.                         ((= smode "S")
  47.                                 (princ "\n选择对象或[矩形填充<space>]")
  48.                                 (setq ss (ssget '( (-4 . "<or")
  49.                                                                                 (-4 . "<and") (0 . "LWPOLYLINE") (70 . 1) (-4 . "and>")
  50.                                                                                 (0 . "CIRCLE,ELLIPSE")
  51.                                                                         (-4 . "or>")))) ;选择封闭多义线图形、圆、椭圆                               
  52.                                 (if (not ss)
  53.                                         (progn       
  54.                                                 (setq smode "r");下次循环,设置填充模式为R
  55.                                         )
  56.                                         (progn
  57.                                                 (setq i f);退出循环                                               
  58.                                                 (command "_bhatch" "p" ta sc "" "s" ss "" "")                               
  59.                                         )
  60.                                 )
  61.                         )
  62.                         ( t
  63.                                 (setq smode "R")                        
  64.                         )
  65.                 )               
  66.         )
  67.         (princ)       
  68. )




论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 19个

财富等级: 恭喜发财

发表于 2020-6-16 22:43:06 | 显示全部楼层
  1. (defun c:tt ()
  2.   (command ".pline")
  3.   (while (= (getvar "cmdactive") 1) (princ "\r下一点<退出>:")(command pause))
  4. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3个

财富等级: 恭喜发财

 楼主| 发表于 2020-6-17 15:53:28 | 显示全部楼层
谢谢,测试后OK,以下是修改后的代码。
  1. (defun c:my_hatch( ta sc / i p1 p2 ent_t ss)
  2.         ;测试使用
  3.         (if (not ta) (setq ta "ANSI31"))                                   ;设置填充图案ANSI31
  4.         ;(if (not la) (command "-layer" "s" "0" ""))           ;设置图层
  5.         (if (not sc) (setq sc (* 10  (getvar "HPSCALE")))) ;设置填充比例,此比例不是天正比例,使用会出问题。

  6.         (if (not smode) (setq smode "R")) ;全局变量,填充模式(矩形、封闭对象、内部点),默认矩形填充
  7.         (setq i t) ;一直循环标志
  8.         (while i               
  9.                 (cond
  10.                         ((= smode "R")
  11.                                 (initget 1 "S C P")
  12.                                 (setq p1 (getpoint "\n输入第一点或[选择对象(S)/创建封闭多义线填充(C)/内部点(p)]"))
  13.                                 (if (= (type p1) 'LIST)
  14.                                         (progn
  15.                                                 (setq i f) ;退出循环标志
  16.                                                 (setq p2 (getcorner p1 "\n输入第二个点"))
  17.                                                 (command "rectang" p1 p2)
  18.                                                 (setq ent_t (entlast))
  19.                                                 (command "-bhatch" "p" ta sc "" "s" ent_t "" "") ;填充 图案开关 图案名称 比例 角度 选择对象开关
  20.                                                 (entdel ent_t)
  21.                                         )
  22.                                         (progn        ;下次循环,如果输入值为nil,假定填充模式为封闭对象
  23.                                                 (if (not p1)
  24.                                                         (setq smode "S")
  25.                                                         (setq smode p1)
  26.                                                 )
  27.                                         )
  28.                                 )
  29.                         )
  30.                         ((= smode "P")
  31.                                 (initget 1 "R S C")
  32.                                 (setq p1 (getpoint "\n指定内部点或[矩形填充(R)/选择对象(S)]/创建封闭多义线填充(C)"))
  33.                                 (if (= (type p1) 'LIST)
  34.                                         (progn
  35.                                                 (setq i f);退出循环标志
  36.                                                 (command "_bhatch" "p" ta sc "" p1 "")                                               
  37.                                         )
  38.                                         (progn
  39.                                                 (if (not p1)
  40.                                                         (setq smode "R")
  41.                                                         (setq smode p1);继续循环
  42.                                                 )
  43.                                         )
  44.                                 )
  45.                         )
  46.                         ((= smode "S")
  47.                                 (princ "\n选择对象或[矩形填充<space>]")
  48.                                 (setq ss (ssget '( (-4 . "<or")
  49.                                                                                 (-4 . "<and") (0 . "LWPOLYLINE") (70 . 1) (-4 . "and>")
  50.                                                                                 (0 . "CIRCLE,ELLIPSE")
  51.                                                                         (-4 . "or>")))) ;选择封闭多义线图形、圆、椭圆                               
  52.                                 (if (not ss)
  53.                                         (progn       
  54.                                                 (setq smode "r");下次循环,设置填充模式为R
  55.                                         )
  56.                                         (progn
  57.                                                 (setq i f);退出循环                                               
  58.                                                 (command "_bhatch" "p" ta sc "" "s" ss "" "")                               
  59.                                         )
  60.                                 )
  61.                         )
  62.                         ((= smode "C")
  63.                                 (initget        1 "R S P")
  64.                                 (setq p1 (getpoint "\n指定起点或[矩形填充(R)/选择对象(S)/指定内部点(P)]"))
  65.                                 (if (= (type p1) 'LIST)
  66.                                         (progn
  67.                                                 (setq i f);退出循环标志
  68.                                                 (command ".pline" p1 );创建封闭多义线,感谢Lisphk@晓东CAD
  69.                                                 (while (= (getvar "cmdactive") 1)
  70.                                                         (princ "\r下一点[闭合(C)]<退出>:")
  71.                                                         (command pause)
  72.                                                 )
  73.                                                 (command "_bhatch" "p" ta sc "" "s" (entlast) "" "");填充
  74.                                         )
  75.                                         (progn
  76.                                                 (if (not p1)
  77.                                                         (setq smode "R");下次循环,设置填充模式为R
  78.                                                         (setq smode p1)
  79.                                                 )
  80.                                         )                       
  81.                                 )
  82.                         )
  83.                         ( t
  84.                                 (setq smode "R")                        
  85.                         )
  86.                 )               
  87.         )
  88.         (princ)       
  89. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 58个

财富等级: 招财进宝

发表于 2020-12-6 23:33:06 | 显示全部楼层
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-9-23 02:36 , Processed in 0.403245 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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