3dwannab 发表于 2022-7-5 14:35:03

图案填充角度未得到选择

大家好,
 
这是一个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)
)

Roy_043 发表于 2022-7-5 14:41:28

问题似乎与相关图案填充的负(非典型)gc 52值有关。图案填充的副本将具有正gc 52值。并且可能_-HatchEdit也会更正该值。
 
解决此问题的一种方法:
替换:
(cons 52 patangle)
使用:
'(-4 . "<OR") (cons 52 patangle) (cons 52 ((if (minusp patangle) + -) patangle pi pi)) '(-4 . "OR>")

3dwannab 发表于 2022-7-5 14:50:50

不幸的是,它仍然不起作用。
 
我附上了一张新的图纸,显示了一个新的问题。我不明白为什么这两方面都失败了。
 
图案填充旋转选择问题dwg2。图纸

Roy_043 发表于 2022-7-5 14:57:29

第二个问题显然与第一个问题有关。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-

3dwannab 发表于 2022-7-5 15:01:27

谢谢
 
它确实有效。但在某些方面失败了。
 
我已经换了。
(cons 52 patangle)
 
具有
(cons 52 (KGA_Math_LimitAngleRange patangle))
 
也许这不是正确的使用方法?

Roy_043 发表于 2022-7-5 15:08:21

我的意思是:
创建一个选择集,不过滤gc 52值。
在(repeat(setq i(sslength ss_1))…)循环还使用带有模糊的(equal)函数检查gc 52。

3dwannab 发表于 2022-7-5 15:16:41

 
我不能让它工作,因为我认为问题是舱口的角度读数不正确。
 
问题图案填充在属性中读取180度。所以我运行了一个脚本来获取它的道具。gc 52值读取-1.5708。
我点击了图案填充,按原样180度输入属性对话框。gc 52值现在为4.71239。
 
我想知道这是怎么翻译的。

Roy_043 发表于 2022-7-5 15:19:38

我不知道你现在指的是哪个图案填充哪个图纸。但值得检查dwg的ANGBASE设置。

3dwannab 发表于 2022-7-5 15:26:17

我遇到问题的任何舱口。
 
我试图运行hatchedit的对话框,并使用LeeMac的按键功能按我的L高亮显示OK btn,然后回车关闭UI并修复图案填充角度,因为(命令“_u.hatchedit”“”“”)技巧不起作用,但UI方法起作用。
 
Yep,ANGBASE设置为“0”。

Roy_043 发表于 2022-7-5 15:34:57

也许这有助于:
(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
查看完整版本: 图案填充角度未得到选择