找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1817|回复: 30

[求助] api 填充,面积为0,是bug么

[复制链接]

已领礼包: 58个

财富等级: 招财进宝

发表于 2017-8-26 17:05:10 | 显示全部楼层 |阅读模式

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

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

×
问题 1
(setq e (xdrx_hatch_make (ssget)))
此时生成的填充没有面积
如果(xdrx_setpropertyvalue e "patternscale" ... ...)之后可正常显示面积
问题 2
(setq ss (ssget '((0 . "*line,arc,ellipse,circle"))))
  (setq ss (xdrx_curve_intersectbreak ss))
  (setq ss (xdrx_region_make ss))
  (setq ss (xdrx_region->curve ss))
(setq mp (xdrx_mpolygon_make ss))

此时生成mpolygon,
即便用cad的填充命令填充,填充图案依然没有面积

Hatch作为cad的一个图元,一方面是制图需要,另一方面进行面积统计,
面积统计是很重要的功能

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

已领礼包: 145个

财富等级: 日进斗金

发表于 2017-8-26 21:27:30 | 显示全部楼层
问题1,下版本修正

问题2,不清楚,你生成MPOLYGON后,是怎么生成的HATCH? 用ACAD命令点选边界生成的吗?

MPOLYGON本身就带HATCH的,只是API默认没显示出来。你可以点特性框查看下。

MPOLYGON转填充,API有  xdrx_mpolygon->hatch
MP转多段线                     xddrx_mpolygon->polyline
MP转面域                        xdrx_mpolygon->region

填充也可以转MP               xdrx_hatch->mpolygon
面域也可以转MP               xdrx_region->mpolygon
多段线也可以                   xdrx_polyline->mpolygon

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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2017-8-26 21:38:32 | 显示全部楼层
让MP显示出来填充用

(xdrx_setpropertyvalue (car (entsel)) "pattern" '(1 "solid"))

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

使用道具 举报

已领礼包: 58个

财富等级: 招财进宝

 楼主| 发表于 2017-8-27 13:35:06 | 显示全部楼层
本帖最后由 brainstorm 于 2017-8-27 13:36 编辑

(xdrx_region->mpolygon (ssget)) 或 (xdrx_region->mpolygon (car(entsel)))我这里都不能生成
Mpolygon,图面上有用region命令生成的region


下面的代码生成的填充都没有面积,请老大帮忙分析原因,谢谢




;;;-----------------------------------------------------------

  1. (defun zgx-add-hatch-byloop
  2.        (mp bdlst patten scale / hch outer inner hch patten ss)
  3.   (xdrx_setmark)
  4.   (setq        outer (car bdlst)
  5.         outer (xdrx_polyline_make
  6.                 (xdrx_getpropertyvalue mp "MPolygonLoopAt" outer)
  7.               )
  8.   )
  9.   (if (and outer
  10.            (setq ss (ssadd)
  11.                  ss (ssadd outer ss)
  12.            )
  13.            (setq inner (cadr bdlst))
  14.       )
  15.     (progn
  16.       (foreach n inner
  17.         (setq
  18.           ss (ssadd
  19.                (xdrx_polyline_make
  20.                  (xdrx_getpropertyvalue mp "MPolygonLoopAt" n)
  21.                )
  22.                ss
  23.              )
  24.         )
  25.       )
  26.     )
  27.   )
  28.   (setq hch (xdrx_hatch_make ss))
  29.   (xdrx_setpropertyvalue
  30.     hch
  31.     "patternname"
  32.     (list 1 patten)
  33.     "patternscale"
  34.     scale
  35.     "color"
  36.     251
  37.   )
  38.   (xdrx_getss)
  39. )

  40. ;;;-----------------------------------------------------------
  41. (defun zgx-get-boundary-loop (mp pt / outer inner)
  42.   (setq        outer
  43.          (car (xdrx_getpropertyvalue
  44.                 mp
  45.                 "IsPointInsideMPolygon"
  46.                 pt
  47.               )
  48.          )
  49.   )
  50.   (if (not (eq (type outer) 'list))
  51.     (progn
  52.       (setq inner (xdrx_getpropertyvalue
  53.                     mp
  54.                     "ChildLoops"
  55.                     outer
  56.                   )
  57.       )
  58. ;;;--????---------------------------------------------------
  59.       (setq inner
  60.              (vl-remove-if-not
  61.                '(lambda        (x)
  62.                   (eq outer (xdrx_getpropertyvalue mp "parentloop" x))
  63.                 )
  64.                inner
  65.              )
  66.       )
  67.       (list outer inner)
  68.     )
  69.   )
  70. )
  71. ;;;-------------------------------------------------------------
  72. ;;;-------------------------------------------------------------

  73. (defun c:tt1 (/ mp bdlst tmpss pos curposoldtmpss *error* oldtmpss)
  74.   (defun *error* (msg)
  75.     (xdrx_pointmonitor)
  76.     (xdrx_entity_delete mp tmpss)
  77.   )
  78.   (defun #addhatch (p)
  79.     (setq curpos (xdrx_getpropertyvalue mp "ispointinsidempolygon" p))
  80.     (if        (and (not (equal pos curpos))
  81.              curpos
  82.         )
  83.       (progn
  84.         (if oldtmpss
  85.           (xdrx_entity_delete oldtmpss)
  86.         )
  87.         (setq
  88.           bdlst
  89.            (zgx-get-boundary-loop mp p)
  90.         )
  91.         (if bdlst
  92.           (setq tmpss (ZGX-ADD-HATCH-BYLOOP mp bdlst "ANSI31" 1000))
  93.         )
  94.         (setq oldtmpss tmpss)
  95.       )                                        ;progn      
  96.     )                                        ;if
  97.   )


  98.   (prompt "\nselect curves")
  99.   (setq ss0 (ssget '((0 . "*line,arc,ellipse,circle"))))
  100.   (setq ss (xdrx_entity_copy ss0))
  101.   (setq ss (xdrx_curve_intersectbreak ss))
  102.   ;;????????
  103.   (setq ss (xdrx_region_make ss))
  104.   ;;??region
  105.   (setq ss (xdrx_region->curve ss))
  106.   ;;region????(????????)
  107.   (setq mp (xdrx_mpolygon_make ss))
  108.   (xdrx_entity_delete ss)
  109.   (setq        pos t
  110.         curpos nil
  111.         loop t
  112.   )
  113.   (while loop
  114.     (xdrx_pointmonitor "#addhatch" mp ss0)
  115.     (setq pt (getpoint "\nÑ¡Ôñìî3äμã:"))
  116.     (xdrx_pointmonitor)
  117.     (if        pt
  118.       (progn
  119.         (setq pos t
  120.               curpos nil
  121.         )
  122.         (xdrx_setsstodb tmpss 0)
  123.         (while (setq e (xdrx_getentdata 0))
  124.           (xdrx_setenttodb e)
  125.           (if (wcmatch (xdrx_getentdxf 0) "*LINE")
  126.             (xdrx_entity_delete e)
  127.           )
  128.         )
  129.         (setq oldtmpss nil)
  130.       )
  131.       (progn
  132.         (setq loop nil)
  133.         (if oldtmpss
  134.           (xdrx_entity_delete oldtmpss)
  135.         )
  136.       )
  137.     )
  138.   )
  139.   (xdrx_entity_delete mp)
  140. )


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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-8-27 16:52:08 | 显示全部楼层

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

使用道具 举报

已领礼包: 58个

财富等级: 招财进宝

 楼主| 发表于 2017-8-27 16:59:35 | 显示全部楼层

见附件,wn10+cad2014
另外填充面积你那里正常么?

请点击此处下载

查看状态:需购买或无权限

您的用户组是:游客

文件名称:region.rar 
下载次数:2  文件大小:25.74 KB 
下载权限: 不限 以上  [免费赚D豆]


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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-8-27 22:31:45 | 显示全部楼层

用MP处理是一个解决方案。

不过,API有个更好的函数  xdrx_geom_bpoly 可以构建filter去点选生成边界,更狠的是能深入到INSERT里面。下面是演示。

TT2命令,没有使用过滤,红色和251色的都参与
TT3命令,使用了过滤,只找颜色号等于251的。

pickhatch.gif

下面是代码:

  1. (defun c:tt2 (/        mp bdlst tmpss pos curposoldtmpss *error* oldtmpss
  2.               oldregion)
  3.   (defun *error* (msg)
  4.     (xdrx_pointmonitor)
  5.     (xdrx_entity_delete mp tmpss)
  6.   )
  7.   (defun _makehatch
  8.                     (ent patten scale / hch)
  9.     (setq hch (xdrx_hatch_make ent))
  10.     (xdrx_setpropertyvalue
  11.       (entlast)
  12.       "patternname"
  13.       (list 1 patten)
  14.       "patternscale"
  15.       scale
  16.       "color"
  17.       251
  18.     )
  19.     hch
  20.   )
  21.   (defun #addhatch (p)
  22.     (if        (xdrx_point_isinside p oldregion)
  23.       (progn
  24.       )
  25.       (progn
  26.         (xdrx_entity_delete oldregion oldhatch)
  27.         (if (setq ss (xdrx_geom_bpoly p))
  28.           (progn
  29.             (setq oldregion (ssname ss 0))
  30.             (setq oldhatch (_makehatch oldregion "ANSI31" 1000))
  31.           )
  32.           (progn
  33.           )
  34.         )
  35.       )
  36.     )
  37.   )
  38.   (xdrx_begin)
  39.   (setq oldregion nil)
  40.   (setq oldhatch nil)
  41.   (xdrx_pointmonitor "#addhatch")
  42.   (while (setq pt (getpoint "\n移动鼠标:"))
  43.     (if        pt
  44.       (progn
  45.         (setq oldregion nil)
  46.         (setq oldhatch nil)
  47.       )
  48.     )
  49.   )
  50.   (xdrx_entity_delete oldregion oldhatch)
  51.   (xdrx_pointmonitor)
  52.   (xdrx_end)
  53.   (princ)
  54. )


下面的同上面的,仅仅是  (setq ss (xdrx_geom_bpoly p '((62 . 251)))) 这行不同。


  1. (defun c:tt3 (/        mp bdlst tmpss pos curposoldtmpss *error* oldtmpss
  2.               oldregion)
  3.   (defun *error* (msg)
  4.     (xdrx_pointmonitor)
  5.     (xdrx_entity_delete mp tmpss)
  6.   )
  7.   (defun _makehatch
  8.                     (ent patten scale / hch outer inner hch patten ss)
  9.     (setq hch (xdrx_hatch_make ent))
  10.     (xdrx_setpropertyvalue
  11.       (entlast)
  12.       "patternname"
  13.       (list 1 patten)
  14.       "patternscale"
  15.       scale
  16.       "color"
  17.       251
  18.     )
  19.     hch
  20.   )
  21.   (defun #addhatch (p)
  22.     (if        (xdrx_point_isinside p oldregion)
  23.       (progn
  24.       )
  25.       (progn
  26.         (xdrx_entity_delete oldregion oldhatch)
  27.         (if (setq ss (xdrx_geom_bpoly p '((62 . 251))))
  28.           (progn
  29.             (setq oldregion (ssname ss 0))
  30.             (setq oldhatch (_makehatch oldregion "ANSI31" 1000))
  31.           )
  32.           (progn
  33.           )
  34.         )
  35.       )
  36.     )
  37.   )
  38.   (xdrx_begin)
  39.   (setq oldregion nil)
  40.   (setq oldhatch nil)
  41.   (xdrx_pointmonitor "#addhatch")
  42.   (while (setq pt (getpoint "\n移动鼠标:"))
  43.     (if        pt
  44.       (progn
  45.         (setq oldregion nil)
  46.         (setq oldhatch nil)
  47.       )
  48.     )
  49.   )
  50.   (xdrx_entity_delete oldregion oldhatch)
  51.   (xdrx_pointmonitor)
  52.   (xdrx_end)
  53.   (princ)
  54. )



生成的HATCH有面积,演示里面能看到。不过我的API应该比你新,我不知道是不是API的原因。你用我上面的代码执行下,看看有面积没。


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

使用道具 举报

已领礼包: 8612个

财富等级: 富甲天下

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-8-28 00:09:06 | 显示全部楼层

你是说我的代码?

第二个,你的多段线颜色要设置成251,程序设置了过滤条件,做演示。只找颜色251的,其他颜色过滤掉。你可以多画几种颜色,其中要有251的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 58个

财富等级: 招财进宝

 楼主| 发表于 2017-8-28 08:34:05 | 显示全部楼层

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

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

发表于 2017-8-28 09:26:03 | 显示全部楼层

两种方法要结合下,就更好,是最终发展的方向。既能过滤,深入图块,又能有MPOLYGON的灵活。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 58个

财富等级: 招财进宝

 楼主| 发表于 2017-8-28 09:41:19 | 显示全部楼层

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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2017-8-28 09:53:43 | 显示全部楼层

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

使用道具 举报

已领礼包: 58个

财富等级: 招财进宝

 楼主| 发表于 2017-8-28 13:46:19 | 显示全部楼层

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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2017-8-28 14:27:52 | 显示全部楼层

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 00:41 , Processed in 0.214751 second(s), 60 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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