找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 5034|回复: 42

[教学] 关于 Hatch 的制造

[复制链接]

已领礼包: 1268个

财富等级: 财源广进

发表于 2015-11-9 09:55:24 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 st788796 于 2015-11-9 09:58 编辑

Hatch 是经常用的一种实体类型,在 ObjectARX 中 AcDbHatch 的默认构造 是
AcDbHatch* pHatch = new AcdbHatch();
可以看到这里没有**任何 Hatch 特殊属性,要生成显示的 Hatch 实体,还需要对这个 pHatch 进行一些列的 设置,比如样式类型、角度、填充比例等等,最后不可或缺一步就是要加上“边界”(appendLoop) ,这样这个 Hatch 才有可能成功的创建。
而且,这些边界不一定是真实存在的,在命令中创建完 Hatch ,即使删掉这些边界实体,Hatch 依然可以存在。这些边界信息在 DXF 中 “边界路径数据” 可以查看边界信息,在 ObjectARX 模型中这些边界是 AcGeCurve。

通过上面信息可以知道 Entmake 如果仅用 Hatch 头信息而没有 边界信息 是不能制造出 Hatch 的。在不用 ARX 时可以用 ActiveX 方法制作 Hatch

RetVal = object.AddHatch(PatternType, PatternName, Associativity [, HatchObjectType])
            要加入Hatch实体的Object,包括 模型空间、图纸空间、块定义.
PatternType  图案类型,枚举类型 input-only
AcPatternType or AcGradientPatternType enum;
If the HatchObjectType enum value is acHatchObject, then use the AcPatternType enum; if the HatchObjectType enum value is AcGradientObject, then use the AcGradientPatternType enum.

PatternName  图案名称,字符串  input-only
If the HatchObjectType enum value is acHatchObject, then PatternName should contain the hatch pattern name. If the HatchObjectType enum value is acGradientObject, then PatternName should contain one of the the gradient pattern names listed in GradientName.

Associativity 关联选项,布尔值; input-only
TRUE: The hatch will be associative. FALSE: The hatch will not be associative.
HatchObjectType 填充实体类型,  可选项 ; input-only
The default value is the AcHatchObjectType enum value of AcHatchObject. If the AcHatchObjectType enum value is AcGradientObject, then PatternType should be of type AcGradientPatternType, and PatternName should contain the gradient pattern name.

返回值  Hatch object
The newly created Hatch object.

说明:
The PatternType constant values are as follows:
acHatchPatternTypePredefined  Selects the pattern name from those defined in the acad.pat file.
acHatchPatternTypeUserDefined  Defines a pattern of lines using the current linetype.
acHatchPatternTypeCustomDefined  Selects the pattern name from a PAT file other than the acad.pat file.

After the Hatch object is created, you must add the outer loop using the AppendOuterLoop method.
Hatch创建后,你必须对Hatch使用 AppendOuterLoop 方法增加外部边界
The outer loop must be closed and must be created before any inner loops can be created.
外部边界必须在内部环创建前创建
Inner loops are created one at a time, using the AppendInnerLoop method.
内部环使用 AppendInnerLoop 一次创建

WARNING! Once the Hatch object has been created, you must append the outer loop to the Hatch object for it to become a valid AutoCAD object.
警告!Hatch 一旦创建,你必须增加外部环,以使 Hatch 成为 AutoCAD 有效实体
If you attempt any operation other than calling the AppendOuterLoop method, AutoCAD will enter an unpredictable state.
如果你在使用 AppendOuterLoop 方法之前试图其它任何操作,AutoCAD将进入不可预测状态

待续

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

已领礼包: 1268个

财富等级: 财源广进

 楼主| 发表于 2015-11-9 10:26:19 | 显示全部楼层

