啵浪鼓 发表于 2011-7-21 23:54:02

关于块插入点在ucs=用户自定义和ucs=w时坐标点乱象问题

本帖最后由 啵浪鼓 于 2011-7-21 23:57 编辑

当初建块时采用ucs坐标系=用户自定义,当ucs=w时如何得到这些非建立在ucs=w时所建的块

在ucs=w时,所得到的块坐标系:

cad自带命令list得到的结果:
于 点, X=10.0000Y=10.0000Z=   0.0000

查看10的像素得到的坐标:
(10 6601.19 -691.005 0.0)

正确做法是插块时必须以ucs=w时,方可插入,但实际很多图档部分块当初插入块时,未将ucs设为w,造成10的像素非真实的点,

如何查找这些非世界坐标ucs=w时插入的块???

hnzkhyyl 发表于 2023-9-30 12:09:45

cash1331 发表于 2011-10-27 12:31
你们怎么这么复杂。。。我用一个命令就使插入点正确,是不是碰巧,,,,

(defun C:234 ()      


高手啊,解决了我插入文字时,文字离插入点很远的问题

itoboy 发表于 2020-5-27 23:35:50

高飞版主确实是牛,慢慢研究其中奥秘

caoyin 发表于 2011-7-22 00:09:39

本帖最后由 caoyin 于 2011-7-22 00:23 编辑

(vlax-get
(vla-item
(vla-get-blocks
   (vla-get-ActiveDocument (vlax-get-acad-object))
)
(vla-get-name
   (vlax-ename->vla-object
   (car (entsel "\n选择块: "))
   )
)
)
'Origin
)
-------------------------------------------
AutoLISP:
(cdr (assoc 10 (tblsearch"BLOCK" (cdr (assoc 2 (entget (car (entsel "\n选择块: "))))))))

啵浪鼓 发表于 2011-7-22 01:39:10

本帖最后由 啵浪鼓 于 2011-7-22 01:47 编辑

感谢 C版 这么夜了还在忙于解答疑难杂症,乐此不疲!

C版的方法好像不能解决ucs/wcs的问题!

有如:
图中有些块是基于ucs建立,有些块是基于wcs建立,我们做图原则以wcs为原则,所以要将ucs建的块找出来???
图片中,块1,块2,块4为wcs原则下创建的,所以它的坐标点是正确的
图片中,块3是亮点,基于ucs时建立的块,10的组码对于wcs模式下看它是不真实的,所得的坐标 X=19514.840,Y=2766.420也是错误!

让我在wcs模式下得到ucs块的正确坐标点来啊啊啊
解决不同坐标系的块方法有没有啊,有没有!!!

highflybir 发表于 2011-7-22 08:41:13

本帖最后由 highflybir 于 2011-7-22 09:06 编辑

发给图上来吧。再详细说明一下。暂时不清楚你说的UCS仅仅是平移了原点的uCS,还是有角度旋转的UCS。如果仅仅是平移了原点的UCS,那你是无法区分做图块时用的是UCS还是WCS.

例如下面:你能区分么?

UCS下做的块
Command: ee
Select object: ((-1 . <Entity name: 7ec2d508>) (0 . "INSERT") (330 . <Entity
name: 7ed10cf8>) (5 . "BC4D9") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8
. "0") (100 . "AcDbBlockReference") (2 . "kkk12") (10 134418.0 -100617.0 0.0)
(41 . 1.0) (42 . 1.0) (43 . 1.0) (50 . 0.0) (70 . 0) (71 . 0) (44 . 0.0) (45 .
0.0) (210 0.0 0.0 1.0))

WCS下做的块
Command: ee
Select object: ((-1 . <Entity name: 7ec2d538>) (0 . "INSERT") (330 . <Entity
name: 7ed10cf8>) (5 . "BC4DF") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8
. "0") (100 . "AcDbBlockReference") (2 . "kkk11") (10 134418.0 -100617.0 0.0)
(41 . 1.0) (42 . 1.0) (43 . 1.0) (50 . 0.0) (70 . 0) (71 . 0) (44 . 0.0) (45 .
0.0) (210 0.0 0.0 1.0))

