图案填充角度未得到选择
大家好,这是一个Lisp程序的问题。
除了舱口角度正常外,一切正常。
直到我通过-hatchedit命令运行它,它才起作用。
这是UCS问题吗?
图纸:
图案填充旋转选择问题。图纸
Lisp程序:
(defun c:QSHLPASCB nil (c:QSHATCH_SAME_Layer_PatName_Rotation_PatScale_Color&BkgColor))
(defun c:QSHATCH_SAME_Layer_PatName_Rotation_PatScale_Color&BkgColor (/
bkgcol
ent_1
laycolor
layer
nss
patangle
patname
patscale
ss_1
ssdata
)
(while
(not
(and
(setq
ent_1 (car (entsel "\nSelect Hatch to get same Hatch entities as:\n\n- LAYER\n- PATTERN NAME\n- PATTERN ANGLE\n- PATTERN SCALE\n- COLOUR\n- BACKGROUND COLOUR\n-------------------------------------------------------------"))
ssdata (if ent_1 (entget ent_1))
)
(= (cdr (assoc 0 ssdata)) "HATCH")
(sssetfirst nil)
(setq ss_1 (vlax-ename->vla-object ent_1))
(progn
(setq
bkgcol (vla-get-backgroundcolor ss_1)
bkgcol (vla-get-ColorIndex (vla-get-BackgroundColor ss_1))
laycolor (vla-get-color ss_1)
layer (vla-get-Layer ss_1)
patname (vla-get-PatternName ss_1)
patangle (vla-get-PatternAngle ss_1)
patscale (vla-get-PatternScale ss_1)
ss_1 (ssget "X"
(vl-remove 'nil
(list (cons 8 layer)
'(0 . "HATCH")
(cons 2 patname)
(cons 52 patangle)
(cons 62 laycolor)
(cons 410 (getvar 'ctab))
(if (/= "SOLID" patname)
(cons 41 patscale)
)
)
)
)
nss (ssadd)
)
(repeat (setq i (sslength ss_1))
(and
(setq e (ssname ss_1 (setq i (1- i))))
(= bkgcol (vla-get-ColorIndex (vla-get-BackgroundColor (vlax-ename->vla-object e))))
(ssadd e nss)
)
)
(princ (strcat "\n: ------------------------------\n <<< "(itoa (sslength ss_1)) (if (> (sslength ss_1) 1) " >>> similar HATCHES" " >>> similar HATCH") " selected.\n: ------------------------------\n"))
(sssetfirst nil nss)
)
)
)
)
(princ)
) 问题似乎与相关图案填充的负(非典型)gc 52值有关。图案填充的副本将具有正gc 52值。并且可能_-HatchEdit也会更正该值。
解决此问题的一种方法:
替换:
(cons 52 patangle)
使用:
'(-4 . "<OR") (cons 52 patangle) (cons 52 ((if (minusp patangle) + -) patangle pi pi)) '(-4 . "OR>") 不幸的是,它仍然不起作用。
我附上了一张新的图纸,显示了一个新的问题。我不明白为什么这两方面都失败了。
图案填充旋转选择问题dwg2。图纸 第二个问题显然与第一个问题有关。gc 52值同样不典型:7.06858(大于2pi)。
我看到的唯一解决方案是删除ssget过滤器的这一部分,并在应用此类函数后比较gc 52值:
; Change an angle to fit in the range: 0 <= angle < 2pi.
; (KGA_Math_LimitAngleRange 8.3) => 2.01681
(defun KGA_Math_LimitAngleRange (ang)
(rem (+ (rem ang (+ pi pi)) pi pi) (+ pi pi))
)
(equal (KGA_Math_LimitAngleRange ang1) (KGA_Math_LimitAngleRange ang2) 1e- 谢谢
它确实有效。但在某些方面失败了。
我已经换了。
(cons 52 patangle)
具有
(cons 52 (KGA_Math_LimitAngleRange patangle))
也许这不是正确的使用方法? 我的意思是:
创建一个选择集,不过滤gc 52值。
在(repeat(setq i(sslength ss_1))…)循环还使用带有模糊的(equal)函数检查gc 52。
我不能让它工作,因为我认为问题是舱口的角度读数不正确。
问题图案填充在属性中读取180度。所以我运行了一个脚本来获取它的道具。gc 52值读取-1.5708。
我点击了图案填充,按原样180度输入属性对话框。gc 52值现在为4.71239。
我想知道这是怎么翻译的。 我不知道你现在指的是哪个图案填充哪个图纸。但值得检查dwg的ANGBASE设置。 我遇到问题的任何舱口。
我试图运行hatchedit的对话框,并使用LeeMac的按键功能按我的L高亮显示OK btn,然后回车关闭UI并修复图案填充角度,因为(命令“_u.hatchedit”“”“”)技巧不起作用,但UI方法起作用。
Yep,ANGBASE设置为“0”。 也许这有助于:
(defun KGA_Conv_Pickset_To_ObjectList (ss / i ret)
(if ss
(repeat (setq i (sslength ss))
(setq ret (cons (vlax-ename->vla-object (ssname ss (setq i (1- i)))) ret))
)
)
)
(defun KGA_Math_LimitAngleRange (ang)
(rem (+ (rem ang (+ pi pi)) pi pi) (+ pi pi))
)
; (ResetHatchPatAngle (ssget '((0 . "HATCH"))))
; Argument: ss - Selection . Selection should contain hatch objects.
; Return: Number of changed objects .
(defun ResetHatchPatAngle (ss / ang)
(apply
'+
(mapcar
'(lambda (obj / ang)
(if
(and
(vlax-property-available-p obj 'patternangle)
(or
(< (setq ang (vla-get-patternangle obj)) 0.0)
(>= ang (+ pi pi))
)
)
(progn
(vla-put-patternangle obj (KGA_Math_LimitAngleRange ang))
1
)
0
)
)
(KGA_Conv_Pickset_To_ObjectList ss)
)
)
)
页:
[1]
2