一个例子

  1. (vl-load-com)
  2. (defun c:mkhatch (/ ss sl e lst space hatch)
  3.   (princ "\n选择边界...")
  4.   (if
  5.     (setq
  6.       ss (ssget
  7.            '((0 . "line,arc,circle,ellipse,lwpolyline,spline,region"))
  8.          );_选择边界
  9.     )
  10.      (progn
  11.        (setq sl (sslength ss))
  12.        (while (setq e (ssname ss (setq sl (1- sl))))
  13.          (setq lst (cons (vlax-ename->vla-object e) lst))
  14.        );_提取构造边界的 Object
  15.        (setq space (if (zerop (getvar "tilemode"))
  16.                      (vla-get-**space
  17.                        (vla-get-activedocument (vlax-get-acad-object))
  18.                      )
  19.                      (vla-get-modelspace
  20.                        (vla-get-activedocument (vlax-get-acad-object))
  21.                      )
  22.                    )
  23.        );_获取当前空间
  24.        (setq hatch (vla-addhatch
  25.                      space
  26.                      acHatchPatternTypePredefined
  27.                      "line"
  28.                      :vlax-true
  29.                    )
  30.        );_构造一个 Hatch Object
  31.        (vla-appendouterloop
  32.          hatch
  33.          (vlax-safearray-fill
  34.            (vlax-make-safearray
  35.              vlax-vbobject
  36.              (cons 0 (1- (length lst)))
  37.            )
  38.            lst
  39.          )
  40.        );_增加外环
  41.        (vla-put-patternangle hatch (* pi 0.25));_设置角度
  42.        (vla-put-patternscale hatch 2.0);_设置填充比例
  43.        (vla-Evaluate hatch);_重新计算填充
  44.      )
  45.   )
  46.   (princ)
  47. )

评分

参与人数 1D豆 +10 收起 理由
lucas3 + 10 很给力!经验;技术要点;资料分享奖!

查看全部评分

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

使用道具 举报

已领礼包: 5578个

财富等级: 富甲天下

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

使用道具 举报

已领礼包: 2476个

财富等级: 金玉满堂

发表于 2016-9-11 11:48:44 | 显示全部楼层

怎么我用不了...选择集只有一个图元 没问题...多个就这个提示 选择对象:
; 错误: Automation 错误。 输入无效
命令:
已删除图案填充边界关联性
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2476个

财富等级: 金玉满堂

发表于 2016-9-11 12:17:42 | 显示全部楼层

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2016-9-11 12:26:42 | 显示全部楼层
q3_2006 发表于 2016-9-11 12:17
看了说明..只能一个个加....

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

使用道具 举报

已领礼包: 2476个

财富等级: 金玉满堂

发表于 2016-9-11 13:08:14 | 显示全部楼层
newer 发表于 2016-9-11 12:26
只能一个一个加什么?

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2016-9-11 13:54:27 | 显示全部楼层
q3_2006 发表于 2016-9-11 13:08
版主来一个一次搞定的...上面代码我真用不了...