另外,尚不清楚你说的是它们的块定义,还是块插入?
块定义:
UCS下做的块
Command: (entget (tblobjname "block" "kkk12"))
((-1 . <Entity name: 7ec2d4f0>) (0 . "BLOCK") (330 . <Entity name: 7ec2d4e8>)
(5 . "BC4D6") (100 . "AcDbEntity") (67 . 0) (8 . "0") (100 . "AcDbBlockBegin")
(70 . 0) (10 0.0 0.0 0.0) (-2 . <Entity name: 7ec2d500>) (2 . "kkk12") (1 . ""))

WCS下做的块
Command: (entget (tblobjname "block" "kkk11"))
((-1 . <Entity name: 7ec2d520>) (0 . "BLOCK") (330 . <Entity name: 7ec2d518>)
(5 . "BC4DC") (100 . "AcDbEntity") (67 . 0) (8 . "0") (100 . "AcDbBlockBegin")
(70 . 0) (10 0.0 0.0 0.0) (-2 . <Entity name: 7ec2d530>) (2 . "kkk11") (1 . ""))

啵浪鼓 发表于 2011-7-22 22:31:40

回复 highflybir 的帖子

当初建块时 块2/块3/块5 是基于ucs建立的,已无法获得当初建块的"INSBASE"的值
我们的图要求是wcs模式运行,而wcs下获得的ucs块的坐标就不是真实的了
如同上图中,2的坐标应该是X=10,Y=10,而程序获得10的组码得到的是X=1085.060,Y=821.460

问: 如何在wcs下获得ucs块的真实坐标
   或者得到ucs块基于目前的ucs坐标(如上图标注的那样得到的值)
   或者找到ucs块并在ucs块的中心做一个标志,让用户知道哪些是ucs块

ljpnb 发表于 2011-7-22 23:49:24

是有点头痛,块我们应用很少,还好找到以前版主的留下的高招
;;;获得块中的圆的圆心,选择时要直接点取块中的圆才可以
(setq cp (cdr (assoc 10 (entget (car (setq nel (nentsel "\n选择块中圆:")))))))
(setq cp (polar cp (angle '(0 0 0) (setq pt (cdr (assoc 10 (entget (last (last nel))))))) (distance'(0 0 0) pt)))
;;;CP就是圆心坐标

highflybir 发表于 2011-7-23 01:42:15

你这些图看起来都是插入点不在圆心上。是不是所有的图块插入点应该在圆心上?如果是的话,应该很好判断。只要判断插入点不在圆心上就可以了,就能找出所有的。

啵浪鼓 发表于 2011-7-24 00:06:45

本帖最后由 啵浪鼓 于 2011-7-24 00:08 编辑

回复 highflybir 的帖子

是的,所有块插入点都应在圆中心,若偏离圆中心就是所说的坏块(程序本是以中心插入,由于那段vlx加密程序未在程序前加上ucs=w,导致用户插入块时未将ucs还原成wcs,导致块的中心不在圆中心)

高飞版主 很好很强大,美中不足的是:
图档中的块2为正常块组码为(41 . 1),结果是正确 (10.0 10.0 0.0)
图档中的块3为镜向块组码为(41 . -1.0),应为(35.0 15.0 0.0)得到的结果为(-2115.13 15.0 0.0)

因为图中有些ucs块不单是镜向块/旋转块/旋+镜向块 等等,结果就不正确了!

还有最大缺撼就是没法批量选,如果单选的话,一个图档通常有300个左右块,图档有500多个,人工单选那就不现实了额!泪奔啊啊啊!

jxphklibin 发表于 2011-7-26 20:59:28

请教 highflybir 高手也可以的!!!!

啵浪鼓 发表于 2011-7-27 22:25:04

回复 jxphklibin 的帖子

求真相,求wcs求ucs块坐标啊啊啊
页: [1] 2 3
查看完整版本: 关于块插入点在ucs=用户自定义和ucs=w时坐标点乱象问题