samifox 发表于 2022-7-5 22:34:35

(trans)解释

你好
 
我承认,(trans)是我一直忽视学习的可怕功能之一,它似乎太复杂了,现在是时候处理它了,所以让我把迄今为止我所了解的全部布局好,
 
trans是将坐标的实际位置转换为Autocad中可用的任何坐标系。
 
WCS
世界坐标系实际上是支持所有其他系统的世界固定坐标系。
 
UCS
在WCS之上,用户可以定义一个新的坐标层,通过用户定义的原点位置和旋转,与WCS的关系由Autocad维护。
 
接触网
对象系统坐标
 
(从tp传输pt)
 
对象不会因从一个坐标系切换到另一个坐标系而更改其位置,autocad会在系统之间自动转换。
 
对于Autolisp编程,这种自动转换不会发生,编码为在WCS中绘制的对象在具有不同原点的UCS上绘制时不会相同。
 
(trans)用于进行此翻译。
 
思想的终结
 
我还没有得到的东西
 
1.关于OCS,entget重新记录的坐标假设显示了对象的相对坐标,但它们是相对于WCS的,我缺少什么?
 
关于使用向量而不是坐标,你能举个例子吗?
 
3.在Mac Lee的一段代码中,我看到:
 

enx (entget (ssname sel (1- inc)))
spf (polar '(0.0 0.0) (+ (cdr (assoc 50 enx)) (/ pi 2.0)) (* (cdr (assoc 40 enx)) spf))
vec (trans spf (trans '(0.0 0.0 1.0) 1 0 t) 0)

 
有人能解释一下吗(包括作者:)
 
谢谢
谢伊

hanhphuc 发表于 2022-7-5 22:39:41

我解释得不好,是关于XY平面在z轴上的旋转,
如果我错了,请告知thanx
在数学方面:


(defun shay:Trans? (p bp v / ); p= pt bp=base v=radians
(list
(+(*(- (car p) (car bp)) (cos v))
(*(- (cadr p) (cadr bp)) (sin v)))

(-(*(- (cadr p) (cadr bp)) (cos v))
(*(- (car p) (car bp)) (sin v )))

(caddr p)
)
)

 
示例如何转换为新坐标?
(104,103,5.0) --> (5.0 0.0 5.0)
 
这是一个理论,因此可以在WCS中测试
 
(setq基'(100.100.0);
pt’(104.103.5.0))
 
_$(shay:Trans?pt base(angle base pt));
(5.0 4.44089e-016 5.0)
_$

Lee Mac 发表于 2022-7-5 22:41:43

 
请参见我的解释:
 
http://www.theswamp.org/index.php?topic=47544.msg525391#msg525391
 
关于反式翻译的解释,有几个可以找到——这里有几个:
 
http://www.theswamp.org/index.php?topic=13526.0
http://www.theswamp.org/index.php?topic=31802

samifox 发表于 2022-7-5 22:47:00

 
谢谢李
 
由于我的(跨)集我工作非常努力,我的大脑正在燃烧试图抓住这个主题,
我了解了你发布的链接,你的文本对齐代码,但仍然不能说我赢得了这个主题
 
根据(trans)文档示例,
我试图从文本的插入点画一条线,
我旋转UCS,粘贴一段文本,然后执行以下操作:
 

(defun txt()
(setq ent(entget(car(entsel))))
(setq ip (cdr(assoc 10 ent)))
(setq ip (trans ip ent 1))
(command "_line" ip)
)

 
我得到了这个错误:
 

; error: bad argument type: coordinate system specification:
((-1 . <Entity name: 7ffffbaec70>)
(0 . "TEXT")
(330 . <Entity name: 7ffffb189f0>)
(5 . "1BF")
(100 . "AcDbEntity")
(67 . 0)
(410 . "Model")
(8 . "0")
(100 . "AcDbText")
(10 14.9945 10.9974 0.0)
(40 . 0.2)
(1 . "(command \"_point\" spf)")
(50 . 0.0)
(41 . 1.0)
(51 . 0.0)
(7 . "Standard")
(71 . 0)
(72 . 0)
(11 0.0 0.0 0.0)
(210 0.0 0.0 1.0)
(100 . "AcDbText")
(73 . 0))

 
怎么了?

hanhphuc 发表于 2022-7-5 22:49:56

尝试使用en not ent

(setq en (car (entsel)))
..
..
(trans ip en 1)

samifox 发表于 2022-7-5 22:51:21

 
你认为耳鼻喉科不是空的和受保护的吗?

hanhphuc 发表于 2022-7-5 22:55:50

不,您的ent只是一个entget列表,而不是一个ename(car(entsel))

Lee Mac 发表于 2022-7-5 22:59:17

hanhphuc正确-
 
trans函数将接受对应于坐标系枚举的整数(0=WCS,1=UCS等)、使用任意轴算法构建坐标系的法向量或实体名称(函数将使用实体的OCS)。
 
在代码中,您提供的是DXF组码的关联列表,该列表不是有效参数。
 
我还建议考虑对对象捕捉的可能干扰:
(defun txt ( / ent )
   (if (setq ent (car (entsel)))
       (command "_.line" "_non" (trans (cdr (assoc 10 (entget ent))) ent 1) "\\" "")
   )
   (princ)
)

samifox 发表于 2022-7-5 23:02:55

你好
 

(setvar "PDMODE" 34)
(setq p 0.0)
(setq n 0.0)

(defun test1 (/ p n)
(setq p (getpoint))

(repeat 5
   (setq p (append (list (+ (car p) 10.0)) (list (cadr p))))
   (setq p (trans p 0 1))


   (command "_.point" "_non" p
      
   )
)
)

 
如果我修改UCS,这段代码正在形成角度点顺序。。。。为什么?
和没有trans似乎是预期的结果?
困惑的

Lee Mac 发表于 2022-7-5 23:05:46

getpoint返回与UCS相关的点。
页: [1] 2
查看完整版本: (trans)解释