下面代码通过你拾取的一些点做边界创建一个关联的填充。

  1. (defun c:tt (/                acadObj           doc              patternName
  2.              patternType           bAssociativity         modelSpace
  3.              hatchObj        center           radius     startAngle endAngle
  4.              arc        line           outerLoop  pt         pt2
  5.              ptlist        tmp           myobj      a                 i
  6.             )
  7.   ;;本例子在模型空间创建一个关联HATCH,并添加一个外部LOOP
  8.   (setq acadObj (vlax-get-acad-object))
  9.   (setq doc (vla-get-ActiveDocument acadObj))

  10.   ;; 定义HATCH数据
  11.   (setq        patternName
  12.          "ANSI31"
  13.         patternType
  14.          0
  15.         bAssociativity :vlax-true
  16.   )

  17.   ;; 创建关联 Hatch object
  18.   (setq modelSpace (vla-get-ModelSpace doc))
  19.   (setq        hatchObj (vla-AddHatch
  20.                    modelSpace             patternType
  21.                    patternName             bAssociativity
  22.                    acHatchObject
  23.                   )
  24.   )

  25. ;;;边界第一点
  26.   (setq pt (getpoint "\nSpecify start point: "))
  27.   (setq ptlist (cons pt ptlist))
  28.   (setq i 0)
  29.   (while (setq pt (getpoint "\nSpecify next point: " pt))
  30.     (setq i (+ i 1))
  31.     (setq ptlist (cons pt ptlist))

  32.   )
  33.   (setq ptlist (cons (nth i ptlist) ptlist))
  34.   (setq ptlist (apply 'append ptlist))

  35.   ;; 给HATCH添加外部LOOP
  36.   ;; ARC和LINE用于添加封闭的LOOP

  37.   (setq
  38.     tmp        (vlax-make-safearray
  39.           vlax-vbDouble
  40.           (cons 0 (- (length ptlist) 1))
  41.         )
  42.   )
  43.   (vlax-safearray-fill tmp ptlist)

  44.   (setq poly (vla-AddPolyline modelSpace tmp))

  45.   (setq outerLoop (vlax-make-safearray vlax-vbObject '(0 . 0)))
  46.   (vlax-safearray-put-element outerLoop 0 poly)

  47.   ;; Append the outer loop to the hatch object, and display the hatch
  48.   (vla-AppendOuterLoop hatchObj outerLoop)
  49.   (vla-Evaluate hatchObj)
  50.   (princ)
  51. )


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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2016-9-11 14:14:16 | 显示全部楼层
q3_2006 发表于 2016-9-11 13:08
版主来一个一次搞定的...上面代码我真用不了...

搜狗截图20160911140557.png

下面VLISP代码在原点创建一个有内部孤岛的HATCH
游客,如果您要查看本帖隐藏内容请回复

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

使用道具 举报

已领礼包: 2476个

财富等级: 金玉满堂

发表于 2016-9-11 14:28:42 | 显示全部楼层
newer 发表于 2016-9-11 14:14
下面VLISP代码在原点创建一个有内部孤岛的HATCH
**** 本内容被作者隐藏 ****

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

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

发表于 2016-9-11 14:53:02 | 显示全部楼层
q3_2006 发表于 2016-9-11 13:08
版主来一个一次搞定的...上面代码我真用不了...

我这有一个,用 vlax-put-property实现的,把你选择的多个封闭的多段线填充。
  1. (defun c:tt (/ ss h)
  2.   (vl-load-com)
  3.   (if (setq ss (ssget '((0 . "LWPOLYLINE")
  4.                         (-4 . "<OR")
  5.                         (70 . 1)
  6.                         (70 . 129)
  7.                         (-4 . "OR>")
  8.                        )
  9.                )
  10.       )
  11.     ((lambda (space)
  12.        (vlax-for x (setq ss (vla-get-activeselectionset *AcadDoc*))
  13.          (vla-put-layer
  14.            (setq h (vla-AddHatch
  15.                      space
  16.                      acHatchPatternTypePredefined
  17.                      "SOLID"
  18.                      :vlax-true
  19.                    )
  20.            )
  21.            (vla-get-layer x)
  22.          )
  23.          (vlax-invoke h 'AppendOuterLoop (list x))
  24.          (vlax-invoke h 'Evaluate)
  25.        )
  26.        (vla-delete ss)
  27.      )
  28.       (if (or (eq acmodelspace
  29.                   (vla-get-activespace
  30.                     (cond (*AcadDoc*)
  31.                           ((setq *AcadDoc* (vla-get-activedocument
  32.                                              (vlax-get-acad-object)
  33.                                            )
  34.                            )
  35.                           )
  36.                     )
  37.                   )
  38.               )
  39.               (eq :vlax-true (vla-get-mspace *AcadDoc*))
  40.           )
  41.         (vla-get-modelspace *AcadDoc*)
  42.         (vla-get-paperspace *AcadDoc*)
  43.       )
  44.     )
  45.   )
  46.   (princ)
  47. )


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

使用道具 举报

已领礼包: 2476个

财富等级: 金玉满堂

发表于 2016-9-11 17:52:26 | 显示全部楼层
Lisphk 发表于 2016-9-11 14:53
我这有一个,用 vlax-put-property实现的,把你选择的多个封闭的多段线填充。

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

使用道具 举报

已领礼包: 8711个

财富等级: 富甲天下

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

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

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

使用道具 举报

已领礼包: 34个

财富等级: 招财进宝

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 19:05 , Processed in 0.414800 second(s), 61 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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